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.