2007/04/20

Clamav + Squid

Данное описание применимо к Debian 4.0 (Etch). Все сервисы, кроме squidclamav, установлены из доступных в репозитарии, пакетов. Перед началом необходимо убедиться в наличии и рабочем состоянии следующих сервисов (пакетов):
  • Squid (2.6.5)
  • Apache (1.3.34)
  • ClamAv (0.90.1)
  • libcurl3-dev (7.15.5)
  • libcurl3 (7.15.5)

Apache и ClamAv не требуют дополнительной настройки после установки через apt-get. Описание "Установка Debian-маршрутизатора с возможностями прозрачного proxy-сервера" содержит подборную установку и настройку Squid.

Связующим звеном между Squid и ClamAv является редиректор squidclamav (написан на С, на момент написания этих строк последней версией была версия 3.0). Существует еще один редиректор squidclamav, но он написан на python и мною не тестировался.

Перед тем, как остановить свой выбор на squidclamav, я рассмотрел еще 3 реализации антивирусной проверки на базе Squid + Clamav:

  • i-cap - так как хотелось использовать Squid из Debian репозитария, пришлось отбросить данный вариант, так как в дебиановской сборке отсутствует поддержка i-cap, и мне не удалось найти i-cap патча для ручной пересборки.
  • squidclam - очень сырой, так и не удалось добиться работоспособности
  • viralator - требует наличия squidGuard, но заставить работать мне его так и не удалось. Запрашиваемые файлы передаются на обработку этому скрипту, но он только показывает popup, а сам ничего не выполняет. Да и popup - для каждого скачиваемого файла - очень неудобно.
Лог действий:

1. Собрать из исходников данный редиректор
tar zxf squidclamav-x.x.tar.gz
cd squidclamav
./configure --prefix=/usr/local/squidclamav
make
make install

2. Отредактировать конфигурационный файл, взяв за основу идущий в дистрибутиве

cp squidclamav.conf.dist /etc/squidclamav.conf

Пример рабочего конфигурационного файла (проверяет все файлы c mime-type application и с расширениями .dll):

logfile /var/log/squid/squidclamav.log
redirect http://192.168.1.254/cgi-bin/clwarn.cgi
debug 0
force 1
stat 1
clamd_local /var/run/clamav/clamd.ctl
timeout 60
abort ^.*\.php$
abort ^.*\.gz$
abort ^.*\.bz2$
abort ^.*\.pdf$
abort ^.*\.js$
abort ^.*\.html$
abort ^.*\.css$
abort ^.*\.xml$
abort ^.*\.xsl$
abort ^.*\.js$
abort ^.*\.ico$
aborti ^.*\.gif$
aborti ^.*\.png$
aborti ^.*\.jpg$
aborti ^.*\.swf$
content ^.*application\/.*$
regexi ^.*\.dll$

3. Добавить описание редиректора в основной конфигурационный файл Squid'a - /etc/squid/squid.conf

redirect_program /usr/local/squidclamav/bin/squidclamav
redirect_children 15

4. Разместить в cgi-bin директории файл clwarn.cgi, на который будет пересылаться запрос в случае обнаружения вируса

cp clwarn.cgi /usr/lib/cgi-bin/clwarn.cgi

5. Перезапустить Squid, проверить в логах Squid'а запустились ли процессы squidclamav-редиректора. Если всё ок, попробовать скачать файл, содержащий вирус. Тестовые вирусы можно найти здесь.

Ссылки:

  1. Squidclamav
  2. eicar THE ANTI-VIRUS OR ANTI-MALWARE TEST FILE

9 comments:

Anonymous said...

при make
main.c:67:23: error: curl/curl.h: No such file or directory
curl стоит, а вот curl.h найти в системе не могу... что делать?

Roman Sozinov said...

to anonymous:
Всё очень просто - у вас не хватает пакета libcurl3-dev.

hipsis said...

Советую еще посмотреть в сторону icap т.к. squidclamav является устаревшим и не развивающимся поектом

Roman Sozinov said...

to hipsis:
Смотрел в сторону icap, но по какой-то причине он его до сих пор нет в репозитарии debian. А хотелось всего выполнить доступными средствами.

alexander said...

если вам не принципиально использование именно squid 2.6.x, то вот решение для squid3
http://www.morahthong.ru/?q=node/26

Roman Sozinov said...

to alexander:
Надо будет попробовать :)
Благодарю за ссылку!

Anonymous said...

А где же можно взять это злополучный файл /var/run/clamav/clamd.ctl ? его в папке нет.

И сам clamd ругаеться в лог, что не может приконнектится к этому файлу. Пробывал ставить на Debian 4.0r2 и Ubuntu server 7.10.

Roman Sozinov said...

to anonymous:
Файл /var/run/clamav/clamd.ctl создается, если запущен демон clamd. Данный файл является unix-socket'ом сервиса clamav-daemon'а.
Если у Вас нет данного файла, это всего лишь значит, что сервис clamd не запущен. А причину, почему он не запущен, нужно уже искать :)

Bobby said...

Anonymous said...

А где же можно взять это злополучный файл /var/run/clamav/clamd.ctl ? его в папке нет.
April 22, 2008 11:40 AM
====
В Debian etch в репозитории баг-версия clamav которая не создаёт сокет-файл.
Мне пришлось удалять и собирать из исходников последнюю версию clamav.