В сочетании с некоторыми межсетевыми экранами и маршрутизаторами squid может работать в режиме прозрачного прокси (англ. transparent proxy). В этом режиме маршрутизатор вместо того, чтобы сразу пересылать http-запросы пользователя http-серверу в Интернете, перенаправляет их прокси-серверу, который может работать как на отдельном хосте, так и на самом маршрутизаторе. Прокси-сервер обрабатывает запрос (с возможной отдачей содержимого из кеша), это содержимое направляется к запросившему пользователю, для которого оно выглядит как «ответ» сервера, к которому адресовался запрос. Таким образом, пользователь может даже не знать, что все запросы и ответы прошли через прокси-сервер.
Создадим простейшую конфигурацию:
aptitude install squid sarg mv /etc/squid/squid.conf /etc/squid/squid.conf.old # конфиг приложен cp squid.conf /etc/squid/squid.conf nano /etc/squid/squid.conf http_port REPLACEHOST:3128 transparent # REPLACEHOST надо заменить на ip-адрес интерфейса смотрящего в локалку hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin \? cache deny QUERY acl apache rep_header Server ^Apache broken_vary_encoding allow apache access_log /var/log/squid/access.log squid hosts_file /etc/hosts 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 563 # https, snews acl SSL_ports port 873 # rsync acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 563 # https, snews 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 Safe_ports port 631 # cups acl Safe_ports port 873 # rsync acl Safe_ports port 901 # SWAT acl purge method PURGE acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access allow purge localhost http_access deny purge http_access deny !Safe_ports http_access deny CONNECT !SSL_ports acl blocks url_regex "/etc/squid/block.acl" # тут мы блокируем нежелательные ресурсы (точку надо экранировать \.) acl our_networks src REPLACENET # REPLACENET заменяется на адрес локальной сети вида: 192.168.0.0/24 ### whitelist #acl whitelist url_regex "/etc/squid/whitelist" #http_access allow our_networks whitelist #http_access deny all ### http_access allow our_networks !blocks http_access allow localhost http_access deny all http_reply_access allow all icp_access allow all always_direct allow all forwarded_for off visible_hostname unknown cache_mgr webmaster@localhost coredump_dir /var/spool/squid error_directory /usr/share/squid/errors/Russian-1251
В этом файле необходимо поменять всего 2 переменные REPLACEHOST и REPLACENET. В остальном это практически стандартный конфиг. Например если интерфейс локальной сети выглядит так:
ip a l ath0 5: ath0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc noqueue link/ether 00:17:9a:c0:44:b1 brd ff:ff:ff:ff:ff:ff inet 192.168.2.1/29 brd 192.168.2.7 scope global ath0
то REPLACEHOST надо заменить на 192.168.2.1, а REPLACENET надо заменить на 192.168.2.0/29.
Эта строка: http_port 192.168.2.1:3128 transparent, означает что запросы на прокси-сервер буду приниматься только на ip-адрес 192.168.2.1 и порт 3128, причем в режиме "прозрачности".
В файле /etc/squid/block.acl лежат адреса заблокированных ресурсов, например:
cat /etc/squid/block.acl img-fotki\.yandex\.ru odnoklassniki\.ru vkontakte\.ru fotki\.yandex\.ru avatars\.yandex\.net count\.rbc\.ru ad\.adriver\.ru pics\.rbc\.ru\/img\/autonews pics\.rbc\.ru\/img\/cnews pics\.rbc\.ru\/*.js irr\.ru macromedia\.com sb\.google\.com
поскольку в регулярных выражениях точка означает любой символ, во избежание ложных срабатываний мы ее экранируем.
Теперь как эту самую "прозрачность" включить. Здесь все зависит от используемого интерфейса к netfilter.
В статьях Shorewall на роутере и Быстрая настройка NAT эти случай рассмотрены. Рассмотрим для нашего примера:
# разрешаем запросы из локалки к прокси-серверу
iptables -A INPUT -s 192.168.2.0/29 -d 192.168.2.1 -p tcp --destination-port 3128 -j ACCEPT # запросы на 80 порт к данной машине пропускаем iptables -t nat -A PREROUTING -s 192.168.2.0/29 -d 192.168.2.1 -p tcp --destination-port 80 -j ACCEPT # остальные запросы на 80 порт заворачиваем на прокси-сервер iptables -t nat -A PREROUTING -s 192.168.2.0/29 -p tcp --destination-port 80 -j REDIRECT --to-port 3128 # перезапускаем прокси /etc/init.d/squid restart
Осталось рассмотреть генерирование отчетов с помощью sarg, но это в следующей статье...
не вижу в конфиге
/var/cache/squid/
как быть?