Почтовый трафик зачастую служит источником вирусной опасности.
Для того, чтобы обезопасить пользователей почтовой системы, установим на наш сервер антивирус.
Если Вы выбрали коммерческий продукт, то инструкции по установке и настройке необходимо искать в документации.
Рассмотрим интеграцию сервера 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
Сейчас у нас антивирус не только проверяет почту, но и складывает зараженные сообщения в карантин, отсылая уведомления об этом администратору и пользователям домена.