Unix-way → Как фильтровать нежелательные сайты с помощью проси-сервера Squid на Linux

В статье описано как защитить домашнюю или корпоративную сеть от нежелательного интернет контента. Наша цель заключается в установке и настройке прокси-сервера Squid на Linux и развертывания системы фильтрации.

Пример сети



Настройка Linux CentOS

В статье используется дистрибутив CentOS, однако это же актуально для других, конечно с правками на них. Саму установку дистрибутива затрагивать не будем, тут должно быть все понятно. Только что установленный дистрибутив, скорее всего не будет подключен к сети, выполняем следующее — назначаем статический IP-адрес 192.168.1.2 с маской 255.255.255.0 изменив /etc/sysconfig/network-scripts/ifcfg-eth0:

BOOTPROTO=static
NETMASK=255.255.255.0
IPADDR=192.168.1.2
ONBOOT=yes


Настроим шлюз в /etc/sysconfig/network:

GATEWAY=192.168.1.1


Настроим DNS в /etc/resolv.conf, добавив IP-адрес DNS сервера, который уже работает на маршрутизаторе (роутере):

nameserver 192.168.1.1


Перезагрузим network:

/etc/init.d/network restart


Проверяем сеть:

ping -c 3 192.168.1.1
nslookup google.ru


Прежде чем продолжить желательно обновить только что установленную систему:

yum update


Установка прокси-сервера Squid

yum install squid


chkconfig squid on


Перезагрузите или запустите сервер:

service squid start

service squid restart


Разрешаем пользователям доступ к сети. Открываем /etc/squid/squid.conf и добавим:

visible_hostname proxy


Также убедитесь что в конфиге есть http_access allow localnet и acl localnet src 192.168.0.0/16.

Перезагружаем Squid:

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 включает в себя три политики фильтрации — жесткая (максимальный уровень фильтрации), средняя (блокирует только чрезмерную рекламу), легкая (подходит для нормального просмотра сайтов без «Порно»).

Скачиваем:

curl http://quintolabs.com/qlproxy/binaries/2.0.0/qlproxy-2.0.0-bb01d.i386.rpm>qlproxy-2.0.0-bb01d.i386.rpm


Устанавливаем:

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:

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:

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-адресов, а не доменов, можно сделать регулярное выражение:

url = http://\d+\.\d+\.\d+\.\d+/.*


После изменений перезагружаем qlproxy:

/etc/init.d/qlproxy restart


Установка веб-интерфейса для Content Security на Apache

У QuintoLabs Content Security есть небольшой веб-интерфейс, который позволяет смотреть текущую конфигурацию, просматривать отчеты и логи. Написан с использованием Django Python Framework. Для Apache нужен модуль mod_wsgi.

Устанавливаем Apache:

yum install httpd


Делаем автозапуск:

chkconfig httpd on


Запускаем или перезагружаем Apache:

service httpd start

service httpd restart


Затем установим нужные модули:

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 добавляем:

<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 добавляем:

WSGISocketPrefix /var/run/wsgi


Примечание: если на http://localhost увидите ошибку «Доступ запрещен». Проверьте SELinux.

После перезагрузки Apache. Доступ к нтерфейсу можно получить по адресу http://192.168.1.2/qlproxy.
  • avatar
  • pashtuun
  • 5453
  • +17
  • 13 апреля 2012, 15:37

Комментариум (0)

RSS свернуть / развернуть

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