Республика Squid, №2

 | 19.07

Мой Компьютер, №16, 14.04.2008

К первой части

Блокируем баннеры с adzapper

При помощи самого Squid или дополнений можно реализовать несколько вариантов блокировки ресурсов — по IP-адресу, URL или по ключевому слову. Первые два метода, при помощи парочки acl и http_access, достаточно просто реализовать и в самом Squid. Но администратору постоянно придется обновлять вручную список сайтов и адресов. Эту проблему решили взять на себя целый ряд проектов, использующих для этого свой арсенал средств — от белых и черных списков с возможностью их автоматического обновления до фильтрации по ключевым словам. Поиск по freshmeat.net даст ссылки на несколько проектов.

Например, BannerFilter (phroggy.com/bannerfilter) предлагает использование известных URL баннерных сетей и шаблонов, но, к сожалению, последняя версия датирована 2004 годом, поэтому об автоматизации процедуры обновления blacklist, скорее всего, придется забыть. Впрочем, имеющиеся внутри шаблоны вполне реально использовать для блокировки баннеров и всплывающих окон. Аналогично работает ufdbGuard (www.urlfilterdb.com), предлагающий бесплатное обновление баз в течение 60 дней. Есть и другие решения — к сожалению, большинство проектов давно не обновлялось.

Редиректор adzapper (adzapper.sf.net) также использует списки URL, есть возможность их автоматического обновления. И главное, нужный пакет есть в репозитарии Ubuntu. Поэтому его достаточно просто установить и настроить. Приступаем:

$ apt-get install adzapper

Вот, собственно, и все. Пакеты с подобными редиректорами обычно не превышают 100 Кб, поэтому установка проходит быстро. Чтобы подключить его к Squid, достаточно добавить в squid.conf всего одну строку. Правда, в зависимости от версии Squid эта строка будет отличаться. Например, в Squid 2.5, который лежит в репозитарии Ubuntu 6.06, а также в новой 3.0 следует использовать параметр redirect_program:

redirect_program /usr/bin/adzapper.wrapper

В версии Squid 2.6 используется url_rewrite_program:

url_rewrite_program /usr/bin/adzapper.wrapper

Вот и все настройки — впрочем, их вполне достаточно, чтобы после перезапуска Squid (sudo /etc/init.d/squid restart) часть баннеров была заменена надписью This is ad zapped.

Блокируются в том числе всплывающие окна и флэш-анимация. Для ежедневного обновления blacklist (а фактически самого скрипта adzapper) достаточно добавить новое задание crontab:

$ sudo crontab -e

0 0 * * * root /usr/share/doc/adzapper/examples/update-zapper

Работа скрипта обновления проста, c адреса adzapper.sf.net/scrips/squid_redirect скачивается скрипт, который затем копируется на место /usr/bin/adzapper. В самом конце adzapper в области DATA находится список шаблонов URL, которые будут блокированы. Опыт показывает, что обновления его происходят не очень часто.

Конфигурационный файл Adzapper

Конфигурационный файл Adzapper /etc/adzapper.conf имеет небольшое количество настроек. Например, если раскомментировать строку ZAP_MODE=»CLEAR», будет произведена «тихая» блокировка, без вывода указанной выше надписи. При желании можно ее подменить своим вариантом. Адрес, откуда загружаются картинки, указывается в двух переменных:

ZAP_BASE=http://adzapper.sourceforge.net/zaps

ZAP_BASE_SSL=https://adzapper.sourceforge.net/zaps

Ничто не мешает здесь указать адрес своего сервера, разработчики даже рекомендуют такой вариант. Для этого, естественно, необходим рабочий web-сервер, например, Apache. Настройку Apache я показывать не буду, в журнале недавно писали об этом. После установки adzapper в каталоге /usr/share/doc/adzapper/examples/zaps находятся все нужные шаблоны. Теперь достаточно в конфигурационном файле Apache /etc/apache2/apache2.conf указать псевдоним на этот каталог:

Alias /zaps /usr/share/doc/adzapper/examples/zaps/

<Directory /usr/share/doc/adzapper/examples/zaps/>

 Options FollowSymLinks Indexes

 AllowOverride Limit

 Order Allow,Deny

 Allow from all

</Directory>

И заменить, соответственно, значение ZAP_BASE:

ZAP_BASE=http://localhost/zaps

Не забываем перезапустить Apache и Squid. При желании для придания эстетичности можно изменить файлы, находящиеся внутри каталога zaps. Кстати, на сайте Adzapper написано о том, как вместо Squid использовать Apache. Часть рекламы все же прорывается сквозь такой заслон. Чтобы не возиться с acl, можно добавить в эту схему еще и Bfilter (bfilter.sf.net), в котором используется эвристический алгоритм, позволяющий обнаруживать большую часть баннеров и блокировать всплывающие окна. Или squidGuard (www.squidguard.org).

Борьба с вирусами

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

Для этой цели подходят как минимум два проекта. Решение SquidClamAv (sf.net/projects/squidclamav) является редиректором, который, работая в паре с демоном clamd антивируса ClamAV, проверяет выборочно файлы, основываясь на содержимом или контексте.

В репозитарии Ubuntu есть несколько более продвинутый и поэтому несколько более сложный в настройке вариант — HAVP (HTTP Anti Virus Proxy, www.server-side.de). Он уже умеет проверять трафик на лету при помощи нескольких антивирусов (ClamAV, F-Prot, Kaspersky, NOD32, Sophos, AVG, Dr.Web и некоторыми другими). Его можно использовать как в связке со Squid, так и в одиночку, обеспечивая прозрачный прокси с проверкой на вирусы. Более того, поскольку HAVP — именно прокси, а не редиректор, есть возможность при подключении связки Squid+HAVP пользоваться разнообразными схемами: squid+havp, havp+squid, squid+havp+squid. Сюда же можно добавить решения для борьбы с баннерами.

Пакета с SquidClamAv в репозитарии нет, поэтому будем компилировать сами (давно я этого не делал J). Если еще не устанавливали компилятор, самое время это сделать:

$ sudo apt-get install build-essential

Естественно, нам понадобится и демон calmd:

$ sudo apt-get install clamav-daemon

Последний пакет потянет за собой еще несколько, в том числе и clamav-freshclam, который необходим для автоматического обновления антивирусных баз.

Теперь скачиваем с сайта проекта последнюю версию SquidClamAv. Распаковываем и компилируем:

$ tar xzvf squidclamav-3.5.tar.gz

$ cd squidclamav-3.5

$ ./configure –prefix=/usr —sysconfdir=/etc

$ make

$ sudo make install

В архиве содержится шаблон конфигурационного файла, копируем его на место:

$ sudo cp squidclamav.conf.dist /etc/squidclamav.conf

Создаем файл для журнала и делаем его владельцем пользователя proxy (в некоторых дистрибутивах squid работает от имени пользователя squid).

$ sudo touch /var/log/squidclamav.log

$ sudo chown proxy /var/log/squidclamav.log

Дополнительно пользователя proxy в файле /etc/groups нужно добавить в группу clamav, просто дописав:

clamav:x:proxy

Настройка SquidClamAv

SquidClamAv подключается аналогично другим редиректорам. Добавляем в конфигурационный файл squid.conf строку с указанием полного пути к исполняемому файлу. Узнать, куда он установлен можно, введя whereis squidclamav.

Для версий 2.5 и 3.0:

redirect_program /usr/bin/squidclamav

redirect_children 15

Для версии 2.6:

url_rewrite_program /usr/bin/squidclamav

url_rewrite_children 15

И приступаем к редактированию /etc/squidclamav.conf. Сначала общие параметры:

# указываем адрес и порт, на котором работает Squid

proxy http://127.0.0.1:3128/

# файл журнала

logfile /var/log/squidclamav.log

# страница, куда перенаправляется пользователь при обнаружении вируса

redirect http://localhost/cgi-bin/clwarn.cgi

# исполняемый файл squidGuard (если он установлен) и отладочная информация

# squidguard /usr/bin/squidguard

debug 0

force 1

Теперь нужно связать SquidClamAv с демоном clamd. Это можно сделать двумя способами: через локальный сокет или указав IP-адрес и порт, на котором clamd принимает соединения. Узнать эти параметры легко, достаточно посмотреть в файл /etc/clamav/clamd.conf. На сокет указывает переменная LocalSocket. В Ubuntu по умолчанию она выглядит так:

LocalSocket /var/run/clamav/clamd.ctl

Поэтому в squidclamav.conf записываем:

clamd_local /var/run/clamav/clamd.ctl

Теперь нужно указать SquidClamAv, какие, собственно, файлы будем проверять, а какие пропускать без проверки. Для этого используется еще ряд параметров: regex|regexi, abort|aborti, content|contenti или whitelist. Параметры, имеющие букву i в имени, игнорируют регистр. Самый простой whitelist — все, что будет приходить с указанного адреса, проверятся не будет:

whitelist www.mycomputer.ua

Параметр content предписывает проверку файлов, основанную на типе (тип можно узнать из логов Squid). Например, для проверки всех приложений пишем такое правило:

content ^.*application/.*$

Параметр abort позволяет исключить из проверки антвирусом файлы, подпадающие под шаблон:

abort ^.*.pdf$

aborti ^.*.png$

aborti ^.*.mp3$

И наконец, что проверять, указываем при помощи regex:

regexi ^.*.exe$

regexi ^.*.com$

regexi ^.*.zip$

И так далее. Запускаем демон clamd:

$ sudo /etc/init.d/clamav-demon start

И перезапускаем Squid:

$ sudo /etc/init.d/squid restart

Для проверки работоспособности настраиваем web-браузер на работу через Squid, заходим на страницу www.eicar.org/anti_virus_test_file.htm и пробуем скачать тестовый вирус (он не опасен). Если файл заблокируется, можно идти дальше.

Добавляем в crontab строчку для автоматического обновления антивирусных баз:

0 * * * * /usr/bin/freshclam –quiet

Чтобы пользователь перенаправлялся на страницу с пояснением, нужно иметь под рукой рабочий web-сервер. Если есть настроенный web-сервер, достаточно скопировать файл clwarn.cgi в каталог cgi-bin (в Ubuntu /usr/lib/cgi-bin). Этот шаблон также можно изменить по своему вкусу, хотя бы просто локализовать.

Это далеко не все дополнения, расширяющие возможности Squid. Особое внимание хочу обратить на squidGuard и DansGuardian (http://dansguardian.org). Окончательный выбор предстоит сделать вам.

Linux forever!

Сергей «grinder» ЯРЕМЧУК

Robo User
Web-droid editor

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *