Прозрачный прокси со статистикой (squid+pf+sarg) во FreeBSD

Автор: Dark

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

http://www.ounix.ru/index.php?page=article&id=14

Обновлено: 12.03.2015