havp: лёгкий прокси-сервер со встроенным антивирусом

()

Для проверки входящего http-трафика антивирусом можно использовать squid с дополнительными внешними приложениями, однако такой метод достаточно медленный и более требователен к ресурсам, чем если бы прокси-сервер проверял трафик на вирусы сам. Примером такого прокси-сервера является havp, который есть в репозиториях большинства дистрибутивов, в том числе Gentoo и Ubuntu.

Автор этой заметки имеет дома небольшой сервер, работающий под управлением Ubuntu Linux 7.10, на котором работает связка squid+bfilter, сделанная примерно так, как написано здесь. В связи с появлением в локальной сети машины под управлением Windows возникла необходимость проверять http-трафик на вирусы. Для этого было решено добавить ещё один каскад прокси - havp. Далее описывается процесс добавления каскада havp к имеющейся связке.

Итак. Поскольку по умолчанию bfilter и havp работают на порту 8080, и apt-get при установке пытается запустить сервис havp, то во избежание проблем временно остановим bfilter:

/etc/init.d/bfilter stop

Далее установим havp и freshclam, который понадобится чтобы регулярно обновлять антивирусные базы:

apt-get install havp clamav-freshclam

После установки приступаем к настройке havp. Для этого открываем в редакторе файл /etc/havp/havp.config. Первым делом изменим порт, на котором слушает havp:

# PORT 8080
PORT 3129

Далее настроим прокси так, чтобы он принимал соединения только с локального хоста:

BIND_ADDRESS 127.0.0.1

Поскольку мы говорим на русском языке, информационные сообщения нам тоже удобнее читать на русском языке, потому немного изменим путь к шаблонам информационных страниц:

# TEMPLATEPATH /etc/havp/templates/en
TEMPLATEPATH /etc/havp/templates/ru

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

# FAILSCANERROR true
FAILSCANERROR false

Кроме того есть два интересных файла: /etc/havp/blacklist и /etc/havp/whitelist. В первом перечисляются шаблоны адресов, заведомо запрещённых для загрузки, а во втором - шаблоны адресов, для которых проверка не нужна (Добавлять туда адреса нужно очень осторожно, мало ли что случится с вашим DNS-сервером!).

На этом настройка заканчивается. Перезапускаем havp:

/etc/init.d/havp restart

Теперь остаётся только немного донастроить bfilter. Все новые настройки будут сделаны в секции [forwarding] файла /etc/bfilter/config. В Ubuntu эта секция по умолчанию отсутствует поэтому её надо будет просто добавить. В других дистрибутивах (например Gentoo или Mandriva) - править имеющиеся параметры. В любом случае эта секция должна выглядеть примерно вот так:

[forwarding]
use_proxy = yes
proxy_type = http
proxy_host = 127.0.0.1
proxy_port = 3129

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

Запускаем bfilter:

/etc/init.d/bfilter start

Следует так же отметить что хотя по умолчанию havp и использует в качестве сканера встроенные функции, использующие библиотеку libclamav, однако он может использовать и внешние антивирусные сканеры. Такие как NOD32, Avast, F-Prot и другие.

Ссылки по теме:

Ключевые слова: havp, squid, bfilter, clamav.

Подписаться на обновления: RSS-лента Канал в TamTam Telegram канал Канал в ICQ

Комментарии:

Alex 2008-01-09 02:26:03 (#)

Настраивал в Gentoo.
1)Чтобы использовался squid, надо расскомментировать строки
PARENTPROXY localhost
PARENTPORT 3128
2)ФС должна быть примонтирована с параметром -o mand (можно добавить в /etc/fstab)
3)По-умолчанию никакой антивирус не выбран. Надо выбрать (поменять одно из значений false на true).
Например, если установлен clamav
ENABLECLAMLIB true
CLAMDBDIR /var/lib/clamav
4)У меня в конфиге bfilter по-молчанию не было раздела [forwarding]. Пришлось дописать :-)

MooSE 2008-01-09 09:42:39 (#)

Хм... У тебя обратная последовательность?

У меня так:

squid -> bfilter -> havp

А у тебя как? Похоже что вот так:

bfilter -> havp -> squid

Или я что-то не понимаю?

Alex 2008-01-09 12:00:29 (#)

да, было именно так

MooSE 2008-01-09 12:54:26 (#)

Имхо в твоём варианте havp работает больше. Поскольку часть трафика выходит из кэша. ИМХО правильнее ставить перед squid а не после.

2008-01-09 17:35:29 (#)

Тогда самая правильная связка (на мой взгляд)
squid -> havp -> bfilter

З.Ы. надеюсь скоро и у меня дома будет инет, и будет возможность попробовать:)

Shlomo 2008-01-09 18:33:26 (#)

>2)ФС должна быть примонтирована с параметром -o mand
Какая ФС? Где кеш сквида? (У меня для него отдельный рейд массив /tmp)

MooSE 2008-01-09 19:47:08 (#)

> Тогда самая правильная связка (на мой взгляд)
> squid -> havp -> bfilter

Нет. В bfilter встроена реализация ECMA. Т.е. он фактически выполняет javascript с целью его анализа. Мы не гарантированы от уязвимостей в ECMA bfilter. Соответственно к нему желательно подавать уже безопасный трафик.

Alex 2008-01-09 22:27:38 (#)

2 quadrik
Нет. Этот параметр нужен не для squid'а, а для havp.
emerge после установки говорит следующее:
/var/tmp/havp must be on a filesystem with mandatory locks!
You should add "mand" to the mount options on the relevant line in /etc/fstab.

Shlomo 2008-01-10 07:38:21 (#)

ок, /var/tmp у меня на том же 0-м рейде. Тогда поставлю и себе.

MooSE 2008-02-03 19:31:55 (#)

Про mand: в Debian оно решается следующим образом:

# mount | grep havp
/var/lib/havp/havp.loop on /var/spool/havp type ext3 (rw,mand,loop=/dev/loop0)
Новый комментарий

Жирный текстКурсивный текстПодчёркнутый текстЗачёркнутый текстПрограммный кодСсылкаИзображение




© 2006-2024 Вадим Калинников aka MooSE
Политика конфиденциальности