Установка антивируса CLAMAV на Postfix

Почтовый трафик зачастую служит источником вирусной опасности.
Для того, чтобы обезопасить пользователей почтовой системы, установим на наш сервер антивирус.
Если Вы выбрали коммерческий продукт, то инструкции по установке и настройке необходимо искать в документации.
Рассмотрим интеграцию сервера Postfix с антивирусом ClamAV.

Установим необходимые пакеты:
#aptitude install clamav clamsmtp

Настройка clamsmtp

Откроем файл конфигурации /etc/clamsmtpd.conf и запишем туда нужные параметры:
OutAddress: 10026
Listen: 127.0.0.1:10025
ClamAddress: /var/run/clamav/clamd.ctl
Header: X-AV-Checked: ClamAV using ClamSMTP
TempDirectory: /var/spool/clamsmtp
PidFile: /var/run/clamsmtp/clamsmtpd.pid
Quarantine: on
User: clamsmtp
#VirusAction: /etc/clamav/script.sh


На самом деле, параметров в этом файле может быть больше, но я указал лишь необходимые.
Для более подробного изучения рекомендую почитать man clamsmtpd.conf.
Для применения изменений необходимо перезапустить сервис антивируса:
#service clamsmtp restart

Настройка почтового сервера

В файл /etc/postfix/main.cf добавим 2 строки:
content_filter = scan:[127.0.0.1]:10025
receive_override_options = no_address_mappings

Первая говорит postfix'у о том, что необходимо пересылать всю почту через сервис (фильтр) 'scan' на 10025-ый порт, на котором слушает clamsmtpd.
Вторая строчка говорит, чтобы postfix не делал никаких манипуляций с адресами до того, как они дойдут до content_filter.
Получается, что фильтр работает с реальными почтовыми адресами, а не с результатами перевода в виртуальные псевдонимы, маскарадингом и т.п.

В файл /etc/postfix/master.cf необходимо добавить следующие строки:
# AV scan filter (used by content_filter)
scan unix - - n - 16 smtp
       -o smtp_send_xforward_command=yes
# For injecting mail back into postfix from the filter
127.0.0.1:10026 inet n - n - 16 smtpd
       -o content_filter=
       -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
       -o smtpd_helo_restrictions=
       -o smtpd_client_restrictions=
       -o smtpd_sender_restrictions=
       -o smtpd_recipient_restrictions=permit_mynetworks,reject
       -o mynetworks_style=host
-o smtpd_authorized_xforward_hosts=127.0.0.0/8


Осталось перезапустить сервис Postfix:
#service postfix restart
На этом базовая настройка антивируса завершена.

Настройка уведомлений


Теперь осталось последнее действие - настроить отсылку уведомлений антивируса.
Для этого создадим файл script.sh:
#nano /etc/clamav/script.sh
И запишем в него:
#!/bin/sh
DOMAIN=mydomain.net
# Email address to send alerts to
ADMIN=admin@mydomain.net
# formail should be in PATH
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
LINE="-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-"
if [ X`echo $SENDER | egrep $DOMAIN` != "X" ];
then MAILTO=$SENDER,$ADMIN
else MAILTO=`echo "$RECIPIENTS" | egrep $DOMAIN | tr '\n' ','`$ADMIN
fi

(echo "Virus name: $VIRUS"
echo "Sender: $SENDER"
echo "Recipient(s): $RECIPIENTS"
echo
if [ "x$EMAIL" != "x" ] && [ -f $EMAIL ]
then
echo "Quarantined to: $EMAIL"
fi
) | cat -v | mail -s "$VIRUS found on mailserver" $MAILTO

Раскомментируем строку VirusAction: /etc/clamav/script.sh и перезапустим сервис clamsmtp:
#service clamsmtp restart
Сейчас у нас антивирус не только проверяет почту, но и складывает зараженные сообщения в карантин, отсылая уведомления об этом администратору и пользователям домена.

Настройка антиспама и самого почтового сервера рассмотрены в следующих статьях:
Установка антиспама SpamAssassin на Postfix
Установка и настройка Postfix+Dovecot

Автор статьи:
Якимчук Сергей,
Руководитель отдела технической поддержки IT Stream

Возврат к списку