Проверенная комбинация. Делал на FreeBSD 10.0 (i386).
Обновляем порты. Собираем squid3.
# cd /usr/ports/www/squid # make config
Выбираем, чтобы было так
Жмем ОК и собираем
# make BATCH=yes install clean
Привел конфиг “сквиды” /usr/local/etc/squid/squid.conf до следующего состояния
acl localnet src 192.168.0.0/24 # RFC1918 possible internal network acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 110 # pop acl Safe_ports port 25 # smtp 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 deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost manager http_access deny manager http_access allow localnet http_access allow localhost http_access deny all http_port 3128 transparent http_port 8080 coredump_dir /var/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 gw0
Squid готов. Добавим его запуск при старте системы.
# echo 'squid_enable="YES"' >> /etc/rc.conf
И запускаем
# service squid start
Осталось “завернуть” весь http трафик на “сквиду”. Добавим в конфиг pf следующую строку:
# rdr on $lan_if proto { tcp } from 192.168.0.0/24 to any port 80 -> 127.0.0.1 port 3128
где lan_if – наш интерфейс, который смотрит в локальную сеть.
Перезагружаем pf
# service pf reload
И, если все сделано правильно, наш шлюз прогоняет весь http через squid. Можно убедиться в этом посмотрев на лог доступа:
# tail -f /var/log/squid/access.log
Если в cache.log видим постоянно такое:
IpIntercept.cc(316) PfInterception: PF open failed: (13) Permission denied
Добавить в /etc/devfs.conf
# Allow Squid read acess to /dev/pf own pf root:squid perm pf 0640
и выполнить
/etc/rc.d/devfs restart