Мар 24 2009

Настройка прокси сервера Squid

Прокси сервер Squid самый распространенный в Unix среде. Поэтому, под него существуют полезные надстройки, позволяющие фильтровать трафик по различным признакам, в том числе и осуществлять антивирусную проверку. Сделаем типичную настройку для офисной сети. Начнем естественно с установки Squid:

cd /usr/ports/www/squid
make install clean


Перед сборкой появляется небольшой диалог настройки.
Как я уже говорил Squid очень продвинутый прокси сервер, поэтому и настроек у него очень много. Для базовой настройки, большая часть этих наворотов не требуется, поэтому в диалоговом окне отмечены самые популярные, влияющие на скорость работы и стабильность настройки.

┌────────────────────────────────────────────────────────────────────┐
│                     Options for squid 2.7.6                        │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │[ ] SQUID_LDAP_AUTH      Install LDAP authentication helpers    │ │
│ │[ ] SQUID_SASL_AUTH      Install SASL authentication helpers    │ │
│ │[ ] SQUID_DELAY_POOLS    Enable delay pools                     │ │
│ │[ ] SQUID_SNMP           Enable SNMP support                    │ │
│ │[ ] SQUID_CARP           Enable CARP support                    │ │
│ │[ ] SQUID_SSL            Enable SSL support for reverse proxies │ │
│ │[ ] SQUID_PINGER         Install the icmp helper                │ │
│ │[ ] SQUID_DNS_HELPER     Use the old 'dnsserver' helper         │ │
│ │[ ] SQUID_HTCP           Enable HTCP support                    │ │
│ │[ ] SQUID_VIA_DB         Enable forward/via database            │ │
│ │[ ] SQUID_CACHE_DIGESTS  Enable cache digests                   │ │
│ │[ ] SQUID_WCCP           Enable Web Cache Coordination Prot. v1 │ │
│ │[ ] SQUID_WCCPV2         Enable Web Cache Coordination Prot. v2 │ │
│ │[ ] SQUID_STRICT_HTTP    Be strictly HTTP compliant             │ │
│ │[X] SQUID_IDENT          Enable ident (RFC 931) lookups         │ │
│ │[ ] SQUID_REFERER_LOG    Enable Referer-header logging          │ │
│ │[ ] SQUID_USERAGENT_LOG  Enable User-Agent-header logging       │ │
│ │[ ] SQUID_ARP_ACL        Enable ACLs based on ethernet address  │ │
│ │[ ] SQUID_PF             Enable transparent proxying with PF    │ │
│ │[ ] SQUID_IPFILTER       Enable transp. proxying with IPFilter  │ │
│ │[ ] SQUID_FOLLOW_XFF     Follow X-Forwarded-For headers         │ │
│ │[ ] SQUID_AUFS           Enable the aufs storage scheme         │ │
│ │[ ] SQUID_COSS           Enable the COSS storage scheme         │ │
│ │[X] SQUID_KQUEUE         Use kqueue(2) instead of poll(2)       │ │
│ │[ ] SQUID_LARGEFILE      Support log and cache files >2GB       │ │
│ │[ ] SQUID_STACKTRACES    Create backtraces on fatal errors      │ │
├─└────.(+)────────────────────────────────────────────────────────┘─┤
│                       [  OK  ]       Cancel                        │
└────────────────────────────────────────────────────────────────────┘

Из интересных тут настроек это SQUID_KQUEUE — возможность использовать kqueue вместь poll. Squid создан по архитектуре «Конечный автомат», то есть когда процесс создает очередь сокетов обслуживающих клиентов и обслуживает их по очереди. А использование kqueue, сокращает затраты на обход пула сокетов.

Следующая интересная нам опция SQUID_LARGEFILE — позволяет хранить в кеше прокси сервера файлы размером более 2 гигабайт. Отмечать ее не будем, просто она интересная.

SQUID_DELAY_POOLS — эта опция дает возможность регулировать скорость передачи данных от прокси сервера к клиенту. Этакий шейпер на базе прокси сервера. Для оффиса, одна из самых нужных настроек. Сейчас на них останавливаться не будем, лони заслуживают отдельной статьи.

Теперь можно начинать настраивать Squid, конфигурационный файл получается такой:

#Определяем имена acl в зависимости от адресов
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
#Наша локальная сеть
acl localnet src 192.168.0.0/24
#Перечисляем порты, которые смогу проходить через прокси 
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT
#Определяем доступы в зависимости от адресов
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
#Разрешаем локальной сети ходить в интернет
http_access allow localnet
http_access deny all
icp_access allow localnet
icp_access deny all
http_port 3128
hierarchy_stoplist cgi-bin ?
#Выделяем память под кешируемые объекты
cache_mem 128 MB
#Максимальный размер файла в памяти
maximum_object_size_in_memory 64 KB
memory_replacement_policy lru
cache_replacement_policy lru
#Определяем кеш на диске
#Первая цифра размер директории кеша, две следующие это 
# число директорий 1-го уровня и в них количество, 
# определенное третьей цифрой, директорий 
# непосредственно для файлов кеша
cache_dir ufs /usr/local/squid/cache  100 16 256
store_dir_select_algorithm least-load
#Максимальный размер закешированного файла
maximum_object_size  8 MB
cache_swap_low 90
cache_swap_high 95
logformat squid %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt
#Местонахождение лог файлов, не забудьте создать директории
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
pid_filename /var/run/squid.pid
strip_query_terms off
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320
#Если имя сервера не резолвится - можно указать его явно
visible_hostname office.hilik.org.ua
#Сообщения о ошибках будем отображать на русском
error_directory /usr/local/etc/squid/errors/Russian-1251
check_hostnames on
coredump_dir /usr/local/squid/cache

Сама настройка закончена, теперь приступим к запуску Squid, первым делом создадим иерархию директорий кеша. Для этого нужно запустить Squid с ключиком -z:

squid -z

Далее, устанавливаем разрешение на запуск Squid в /etc/rc.conf:

echo "squid_enable=YES" >> /etc/rc.conf

и запустим его:

/usr/local/etc/rc.d/squid start

Теперь остается пройти по сети и установить всем адрес прокси сервера. Или же настроить прозрачный прокси(Transparent (прозрачный) прокси сервер Squid). Базовая настройка на этом закончена.

Добавить в закладки:

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Украинская Баннерная Сеть