21.8. Настройка Clam Anti-Virus на сервере Postfix
Проблема
Требуется установить на почтовом сервере Postfix антивирусную программу, которая бы автоматически сканировала всю входящую почту и блокировала заражённые сообщения.
Решение
Используйте Clam Anti-Virus и Amavisd-new на сервере Postfix. Amavisd-new — это «обёртка» на Perl, выполняющая функции посредника для управления потоком сообщений между Clam AV и Postfix. Clam AV сам по себе не может напрямую сканировать входящие сообщения.
Обратите внимание: это решение принципиально отличается от настройки антиспамовых ограничений и белых списков в Postfix. Здесь работу будет выполнять Amavisd-new, а не сам Postfix.
Для систем на базе RPM понадобятся пакеты clamav
и amavisd-new
, для Debian — пакеты amavisd-new
, clamav
, clamav-base
, clamav-daemon
и clamav-freshclam
.
Прежде чем вносить изменения, создайте резервную копию конфигурационных файлов. Затем настройте Amavisd-new, создав файл /var/log/amavis.log
и назначив его владельцем пользователя и группу amavis, которые должны быть созданы системой управления пакетами.
Отредактируйте файл /etc/amavis/amavisd.conf
в секции 1: присвойте значения переменным $mydomain
и $myhostname
, раскомментируйте следующие строки:
$forward_method = 'smtp:127.0.0.1:10025'; # Для пересылки проверенной почты
$notify_method = $forward_method; # Для отправки оповещений
Отключите карантинную блокировку вирусов в секции 4:
$QUARANTINEDIR = undef;
$virus_quarantine_to = undef;
Также в секции 4 отключите автоматическое оповещение отправителя, поскольку обратный адрес зачастую фиктивный:
$final_virus_destiny = D_DISCARD; # (по умолчанию D_BOUNCE)
Найдите секцию 7 и раскомментируйте блок Clam AV, закомментировав другие сканеры:
['Clam Antivirus-clamd',
\&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.ctl"],
qr/\bOK$/, qr/\bFOUND$/, qr/.*?: (?!Infected Archive)(.*) FOUND$/ ],
Остановите Amavisd-new и проверьте конфигурацию встроенным отладчиком:
# /etc/init.d/amavis stop
# amavis debug
Запустите Amavisd-new и подключитесь через telnet для проверки:
# /etc/init.d/amavis start
$ telnet 127.0.0.1 10024
Trying 127.0.0.1...
Connected to 127.0.0.1
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready
Настройте Postfix для использования Amavisd-new как прокси-сервера SMTP. Добавьте в конец файла /etc/postfix/master.cf
следующий фрагмент:
smtp-amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o disable_dns_lookups=yes
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
-o strict_rfc821_envelopes=yes
Включите строку в /etc/postfix/main.cf
:
content_filter = smtp-amavis:[127.0.0.1]:10024
Перезапустите Postfix:
# /etc/init.d/postfix stop
# /etc/init.d/postfix start
Назначьте пользователя amavis владельцем всех каталогов, используемых Clam AV:
# chown -R amavis:amavis /var/log/clamav/
# chown -R amavis:amavis /var/run/clamav/
# chown -R amavis:amavis /var/lib/clamav/
Измените строки в файлах /etc/logrotate.d/clamav-daemon
и /etc/logrotate.d/clamav-freshclam
на:
create 640 clamav amavis
Сохраните изменения и перезапустите clamd
и freshclam
:
# /etc/init.d/clamav-daemon reload
# /etc/init.d/freshclam reload
Комментарий
Установка из пакетов сэкономит вам массу времени. Если требуется сборка из исходников, прочитайте всю документацию. Вам придётся вручную создать пользователей, каталоги и скрипты запуска.
Два основных компонента Clam AV — clamd
, демон сканирования, и freshclam
, модуль обновления вирусных баз. Их настройки задаются в файлах /etc/clamav/clamav.conf
и /etc/clamav/freshclam.conf
.
См. также
Файл Postfix FILTER_README
; документация Amavisd-new (например, /usr/share/doc/amavisd-new
, amavisd-new(8)
); локальная документация Clam AV (например, /usr/share/doc/clamav
); Clam Anti-Virus; Amavisd-new.