Проверка Squid-трафика на вирусы с помощью DrWeb

Цель данной статьи - поделится опытом, а также - тонкостями настройки проверки HTTP-трафика, проходящего через прокси-сервер Squid на вирусы с помощью антивируса Drweb.

[Горыч (step107 AT yandex DOT ru)]

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

В данном обзоре описаны настройки связки антивируса и прокси-сервера, поэтому настройка сквида и firewall будут упомянуты лишь в той части, которая необходима для функционирования этой конструкции. Замечу также, что антивирус Drweb является коммерческим продуктом, и для его функционирования необходим ключ, который на момент настройки был в моем распоряжении. Но для тестовой сборки на сайте http://www.drweb.com, после регистрации, можно получить демо-ключ с ограниченным сроком действия (30 дней).

Также возможна настройка взаимодействия Drweb с другими прокси-серверами: SafeSquid и Shweby (см. документацию к антивирусу).

При настройке сервера использовались:

  1. FreeBSD 5.4.
  2. Пропатченный Squid (с icap), скаченный с сайта производителя и рекомендованный для установки (они позволят полностью использовать функционал drweb-icap).
  3. Drweb + Drweb-icap, также полученные с сайта.
Squid был настроен для работы как "прозрачный прокси", поэтому ядро компилировалось с опцией IPFIREWALL_FORWARD для поддержки перенаправления пакетов, а также создано правило перенаправляющее пакеты, которые идут из локальной сети по http на порт 3128 прокси-сервера:
fwd 127.0.0.1,3128 tcp from 192.168.0.0/24 to any dst-port 80 in via fxp0
Устанавливаем Squid:
# tar zxvf squid-icap-2.5-STABLE12-20060215-drweb-patched.tar.gz
# cd squid-icap-2.5-STABLE12-20060215-drweb-patched
# ./configure 
# make 
# make install
Пример конфигурационного файла squid.conf:
http_port 127.0.0.1:3128

icp_port 0

cache_mem 64 MB
cache_swap_high 95
cache_swap_low 90
cache_dir ufs /usr/local/squid/var/cache 3072 16 256
cache_access_log /usr/local/squid/var/logs/access.log
cache_log /usr/local/squid/var/logs/cache.log
cache_store_log /usr/local/squid/var/logs/store.log

hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY

error_directory /usr/local/squid/share/errors/Russian-1251

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 22          # ssh
acl Safe_ports port 443        # https
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

acl Users src "/usr/local/squid/etc/UsersList"
acl IPList dst "/usr/local/squid/etc/IPList"
acl FileList urlpath_regex -i "/usr/local/squid/etc/FileList"
acl DomainList dstdomain "/usr/local/squid/etc/DomainList"

http_access deny FileList
http_access deny IPList
http_access deny DomainList
http_access allow Users
http_access deny all

cache_effective_user squid
cache_effective_group squid

#Настройки необходимые для взаимодействия squid с drweb-icap
icap_enable on
icap_service service_1 respmod_precache 0 icap://localhost:1344/respmod no-keep-alive
icap_class class_1 service_1
icap_access class_1 allow all
icap_preview_enable on
icap_preview_size 0
Итак, мы имеем в распоряжении шлюз с настроенным прокси-сервером.

Устанавливаем Drweb. На момент написания статьи он имел версию 4.33. Также для установки и последующего обновления нам потребуется wget и для взаимодействия со squid - drweb-icapd-4.33.1-freebsd54.tar.gz.

#pkg_add drweb-4.33.tbz
При установке добавляется задание на обновление антивирусных баз два раза в час, причем минуты устанавливаются произвольно.

Распаковываем drweb-icapd-4.33.1-freebsd54.tar.gz и копируем содержимое архива, сохраняя структуру каталогов.

Кладем ключ (drweb32.key) в директорию /usr/local/drweb/.

Для обновления Drweb нам необходимо настроить wget. Для этого в файле /usr/local/etc/wgetrc прописываем параметры:

use_proxy = on
http_proxy = http://127.0.0.1:3128/
В документации указан рекомендуемый порядок загрузки взаимодействующих элементов:
  1. демон Drweb
  2. drweb-icap
  3. прокси-сервер.
При установке создаются 2 скрипта запуска в /usr/local/etc/rc.d 00.drweb-icap.sh и 00.drweb.sh

Соответственно для последовательной загрузки необходимо переименовать 00.drweb.sh в 01.drweb.sh, а скрипт squid.sh в 02.squid.sh.

Перезагружаемся и проверяем работу нашей конструкции:

#sockstat -4 |  grep "drweb*"
Результат должен быть таким:
drweb    drwebd     580   4  tcp4   127.0.0.1:3000        *:*
drweb    drwebd     579   4  tcp4   127.0.0.1:3000        *:*
drweb    drwebd     578   4  tcp4   127.0.0.1:3000        *:*
drweb    drwebd     576   4  tcp4   127.0.0.1:3000        *:*
drweb    drwebd     575   4  tcp4   127.0.0.1:3000        *:*
drweb    drwebd     574   4  tcp4   127.0.0.1:3000        *:*
drweb    drwebd     573   4  tcp4   127.0.0.1:3000        *:*
drweb    drwebd     572   4  tcp4   127.0.0.1:3000        *:*
drweb    drwebd     571   4  tcp4   127.0.0.1:3000        *:*
drweb    drwebd     570   4  tcp4   127.0.0.1:3000        *:*
drweb    drwebd     569   4  tcp4   127.0.0.1:3000        *:*
drweb    drwebd     568   4  tcp4   127.0.0.1:3000        *:*
drweb    drwebd     565   4  tcp4   127.0.0.1:3000        *:*
drweb    drwebd     564   4  tcp4   127.0.0.1:3000        *:*
drweb    drwebd     563   4  tcp4   127.0.0.1:3000        *:*
drweb    drwebd     562   4  tcp4   127.0.0.1:3000        *:*
drweb    drwebd     561   4  tcp4   127.0.0.1:3000        *:*
drweb    drweb-icap 557   3  tcp4   127.0.0.1:1344        *:*
Обновляем базы Drweb:
#/usr/local/drweb/update.pl
Результат:
Dr.Web (R) update details:
Update server: http://update.msk3.drweb.com/unix/433
Update has began at Mon May  8 11:25:10 2006
Update has finished at Mon May  8 11:25:20 2006

Following files had been updated:
       	/var/drweb/bases/dwntoday.vdb
	/var/drweb/bases/drwrisky.vdb
	/var/drweb/bases/dwrtoday.vdb
	/var/drweb/bases/drwnasty.vdb
	/var/drweb/bases/drwtoday.vdb
Если используется ограничение доступа для пользователей локальной сети, мой случай, то в файле, содержащем эти списки необходимо добавить адрес 127.0.0.1 для того чтобы Drweb мог обновляться, используя прокси-сервер.

Правим в drweb-icapd.ini параметры Infected, Suspicious и Incurable в значение report и заходим по ссылке: http://www.eicar.org/download/eicar.com. В окне браузера мы должны увидеть предупреждение о зараженном файле.

При работе были проблемы с прокси-сервером и icap. Возникала ошибка о падении icap, и через некоторое время прокси начинал тормозить. Проблема решилась добавлением опции no-keep-alive в настройки icap squid. Эта настройка необходима, так как drweb-icapd сейчас не поддерживает постоянные соединения и может вызвать проблемы при работе сервера.

К сожалению, возможности получения статистических данных на данный момент тоже ограниченны. На сайте производителя можно скачать drweb-agent, собирающий статистику о количестве вирусов, которую можно посмотреть на сайте статистики. В будущем надеюсь, данный функционал будет доработан, о чем заявлено на форуме компании.

Также возможно настроить проверку ftp проходящего через прокси. Подробнее об этом можно почитать в документации к антивирусу.

К тому же не ведется проверка https, т.к. в этом тоже нет необходимости.

При настройке прокси-сервера использовались материалы, полученные с сайта http://www.opennet.ru, а также документация с сайта http://www.drweb.com и некоторые разъяснения специалистов компании производителя на форуме.

Статья взята с сайта OpenNet.

[ опубликовано 01/06/2006 ]

Горыч (step107 AT yandex DOT ru) - Проверка Squid-трафика на вирусы с помощью DrWeb   Версия для печати