Squid 2.6 + pf + sarg


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

Прокси работает на другом порту (чаще всего на 3128) и перенаправляет запросы на порт 80 удаленных серверов. Это его и отличает от NAT-а - он не подменяет ip-адрес, а как бы пробрасывает запрос с одного порта на другой и кеширует. Мутно немного получается:)
Любой виндовый админ сделает следующим образом, установит proxy (уж не знаю как оно у MS называется) и заставит всех пользователей через AD настроить Internet Explorer на работу с прокси. Но это не наш метод. Мы сделаем заворот на squid с помощью фаервола pf.
Итак, предполагается что pf у нас уже есть. Остальное - устанавливаем:

root@localhost# pkg_add -vr squid
root@localhost# pkg_add -vr sarg

Установка из пакетов практически не отнимает время. Для любителей устанавливать из портов идем в директории /usr/ports/www/squid26 и /usr/ports/www/sarg и делаем там make install. В моем случае установился:

root@localhost# pkg_info | grep squid
squid-2.6.13 HTTP Caching Proxy

Сразу прописываем в /etc/rc.conf: squid_enable="YES".
Squid - очень мощный прокси сервер, но для запуска в наших примитивных условиях достаточно будет такого конфига (/usr/local/etc/squid/squid.conf):

http_port 127.0.0.1:3128 transparent #Обращаю внимание, что эта строка работает
#только в squid 2.6.
hierarchy_stoplist cgi-bin ?

error_directory /usr/local/etc/squid/errors/Russian-1251

acl QUERY urlpath_regex cgi-bin ?
cache deny QUERY

acl apache rep_header Server ^Apache
broken_vary_encoding allow apache

cache_dir ufs /ftp/squid/cache 100 16 256

logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %h" "%{User-Agent}>h" %Ss:%Sh

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/logs/squid.pid

refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320


acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

acl our_networks src 192.168.0.0/24
http_access allow our_networks

http_access deny all

http_reply_access allow all

icp_access allow all

По сути, эти правила почти ничем не отличаются от установленных по умолчанию. Так что настроить squid - дело 5 минут. Далее запускаем:
root@localhost# /usr/local/etc/rc.d/squid.sh start
root@localhost# ps uax | grep squid
squid 624 1.0 7.4 30152 6592 ?? S 13Sep07 18:14.44 (squid) -D (squid)
squid 612 0.0 0.0 3252 0 ?? IWs - 0:00.00 /usr/local/sbin/squid -D

Запустился. В настройках любого браузера указываем наш новоиспеченный прокси на порту 3128 и пробуем выйти в интернет. Если не получилось - смотрим логи, маны и думаем. Если прокси выпускает нас в интернет, то самое время завернуть весь http-трафик, проходящий через NAT на прокси. Для pf (конфиг в "/etc/pf.conf") это делается такой строкой:
rdr on $int_if proto tcp from $internal_net to any port 80 -> 127.0.0.1 port 3128

После перезапуска правил фаервола ("pfctl -f /etc/pf.conf") весь веб-трафик будет пропускаться через squid. Весь, кроме https, что, вообще-то, не очень страшно. Теперь можно перейти к настройке sarg. Конфиг располагается в /usr/local/etc/sarg:
language Russian_windows1251
access_log /var/log/squid/access.log
temporary_dir /tmp
output_dir /www/traf.myserver.ru #директория сайта статистики
overwrite_report yes #Перезаписываем результаты после обработки
usertab /usr/local/etc/sarg/usertab.txt #Файл таблицы пользователей
charset Windows-1251

Ну для удобства можно и подредактировать файл /usr/local/etc/sarg/usertab.txt
192.168.0.2 Директор
192.168.0.3 Бухгалтер
192.168.0.4 Секретарша
192.168.0.5 Механик
192.168.0.6 Тракторист
192.168.0.7 Доярка

После этого страница статистики будет выглядеть заметно приятнее.
Кстати, между ip и именем должен быть пробел, а не TAB.
Остается только поставить в расписание обработчика логов, тут уж кому как, можно поставить каждые 15 минут, а можно и раз в сутки, чтобы не мучать сервер ("/etc/crontab").

*/15 * * * * root /usr/local/bin/sarg #обновление статистики каждые 15 минут
0 0 * * * root /usr/local/bin/sarg # или эта строка - обновление статистики каждые сутки

Ну и напоследок, чтобы не накапливать уже обработанные логи сквида можно раз в сутки обнулять примерно таким скриптом:
#!/bin/sh
#squid_clean.sh
cat /dev/null > /var/log/squid/access.log
cat /dev/null > /var/log/squid/cache.log
cat /dev/null > /var/log/squid/store.log

Чуть позже рассмотрим как блокировать неугодные нам направления...

Последнее изменение: четверг, 10 января 2008 г. 14:09:37

Автор: Dark

Обновлено: 13.03.2015