Используется в UNIX-like системах и в ОС семейства Windows NT. Имеет возможность взаимодействия с Active Directory Windows Server путём аутентификации через LDAP, что позволяет использовать разграничения доступа к интернет ресурсам пользователей, которые имеют учётные записи на Windows Server, также позволяет организовать «нарезку» интернет трафика для различных пользователей.
Итак начнём!
Все манипуляции проводились на:
FreeBSD xx.xxx.ru 8.0-RELEASE-p3 FreeBSD 8.0-RELEASE-p3 #1: Mon Jul 12 07:16:57 UTC 2010 root@xx.xxx.ru:/usr/obj/usr/src/sys/GENERIC i386
Установка и настройка squid:
# cd /usr/ports/www/squid31
# make config
В разделе опций я выбрал:
[X] SQUID_DELAY_POOLS Enable delay pools - Добавляет возможность ограничения скорости.
[X] SQUID_PF Enable transparent proxying with PF - Добавляет возможность использовать прозрачный прокси с фаерволом PF. Если вы используйте IPFW то вам достаточно изменить эту опцию на [X] SQUID_IPFW
Далее делаем
# make install clean
по окончании установки начинаем конфигурировать наш прокси.
Конфиг находится по адресу /usr/local/etc/squid/squid.conf
В версии squid`a 3.1 конфигурационный файл достаточно скуден, поэтому мы будем дописывать в него необходимое.
Ниже приведен мой конфиг:
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl wifi_net src 192.168.9.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 wifi_net
http_access allow localhost
http_access deny all
http_port 127.0.0.1:3128 transparent
hierarchy_stoplist cgi-bin ?
coredump_dir /usr/local/squid/cache
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 your_hostname
via off
forwarded_for off
cache_mem 256 MB
maximum_object_size_in_memory 512 KB
cache_dir ufs /usr/local/squid/cache 2048 256 512
cache_mgr your_contacts
Каждый параметр расписывать не буду. Укажу только ключевые!
http_port 127.0.0.1:3128 transparent -Указывается интерфейс и порт на котором будет сидеть squid и принимать запросы. Слово transparent говорит нам о том что прокси прозрачный.
acl wifi_net src 192.168.9.0/24 - Тут я указал acl моей локальной сети. Вы можете обозвать свою как угодно, я назвал wifi_net, так как у меня сеть беспроводная
http_access allow wifi_net - Разрешаю доступ машинам моей подсети к прокси-серверу. Дописывать данный параметр нужно обязательно перед http_access deny all.
После манипуляций с конфигом создаем своп директории командой
# squid -z
Если все выполнилось без ошибок то идем дальше!
В /etc/rc.conf дописываем строку
squid_enable="YES"
И пробуем запустить
# /usr/local/etc/rc.d/squid start
Если ошибок нет, проверяем
# ps ax | grep squid
Должен быть вывод вроде этого:
59469 ?? Is 0:00.00 /usr/local/sbin/squid
59471 ?? S 0:09.18 (squid) (squid)
Проверим порт:
#sockstat | grep 3128
Должны получить:
squid squid 59471 14 tcp4 127.0.0.1:3128 *:*
На этом конфигурирование squid`a закончено. Вы можете ознакомиться с документацией на официальном сайте http://www.squid-cache.org/ для дополнительного конфигурирования прокси.
Теперь нам нужно завернуть весь HTTP трафик с пользователей на наш проксик.
Я использую в качестве фаервола PF. Конфигурационный файл находится по адресу /etc/pf.conf. В него перед секцией NAT добавляем:
rdr on $wlan_if inet proto tcp from $wlan_net to any port www -> $proxy_if $proxy_port
где $wlan_if, $wlan_net, $proxy_if, $proxy port мои переменные интерфейсов и сетей, вам соответственно нужно подставить свои, если конечно они у вас определены!
Обновляем правила фаервола
# pfctl -f /etc/pf.conf
Если вы все сделали правильно то в /usr/local/squid/logs/access.log должны писаться сообщения о том кто куда ходит!
Статья написана грубо и примитивно, не вдаваясь в подробности. В дальнейшем напишу о том как настроить delay pools для ограничения трафика, как запретить пользователя лазить где попало и расскажу про различные веб-морды для просмотра статистики посещений!