Для опции связки нам понадобится уже установленная антивирусная программа ClamAV. Для установки можно воспользоваться данной статьей Установка антивируса ClamAV на CentOS. Установленные ClamAV, Exim собранный с помощью CONTENT_SCAN, настроенное обращение почты в домене и наружу.
Выполняем последующие шаги:
В конф exim добавляем следующее:
После блока с
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data
acl_smtp_connect = acl_check_host
идет строчка
av_scanner = clamd:/var/run/clamav/clamd.sock
Тут в конфе пишется строка, задающая socket clamd: (в различных источниках (в зависимости от разных конфигов) указано просто clamd, вместо clamd.sock, потому нужно проверить наличие таких файлов:
root# ls -la /var/run/clamav/
total 8
drwxr-xr-x 2 clamav clamav 512 Nov 16 10:21 .
drwxr-xr-x 6 root wheel 512 Feb 14 18:15 ..
-rw-rw---- 1 clamav clamav 3 Nov 16 10:21 clamd.pid
srwxrwxrwx 1 clamav clamav 0 Nov 16 10:21 clamd.sock
-rw-rw---- 1 clamav clamav 3 Nov 16 10:21 freshclam.pid
Файл имеется. Теперь exim знает, что использовать в качестве антивирусного сканера. Далее будем строчить набор действий для того, чтобы он знал, что делать, если пришло письмо с инфекцированным вложением:
Находим в конфе секцию под названием acl_check_data. Добавим семо следующий блок:
warn message = X-Quarantine-Me-Malware: $malware_name
log_message = Malware found: $malware_name
demime = *
malware = */defer_ok
set acl_m2 = $malware_name
Что случит этот набор правил? Выдает сообщение в лог о том, что найдено вирусное ПО:
log_message = Malware found: $malware_name.
Вирусный сканнер не может самостоятельно обработать MIME контейнеры, поэтому надо воспользоваться строчкой:
demime = *
Строка должна стоять до строки с
malware = */defer_ok
Это необходимо для того, чтобы для начала раскрывался MIME, затем производилась проверка на вирусы. Значок «*» в строке с malware значит, что проверяться будет всё подряд, а строчка с “defer_ok”принимает сообщения, если антивирусный сканнер не может по каким=то причинам обработать сообщение.
Последняя строчка с set acl_m2 = $malware_name, в убеждении, даже и не нужна, она просто присваивает acl_m2 значение $malware_name. Это будет использовано в роутере. Будьте заботливы, если вы уже используете acl_m2, вам необходимо сменить m2 на другой, подходящий для вас номер.
Если же мы желаем просто откидать все письма, которые содержат вирус, то вместо блока правил, начинающегося с warn применяйте deny. То есть правила будут выглядеть примерно так:
deny message = This message contains malware ($malware_name)
demime = *
malware = *
Сейчас найдем секцию роутеров. Обычно, она начинается с блока:
######################################################################
# ROUTERS CONFIGURATION #
# Specifies how addresses are handled #
######################################################################
begin routers
В приступило этой секции добавим новый роутер для того, чтобы зараженные письма (в значении сообщение — текст на бумаге или других материалах, используемый при переписке между двумя и более адресатами) препровождались на нужный нам адрес, для последующего анализа. Можно сделать конечно, чтобы вложения ещё и воздерживались, но я предпочитаю знать всё для полноты картины. Внимание ! Этот роутер необходимо поставить первоначальным в списке роутеров, иначе он не будет прорабатываться!
check_malware:
driver = redirect
condition = ${if def:h_X-Quarantine-Me-Malware: {1}{0}}
headers_remove = Subject
headers_add = Subject: [CLAMAV: $acl_m2] $h_Subject
data = adminlogin@gmail.com
file_transport = address_file
Значит так, что видим здесь:
Используется драйвер redirect – он будет пересылать письма на адрес, подтвержденный в data. Выполняться будет при условии выполнения condition – если найден вирус. Строчка с «headers_remove = Subject» удаляет тему письма, а строка «headers_add = Subject: [CLAMAV: $acl_m2] $h_Subject» приплюсует в тему письма слова [CLAMAV: $acl_m2] и допишет старую тему (Тема (греч). В качестве $acl_m2 будет подставлено заглавие вируса, который обнаружил антивирусный сканер.
Проверка работы. Вот простейший образчик файла (описано здесь http://ru.wikipedia.org/wiki/EICAR-Test-File), на который реагируют все антивирусы:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
Это com-файл, какой при запуске выводит сообщение: EICAR-STANDARD-ANTIVIRUS-TEST-FILE! Все антивирусы реагируют на это. Отключаем свой антивирус, творим файл с таким содержанием, аттачим его на веб-почте, пишем тему, например «TEST» и присылаем себя на адрес, к примеру, mylogin@gmail.com. Результаты следующие:
Письмо отсылалось на mylogin@gmail.com, хотя сработал роутер check_malware, и письмо попало на adminlogin@gmail.com. В теле письмеца остались все вложения, в тему письма было внесено изменение и теперь, вместо «TEST» она глядит так:
[CLAMAV: Eicar-Test-Signature] TEST
Итог: вся зараженная почта сыпется на ящик adminlogin@gmail.com.
Заключительные приготовления:
Необходимо добавить обновления антивирусных баз, за это отвечает freshclam. Добавим их в кронтаб:
# crontab -e
и подключаем строчку:
0 */2 * * * /usr/local/bin/freshclam
Каждые два часа будет происходить обновление антивирусных баз.

