Как фильтровать нежелательные сайты с помощью прокси-сервера Squid на Linux В статье описано как защитить домашнюю или корпоративную сеть от нежелательного интернет контента. Наша цель заключается в установке и настройке прокси-сервера Squid на Linux и развертывания системы фильтрации. Пример сети Настройка Linux CentOS В статье используется дистрибутив CentOS, однако это же актуально для других, конечно с правками на них. Саму установку дистрибутива затрагивать не будем, тут должно быть все понятно. Только что установленный дистрибутив, скорее всего не будет подключен к сети, выполняем следующее — назначаем статический IP-адрес 192.168.1.2 с маской 255.255.255.0 изменив /etc/sysconfig/network-scripts/ifcfg-eth0: Code: BOOTPROTO=static NETMASK=255.255.255.0 IPADDR=192.168.1.2 ONBOOT=yes Настроим шлюз в /etc/sysconfig/network: Code: GATEWAY=192.168.1.1 Настроим DNS в /etc/resolv.conf, добавив IP-адрес DNS сервера, который уже работает на маршрутизаторе (роутере): Code: nameserver 192.168.1.1 Перезагрузим network: Code: /etc/init.d/network restart Проверяем сеть: Code: ping -c 3 192.168.1.1 nslookup google.ru Прежде чем продолжить желательно обновить только что установленную систему: Code: yum update Установка прокси-сервера Squid Code: yum install squid Code: chkconfig squid on Перезагрузите или запустите сервер: Code: service squid start Code: service squid restart Разрешаем пользователям доступ к сети. Открываем /etc/squid/squid.conf и добавим: Code: visible_hostname proxy Также убедитесь что в конфиге есть http_access allow localnet и acl localnet src 192.168.0.0/16. Перезагружаем Squid: Code: service squid restart Проверим работу Squid набрав в браузере клиентов IP-адрес прокси-сервера (192.168.1.2). Примечание: может потребоваться настройка фаерволла, чтобы пользователи могли подключаются к 3128 порту. Для этого можно использовать команды system-config-firewall-tui или iptables. Также не помешает разрешать доступ к 80-ому порту, так как будем использовать его для управления через веб-интерфейс. Установка QuintoLabs Content Security Следующим шагом будем устанавливать QuintoLabs (далее qlproxy). Для тех, кто не знает что такое QuintoLabs Content Security — это демон ICAP/URL, который интегрируется в прокси-сервер Squid и предоставляет широкий набор функций для фильтрации контента с перебором веб-трафика. Может быть использован для блокировки потенциально опасных файлов, удалять рекламные объявления, запрещать доступ к различным сайтам и категориям сайтов. В статье будет устанавливать qlproxy 2.0, релиз которого состоялся ни так давно. По дефолту qlproxy включает в себя три политики фильтрации — жесткая (максимальный уровень фильтрации), средняя (блокирует только чрезмерную рекламу), легкая (подходит для нормального просмотра сайтов без «Порно»). Скачиваем: Code: curl http://quintolabs.com/qlproxy/binaries/2.0.0/qlproxy-2.0.0-bb01d.i386.rpm>qlproxy-2.0.0-bb01d.i386.rpm Устанавливаем: Code: yum localinstall qlproxy-2.0.0-bb01d.i386.rpm Установлено будет в /opt/quintolabs/qlproxy (бинарник), /var/opt/quintolabs/qlproxy (логи и базы) и /etc/opt/quintolabs/qlproxy (конфиги). ПРИМЕЧАНИЕ: не забываем про SELinux, или делаем правила, или отключаем его. Интеграция Squid и QuintoLabs Content Security QuintoLabs Content Security может быть интегрирован в Squid двумя различными способами — как ICAP сервер, и как URL rewriter. Рекомендуется использовать ICAP, поскольку это дает доступ ко всему HTTP трафику, который проходит через Squid. Файл README (/etc/opt/quintolabs/qlproxy) содержит подробные инструкции о том, как выполнить интеграцию на различных платформах (Debian, Ubuntu, RedHat и даже Windows). Для CentOS нужно добавить строки в /etc/squid/squid.conf: Code: icap_enable on icap_preview_enable on icap_preview_size 4096 icap_persistent_connections on icap_send_client_ip on icap_send_client_username on icap_service qlproxy1 reqmod_precache bypass=0 icap://127.0.0.1:1344/reqmod icap_service qlproxy2 respmod_precache bypass=0 icap://127.0.0.1:1344/respmod adaptation_access qlproxy1 allow all adaptation_access qlproxy2 allow all Обязательно после изменений перезагрузить Squid: Code: service squid restart Теперь проверим работу зайдя на различные сайты. Реклама должна блокируются, а также полезно зайти на eicar.com попробовать скачать «вирус». По дефолту Content Security вполне пригоден для использования. Чтобы настроить «под себя» делаем некоторые изменения в конфигах /etc/opt/quintolabs/qlproxy/policies (пути относительные): — strict/members.conf: IP-адреса или логины пользователей для жесткой фильтрации. — relaxed/members.conf: IP-адреса или логины пользователей для средней фильтрации. — blocks_ads.conf: AdBlock для блокировки английских, немецких и русских баннеров. — block_adult_sites.conf: Блокировка «Взрослого контента». Может блокировать нормальные сайты, однако всегда есть возможность добавить нужный сайт в список исключений. — strict/block_sites_by_name.conf: Блокирует сайты по IP. Черви, трояны и другие вредоносные программы часто подключаются с IP-адресов, а не доменов, можно сделать регулярное выражение: Code: url = http://\d+\.\d+\.\d+\.\d+/.* После изменений перезагружаем qlproxy: Code: /etc/init.d/qlproxy restart Установка веб-интерфейса для Content Security на Apache У QuintoLabs Content Security есть небольшой веб-интерфейс, который позволяет смотреть текущую конфигурацию, просматривать отчеты и логи. Написан с использованием Django Python Framework. Для Apache нужен модуль mod_wsgi. Устанавливаем Apache: Code: yum install httpd Делаем автозапуск: Code: chkconfig httpd on Запускаем или перезагружаем Apache: Code: service httpd start Code: service httpd restart Затем установим нужные модули: Code: yum install mod_wsgi python-setuptools easy_install virtualenv cd /var/opt/quintolabs/qlproxy/www virtualenv --no-site-packages qlproxy_django ./qlproxy_django/bin/easy_install django==1.3.1 В /etc/httpd/httpd.conf добавляем: Code: <VirtualHost *:80> ServerName proxy.lan ServerAdmin webmaster@proxy.lan LogLevel info ErrorLog /var/log/httpd/proxy.lan-error.log CustomLog /var/log/httpd/proxy.lan-access.log combined # aliases to static files (must come before the mod_wsgi settings) Alias /static/ /var/opt/quintolabs/qlproxy/www/qlproxy/static/ Alias /redirect/ /var/opt/quintolabs/qlproxy/www/qlproxy/redirect/ # mod_wsgi settings WSGIDaemonProcess proxy.lan display-name=%{GROUP} WSGIProcessGroup proxy.lan WSGIScriptAlias / /var/opt/quintolabs/qlproxy/www/qlproxy/qlproxy.wsgi <Directory /var/opt/quintolabs/qlproxy/www/qlproxy> Order deny,allow Allow from all </Directory> </VirtualHost> Чтобы mod_wsgi работал в фоновом режиме, в /etc/httpd/conf.d/wsgi.conf добавляем: Code: WSGISocketPrefix /var/run/wsgi Примечание: если на http://localhost увидите ошибку «Доступ запрещен». Проверьте SELinux. После перезагрузки Apache. Доступ к нтерфейсу можно получить по адресу http://192.168.1.2/qlproxy. 13 апреля 2012 http://itbuben.org/blog/Unix-way/2555.html http://itbuben.org/