SQUID - это программа, которая получает http/ftp запросы клиентов и по ним обращается к ресурсам Интернет. Применение прокси-сервера (squid) дает возможность использовать фиктивные IP-адреса во внутренней сети (Masquerading), увеличивает скорость обработки запроса при повторном обращении (кэширование), обеспечивает дополнительную безопасность. Нет смысла устанавливать прокси на своей домашней машине, так как функции кэширования выполняет браузер. Прокси-сервер стоит применять лишь в том случае, если в вашей сети три-четыре компьютера, которым нужен выход в Интернет. В этом случае запрос от браузера к прокси-серверу обрабатывается быстрее, чем от прокси к ресурсам Интернет, и таким образом увеличивается производительность. К тому же, мы можем смело установить размер кэша в браузерах клиентов равным нулю. SQUID может быть установлен из исходных текстов или в виде RPM-пакета. Установка RPM пакета SQUID очень проста - для этого нужно ввести команду
rpm -ih squid-2.3.STABLE2-3mdk.i586.rpm
Я использую версию squid 2.3. Более новая версия доступна в виде исходных кодов. Исходники можно получить по адресу ftp://ftp.squid.org/. Для распаковки исходных кодов, выполните следующие команды:
cd /usr/src/ gunzip squid-2.3.STABLE2-3-src.tar.gz tar xvf squid-2.3.STABLE2-3-src.tar.gz cd squid
Теперь перейдем непосредственно к установке:
./configure --prefix=/usr/local/squid make all make install
Squid будет установлен в каталог, заданный ключом prefix - /usr/local/squid. Помимо prefix можно пользоваться следующими ключами:
Настройка SquidSquid использует файл конфигурации squid.conf. Обычно он располагается в каталоге /etc/squid (или /usr/local/squid/etc - более ранние версии). Открываем его в любом текстовом редакторе, например joe /usr/local/squid/etc/squid.conf Укажем прокси провайдера:
joe /usr/local/squid/etc/squid.conf
cache_peer proxy.isp.ru
В данном случае proxy.isp.ru становится нашим <соседом> (neighbour, peer) Установим объем памяти, доступный squid, и каталог для кэша.
cache_mem 65536 cache_dir /usr/local/squid/cache 1024 16 256
1024 - количество мегабайт для кэша Стоит ли говорить, что если у вас несколько жестких дисков, то кэш нужно разместить на самом быстром из них. Укажем хосты, с которых разрешен доступ к прокси
разрешенные SSL порты:
acl SSL_ports port 443 563
запретим метод CONNECT для всех портов, кроме указанных в acl SSL_ports:
http_access deny CONNECT !SSL_ports
и запретим доступ всем, кроме тех, кому можно:
http_access allow localhost http_access allow allowed_hosts http_access allow SSL_ports http_access deny all
пропишем пользователей, которым разрешено пользоваться squid (den, admin, developer):
ident_lookup on acl allowed_users user den admin developer http_access allow allowed_users http_access deny all
Тэги maxium_object_size и maxium_object устанавливают ограничения на размер передаваемых объектов. Ниже приведен пример запрета доступа к любому URL, который соответствует шаблону games и разрешения доступа ко всем остальным:
acl GaMS url_regex games http_access deny GaMS http_access allow all
Запуск SQUIDТеперь, когда мы выполнили базовую настройку SQUID, его нужно запустить:
/usr/local/squid/bin/squid -z
Параметр -z нужен для создания (обнуления) каталога, содержащего кэш. Обычно параметр -z нужен только при первом запуске. Полезные параметры:
Формат файла squid.confПараметры сети:
http_port 3128
Порт для запросов клиентов:
icp_port 3130
Если соседей (peer) нет, установите:
icp_port 0
htcp_port 4827
tcp_incoming_address 0.0.0.0
tcp_outgoing_address 0.0.0.0
udp_outgoing_address 0.0.0.0
udp_incoming_address 0.0.0.0
passive_ftp on | off
Соседиcache_peer hostname type proxy-port icp-port options Каждый сосед прописывается отдельной строкой.
cache_peer hostname type proxy-port icp-port options
Parent - при отсутствии запроса в локальном кэше, он перенаправляется к parent, тот, если запроса не окажется в его кэше, пересылает его дальше и т.д. Возвращает готовый ответ подчиненному. Если squid получает TCP_DENIED от parent, то обращается к ресурсу напрямую. sibling - при отсутствии запроса в локальном кэше, запрос перенаправляется в sibling, при отсутствии запроса в нем, возвращает сообщение об этом, никаких дополнительных действий не предпринимается.
Управление кэшемcache_swap_high число При достижение этого уровня заполнения кэша (в процентном соотношении) начинается ускоренный процесс удаления старых объектов. cache_swap_low 90 Процесс удаления прекращается при достижении этого уровня. maximum_object_size 4096 KB Максимальный размер кэшируемого объекта. minimum_object_size 0 KB Файлы меньшего размера не сохраняются
cache_swap_high число
cache_swap_low 90
maximum_object_size 4096 KB
minimum_object_size 0 KB
Протоколированиеcache_access_log /usr/local/squid/logs/access.log Протоколируется каждый запрос к SQUID cache_log /usr/local/squid/logs/cache.log Журнал запусков процессов cache_store_log /usr/local/squid/logs/store.log Журнал записи объектов в кэш. Если какой-то журнал вам не нужен, установите none вместо имении файла.
cache_access_log /usr/local/squid/logs/access.log
cache_log /usr/local/squid/logs/cache.log
cache_store_log /usr/local/squid/logs/store.log
Параметры внешних программftp_user email-адрес Будет использоваться вместо пароля при анонимном доступе к ftp-серверам cache_dns_program /usr/local/squid/bin/dnsserver
ftp_user email-адрес
cache_dns_program /usr/local/squid/bin/dnsserver
dns_nameservers список-IP-адресов. Используется вместо того списка DNS-серверов, который определен в /etc/resolv.conf; по умолчанию - none authenticate_program none Позволяет производить аутентификацию клиентов, делающих запросы. Должен быть определен ACL proxy_auth; традиционная программа аутентификации определена в ../auth_modules/NCSA authenticate_program /usr/local/squid/bin/ncsa_auth /usr/local/squid/etc/passwd
authenticate_program none
Списки ACL ACL - определение списка доступа. Определяется так:
acl имя тип строка
Тип - это тип объекта, а строка - регулярное выражение. Можно использовать список acl имя тип <имя файла> (по одному параметру в строке)
Типы:
[-i] - игнорируется регистр букв.
Параметры доступа http_access allow|deny aclname Разрешать доступ к прокси по HTTP icp_access allow|deny aclname Разрешать доступ к прокси по ICP miss_access allow|deny aclname Разрешить получать ответ MISS от нас. cache_peer_access cache-host allow|deny aclname Ограничить запросы к данному соседу - расширение для cache_peer_domain. proxy_auth_realm Squid proxy-caching web server Строка текста, которая будет выдана на экран клиента при запросе имени/пароля доступа к кешу.
http_access allow|deny aclname
icp_access allow|deny aclname
miss_access allow|deny aclname
cache_peer_access cache-host allow|deny aclname
proxy_auth_realm Squid proxy-caching web server
Параметры администрирования cache_mgr email Почтовый адрес, на который будет послано письмо, если squid перестанет функционировать. cache_effective_user nobody При запуске squid от имени root изменить UID на указанный cache_effective_group nogroup Аналогично для GID visible_hostname имя-хоста Это имя будет упоминаться в сообщениях об ошибках) hostname_aliases имя Список синонимов для нашего имени хоста
cache_mgr email
cache_effective_user nobody
cache_effective_group nogroup
visible_hostname имя-хоста
hostname_aliases имя
Отказ от рекламыВставьте эти строки в свой /usr/local/etc/squid/squid.conf:
acl good_url url_regex "/usr/local/etc/squid/acl/good_url" acl bad_urlpath urlpath_regex "/usr/local/etc/squid/acl/bad_urlpath" acl bad_url url_regex "/usr/local/etc/squid/acl/bad_url" http_access deny bad_urlpath !good_url http_access deny bad_url !good_url
Соответственно нужно будет создать три файла: good_url, bad_url_path и bad_url. В bad_url следует поместить <плохие> URL, например:
^http://.*doubleclick ^http://.*-ad.flycast.com/server/img/ ^http://1000.stars.ru/cgi-bin/1000.cgi ^http://1000.stars.ru/cgi-bin/1000.cgi ^http://12.16.1.10/~web_ani/ ...
В bad_url_path - <плохой> путь:
88x31.*gif 88x31.*GIF 100x80.*gif 100x80.*GIF 100x100.*gif 100x100.*GIF 120x60.*gif 120x60.*GIF 179x69.*gif 193x72.*gif 468x60.*gif ...
Обычно такие имена имеют баннеры.