Это одиннадцатый урок из серии по созданию почтового сервера на базе Ubuntu с нуля. В данной статье мы рассмотрим, как применить Amavis и ClamAV для проверки электронной почты на наличие вирусов.
Amavis (сканер вирусов для электронной почты) представляет собой мощный интерфейс между агентом передачи сообщений (MTA), например, Postfix, и фильтрами контента. Фильтры контента — это программы, которые анализируют заголовки и текст электронных писем, а затем обычно выполняют определенные действия в зависимости от полученной информации. Наиболее известные примеры таких фильтров — это сканер вирусов ClamAV и SpamAssassin для борьбы со спамом.
Amavis функционирует на базе стандартного протокола SMTP и также поддерживает интерфейс milter для Sendmail.В основном, его применяют для
- интеграция с ClamAV (Clam AntiVirus) для выполнения вирусного сканирования
- проверка на спам с использованием интеграции с SpamAssassin
- подписание и проверка DKIM. (На самом деле, я предпочитаю использовать OpenDKIM для этих целей.)
Содержание статьи
- 1 Необходимые требования
- 2 Установка Amavis на операционную систему Ubuntu.
- 3 Соединение SMTP сервера Postfix с Amavis
- 4 Соединение Amavis с ClamAV
- 5 Применение специального порта для отправки электронной почты.
- 6 Получение предупреждения о вирусе
- 7 Фильтрация нежелательной почты в Amavis
- 8 DKIM в Amavis
- 9 Оптимизация работы Amavis
- 10 Отключить проверку на вирусы для ваших информационных рассылок.
- 11 Диагностика и исправление проблем
- 12 Заключение
Необходимые требования
Для успешного выполнения этого руководства необходимо завершить хотя бы первую часть (SMTP сервер Postfix) и вторую часть (IMAP сервер Dovecot) серии уроков «Почтовый сервер Ubuntu с нуля». Имейте в виду, что если вы уже использовали iRedMail или Modoboa для настройки почтового сервера, то компоненты Amavis и ClamAV уже установлены и настроены, поэтому следовать этому руководству не требуется.
Внимание: Для работы Amavis и ClamAV необходима большая емкость оперативной памяти. Перед установкой убедитесь, что на сервере доступно минимум 1,3 ГБ свободной ОЗУ. Для полноценного функционирования всего почтового стека (Postfix, Dovecot, Amavis, ClamAV, SpamAssassin, OpenDKIM, MySQL/MariaDB, PostfixAdmin и Roundcube Webmail) рекомендуется наличие не менее 3 ГБ оперативной памяти. Недостаток памяти может привести к проблемам, таким как сбой или зависание почтового сервера.
Установка Amavis на операционную систему Ubuntu.
Amavis можно установить из стандартного репозитория Ubuntu, используя следующую команду.
sudo apt install amavisd-new - y
После установки программа запускается автоматически. Вы можете проверить её статус с помощью:
systemctl status amavis
●amavis.service - LSB: Инициализирует фильтр почты amavisd-new Загружен: да (/etc/init. d/amavis; сгенерировано) Статус: активендействует с Пт 2020-08-07 15:43:40 HKT; 1мин 1с назад Документация: man:systemd-sysv-generator(8) Задачи: 3 (лимит: 9451) Память: 75.4М CGroup: /system. slice/amavis.service ├─1794260 /usr/sbin/amavisd-new (master) ├─1794263 /usr/sbin/amavisd-new (virgin child) └─1794264 /usr/sbin/amavisd-new (virgin child)
Если он не активен, вы можете активировать его следующим образом:
sudo systemctl start amavis
Активируйте автозапуск при загрузке системы.
sudo systemctl enable amavis
По умолчанию он слушает на 127.0.0.1:10024, что можно проверить с помощью:
sudo netstat - lnpt | grep amavis

Он функционирует от имени пользователя amavis. Для проверки номера версии выполните следующую команду.
amavisd-new - V
amavisd-new-2.11.0 (20160426)
Для того чтобы просмотреть журналы Amavis, выполните следующее:
sudo journalctl - eu amavis
Вирусы часто передаются через вложения в электронных письмах. Установите перечисленные пакеты для Amavis, чтобы извлекать и проверять архивы в письмах, включая файлы форматов .7z,.cab,.doc,.exe,.iso,.jar и. rar.
sudo apt install arj bzip2 cabextract cpio rpm2cpio file gzip lhasa nomarch pax rar unrar p7zip-full unzip zip lrzip lzip liblz4-tool lzop unrar-free
Если вы работаете с Ubuntu 18.04, не забудьте установить пакет ripole.
sudo apt install ripole
Учтите, что если на вашем сервере не применяют полностью квалифицированное доменное имя (FQDN) в качестве имени хоста, это может привести к тому, что Amavis не запустится. Имя хоста операционной системы может изменяться, поэтому желательно указать корректное имя хоста непосредственно в конфигурационном файле Amavis.
sudo nano /etc/amavis/conf.d/05-node_id
Укажите следующую строку.
#$myhostname = "mail.example.com";
Удалите символ комментария (#) и замените mail.example.com на фактическое имя вашего хоста.
$myhostname = "mail.linux16.ru";
Сохраните файл и закройте его. Перезапустите Amavis, чтобы изменения начали действовать.
sudo systemctl restart amavis
Соединение SMTP сервера Postfix с Amavis
Amavisd-new функционирует в качестве SMTP-прокси. Электронные сообщения поступают к нему через SMTP, затем обрабатываются и отправляются обратно в MTA через новое SMTP-соединение.
Измените основной конфигурационный файл Postfix.
sudo nano /etc/postfix/main.cf
Вставьте данную строку в конец файла. Это сообщает Postfix о необходимости активировать фильтрацию содержимого, перенаправляя каждое входящее электронное сообщение в Amavis, который работает на 127.0.0.1:10024.
content_filter = smtp-amavis:[127.0.0.1]:10024
Кроме того, включите следующую строку.
smtpd_proxy_options = speed_adjust
Это замедлит подключение Postfix к фильтру содержимого до тех пор, пока не будет полностью получено сообщение электронной почты, что может сэкономить ресурсы фильтра, если SMTP-клиенты работают медленно.
Сохраните файл и закройте его. После этого внесите изменения в файл master.cf.
sudo nano /etc/postfix/master.cf
Добавьте указанные строки в конец файла. Это позволяет Postfix применять специальный компонент SMTP-клиента, именуемый smtp-amavis, для отправки писем в Amavis. Убедительно просим оставить хотя бы один пробел (либо табуляцию, либо пробел) перед каждой строкой, начинающейся с — o. В конфигурациях Postfix начальный пробел указывает на то, что данная строка является продолжением предыдущей.
smtp-amavis unix - - n - 2 smtp - o syslog_name=postfix/amavis - o smtp_data_done_timeout=1200 - o smtp_send_xforward_command=yes - o disable_dns_lookups=yes - o max_use=20 - o smtp_tls_security_level=none
После этого включите указанные строки в конце файла. Это позволит Postfix запустить дополнительный демон smtpd, который будет слушать на 127.0.0.1:10025 для получения электронных писем от Amavis.
127.0.0.1:10025 inet n - n - - smtpd - o syslog_name=postfix/10025 - o content_filter= - o mynetworks_style=host - o mynetworks=127.0.0.0/8 - o local_recipient_maps= - o relay_recipient_maps= - o strict_rfc821_envelopes=yes - o smtp_tls_security_level=none - o smtpd_tls_security_level=none - o smtpd_restriction_classes= - o smtpd_delay_reject=no - o smtpd_client_restrictions=permit_mynetworks, reject - o smtpd_helo_restrictions= - o smtpd_sender_restrictions= - o smtpd_recipient_restrictions=permit_mynetworks, reject - o smtpd_end_of_data_restrictions= - o smtpd_error_sleep_time=0 - o smtpd_soft_error_limit=1001 - o smtpd_hard_error_limit=1000 - o smtpd_client_connection_count_limit=0 - o smtpd_client_connection_rate_limit=0 - o receive_override_options=no_header_body_checks, no_unknown_recipient_checks, no_address_mappings
Сохраните файл и закройте его. Затем перезапустите Postfix для применения изменений.
sudo systemctl restart postfix
Соединение Amavis с ClamAV
Теперь, когда Postfix настроен на передачу входящих писем в Amavis, необходимо установить антивирусный сканер ClamAV и соединить его с Amavis для проверки входящих сообщений с помощью ClamAV.
Установите ClamAV на операционную систему Ubuntu.
sudo apt install clamav clamav-daemon
ClamAV создаст два systemd-сервиса:
- clamav-daemon.service: пользовательский демон антивируса Clam AntiVirus.
- clamav-freshclam.service : обновление базы данных вирусов ClamAV
Сначала необходимо проверить состояние службы clamav-freshclam.service.
systemctl status clamav-freshclam

Он активен и потребляет 217,6 МБ оперативной памяти на моем почтовом сервере. После этого проверьте журнал.
sudo journalctl - eu clamav-freshclam

Совет: Если указанная выше команда не выполнится сразу, нажмите клавишу Q для её прерывания.
Freshclam загрузил три базы данных вирусов. CVD расшифровывается как База Вирусов ClamAV.
- daily. cvd
- main. cvd
- bytecode. cvd
Тем не менее, clamd не получил уведомление, так как freshclam не может установить соединение с clamd по адресу /var/run/clamav/clamd. ctl. Убедитесь, что служба clamav-daemon.service работает корректно.
systemctl status clamav-daemon

Не удалось запустить, так как одно из условий не было выполнено. В файле /lib/systemd/system/clamav-daemon.service присутствуют два условия.
Путь условия наличия файла: /var/lib/clamav/main. Путь условия наличия файла: /var/lib/clamav/daily.
Служба clamav-daemon.service не была запущена, так как файлы main. cvd и daily. cvd не успели загрузиться до старта. Для решения этой проблемы необходимо просто перезапустить службу.
sudo systemctl restart clamav-daemon
Теперь всё должно функционировать. Кстати, на моём почтовом сервере она потребляет 731,4 МБ оперативной памяти. Если на вашем сервере не хватает доступной памяти, служба завершится с ошибкой.
systemctl status clamav-daemon.service

Служба clamav-freshclam.service будет выполнять проверку обновлений антивирусных баз ClamAV каждый час.
Теперь необходимо активировать антивирусную проверку в Amavis.
sudo nano /etc/amavis/conf.d/15-content_filter_mode
Активируйте следующие строки, чтобы задействовать проверку на вирусы.
#@bypass_virus_checks_maps = ( # \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

Закройте и сохраните файл. В конфигурационном файле /etc/amavis/conf.d/15-av_scanners перечислены различные антивирусные сканеры. По умолчанию используется ClamAV. Для взаимодействия с Amavis ClamAV будет использовать Unix-сокет /var/run/clamav/clamd. ctl. Необходимо добавить пользователя clamav в группу amavis.
sudo adduser clamav amavis
После этого перезапустите Amavis и службу ClamAV, чтобы изменения начали действовать.
sudo systemctl restart amavis clamav-daemon
sudo journalctl - eu amavis
Теперь вы можете заметить, что для проверки на вирусы Amavis применяет ClamAV.
Aug 08 17:26:19 mail.linux16.ru amavis[1233432]: Использование основного внутреннего кода сканера для ClamAV-clamd Aug 08 17:26:19 mail.linux16.ru amavis[1233432]: Найден вторичный сканер ClamAV-clamscan в /usr/bin/clamscan
Если вы отправите письмо с других почтовых сервисов, например, Gmail, на свой сервер и посмотрите заголовки сообщения, то увидите строку, указывающую на проверку письма через Amavis.
X-Virus-Scanned: Debian amavisd-new at linux16.ru
Не забудьте просмотреть журнал почты (/var/log/mail.log), чтобы выяснить, имеются ли какие-либо ошибки.
Применение специального порта для отправки электронной почты.
ClamAV теперь способен проверять как входящие, так и исходящие электронные письма. Amavis прослушивает порт 10024 для обработки как входящей, так и исходящей почты. Тем не менее, рекомендуется выбрать другой порт, например 10026, для отправки сообщений от аутентифицированных пользователей. Необходимо внести изменения в файл конфигурации Amavis.
sudo nano /etc/amavis/conf.d/50-user
Пользовательские настройки необходимо вставить между строками use strict; и 1;. По умолчанию Amavis принимает подключения только на порту 10024. Для того чтобы Amavis также начал прослушивать порт 10026, добавьте следующую строку.
$inet_socket_port = [10024,10026];
После этого введите следующую строку, которая устанавливает политику «ORIGINATING» для порта 10026.
$interface_policy = 'ORIGINATING';
Затем вставьте следующие строки, которые устанавливают политику «ORIGINATING».
$policy_bank = < # почта, предположительно исходящая от наших пользователей originating =>1, # заявляем, что почта была отправлена нашим smtp-клиентом allow_disclaimers => 1, # разрешает вставку отказов, если доступны # уведомление администратора о локально исходящем вирусе virus_admin_maps => ["virusalert\@$mydomain"], spam_admin_maps => ["virusalert\@$mydomain"], warnbadhsender => 1, # принудительная конвертация MTA в 7-бит (например, перед подписанием DKIM) smtpd_discard_ehlo_keywords => ['8BITMIME'], bypass_banned_checks_maps => [1], # разрешение отправки любых имен и типов файлов terminate_dsn_on_notify_success => 0, # не удалять опцию NOTIFY=SUCCESS $undecipherable_subject_tag = '***Зашифрованное сообщение***', >;
Сохраните изменения в файле и закройте его. Затем перезапустите Amavis.
sudo systemctl restart amavis
Убедитесь в статусе, чтобы подтвердить успешность перезапуска.
systemctl status amavis
Затем внесите изменения в файл конфигурации master для Postfix.
sudo nano /etc/postfix/master.cf
Включите следующую строку в службу отправки, чтобы письма от аутентифицированных SMTP-клиентов обрабатывались Amavis, который работает на порту 10026. Эта запись изменит настройку content_filter в файле /etc/postfix/main.cf, добавленном на этапе 2.
-o content_filter=smtp-amavis:[127.0.0.1]:10026

Если вы активировали службу smtps для пользователей Microsoft Outlook, необходимо также внести эту строку в службу smtps.

Сохраните файл и закройте его. Затем перезапустите Postfix для применения изменений.
sudo systemctl restart postfix
Убедитесь в его статусе, чтобы подтвердить успешность перезапуска.
systemctl status postfix
Получение предупреждения о вирусе
Для получения уведомлений о вирусах от ClamAV необходимо создать реальный адрес электронной почты [email protected]. Важно использовать настоящий адрес, а не псевдоним. ClamAV будет напрямую отправлять уведомления в Dovecot, минуя Postfix, так как Dovecot не настроен для обработки псевдонимов из базы данных PostfixAdmin.
Фильтрация нежелательной почты в Amavis
Замечание: Если вы воспользовались моим руководством по SpamAssassin, то вам не требуется активировать проверку спама в Amavis. Включение этой функции приведет к тому, что каждое письмо будет проходить проверку через SpamAssassin дважды.
Для активации функции проверки на спам в Amavis необходимо установить SpamAssassin и сопутствующие пакеты.
sudo apt install spamassassin libnet-dns-perl libmail-spf-perl pyzor razor
Внесите изменения в файл конфигурации Amavis.
sudo nano /etc/amavis/conf.d/15-content_filter_mode
Удалите комментарий с указанных строк, чтобы активировать проверку на спам.
#@bypass_spam_checks_maps = ( # \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
Сохраните изменения в файле и закройте его. После этого перезапустите Amavis.
sudo systemctl restart amavis
DKIM в Amavis
Среди популярных программ для DKIM-подписывания и проверки в Linux можно выделить OpenDKIM и Amavis. Я отдам предпочтение OpenDKIM, так как он более совместим с OpenDMARC. Поэтому не буду углубляться в процесс DKIM-подписания электронной почты с использованием Amavis.
Amavis, по умолчанию, способен проверять DKIM-подписи для входящих электронных писем. Если на вашем почтовом сервере настроен OpenDKIM, то вы можете отключить эту проверку в Amavis.
sudo nano /etc/amavis/conf.d/21-ubuntu_defaults
Найдите следующую строку и замените 1 на 0, чтобы отключить проверку DKIM-подписей в Amavis.
$enable_dkim_verification = 1;
Сохраните изменения в файле и закройте его. После этого перезапустите Amavis.
sudo systemctl restart amavis
При получении входящих сообщений Postfix будет взаимодействовать с OpenDKIM через интерфейс sendmail milter для проверки DKIM-подписей, после чего письма будут направлены в Amavis для антивирусной проверки. При отправке исходящих писем Postfix также будет использовать OpenDKIM для их подписи, а затем передавать их в Amavis для проверки на вирусы.
Оптимизация работы Amavis
По умолчанию Amavis запускает два процесса. Если в почтовом журнале (/var/log/mail.log) появляются следующие строки, это свидетельствует о том, что Amavis не успевает обрабатывать письма с необходимой скоростью.
postfix/qmgr[1619188]: warning: mail for [127.0.0.1]:10024 is using up 4001 of 4008 active queue entries postfix/qmgr[1619188]: warning: you may need to reduce smtp-amavis connect and helo timeouts postfix/qmgr[1619188]: warning: so that Postfix quickly skips unavailable hosts postfix/qmgr[1619188]: warning: you may need to increase the main.cf minimal_backoff_time and maximal_backoff_time postfix/qmgr[1619188]: warning: so that Postfix wastes less time on undeliverable mail mail postfix/qmgr[1619188]: warning: you may need to increase the master.cf smtp-amavis process limit mail postfix/qmgr[1619188]: warning: please avoid flushing the whole queue when you have mail postfix/qmgr[1619188]: warning: lots of deferred mail, that is bad for performance
Для повышения производительности внесите изменения в файл конфигурации Amavis.
sudo nano /etc/amavis/conf.d/50-user
Вставьте следующую строку в файл между строками use strict; и 1;. Это позволит Amavis запустить 4 процесса. Если в вашей системе 10 ядер, можно заменить 4 на 10. Учтите, что увеличение числа процессов Amavis свыше 10 практически не сказывается на производительности.
$max_servers = 4;
Сохраните файл и закройте его. После этого внесите изменения в основной конфигурационный файл Postfix.
sudo nano /etc/postfix/master.cf
Определите службу smtp-amavis и измените количество процессов с 2 на 4.
smtp-amavis unix - - n - 4 smtp - o syslog_name=postfix/amavis - o smtp_data_done_timeout=1200 - o smtp_send_xforward_command=yes - o disable_dns_lookups=yes - o max_use=20 - o smtp_tls_security_level=none
Сохраните файл и закройте его. После этого перезапустите Amavis и Postfix, чтобы изменения начали действовать.
sudo systemctl restart amavis postfix
Теперь выполните следующую команду. Вы должны заметить, что сейчас запущено 4 процесса Amavis.
sudo amavisd-nanny

Для завершения работы amavisd-nanny нажмите комбинацию клавиш Ctrl+C.
Отключить проверку на вирусы для ваших информационных рассылок.
Если вы отправляете новостные рассылки с помощью своего почтового сервера и активировали Amavis и ClamAV, то процесс проверки на вирусы может потребовать значительных ресурсов процессора и оперативной памяти. Это, в свою очередь, может привести к снижению отзывчивости вашего почтового сервера. Чтобы избежать проверки вирусов для ваших рассылок, воспользуйтесь приведенным ниже методом.
Внесите изменения в файл конфигурации основного Postfix.
sudo nano /etc/postfix/master.cf
Вставьте указанные строки в начале данного файла. Это активирует smtpd на порту 2525 локального хоста, позволяя ему обрабатывать клиентские соединения, исходящие с того же сервера. Если другой процесс уже занят портом 2525, вы можете заменить 127.0.0.1:2525 на другой, например, 127.0.0.1:2552. Имейте в виду, что параметр content_filter установлен в значение none, что подразумевает отсутствие проверки электронных писем с помощью ClamAV.
127.0.0.1:2525 inet n - - - 1 smtpd - o syslog_name=postfix/2525 - o postscreen_greet_action=ignore - o content_filter=
После этого вставьте указанные строки в конец файла. Замените 12.34.56.78 на публичный IP-адрес вашего почтового сервера. Это позволит создать дополнительный демон отправки Postfix, который будет принимать соединения на порту 10587. Он предназначен для клиентских соединений с другого сервера.
12.34.56.78:10587 inet n - y - - smtpd - o syslog_name=postfix/10587 - o smtpd_tls_security_level=encrypt - o smtpd_tls_wrappermode=no - o smtpd_sasl_auth_enable=yes - o smtpd_relay_restrictions=permit_sasl_authenticated, reject - o smtpd_recipient_restrictions=permit_mynetworks, permit_sasl_authenticated, reject - o smtpd_sasl_type=dovecot - o smtpd_sasl_path=private/auth - o content_filter=
Сохраните файл и закройте его. После этого перезапустите Postfix.
sudo systemctl restart postfix
Если ваше приложение для рассылки новостей функционирует на почтовом сервере, используйте 127.0.0.1:2525 в качестве SMTP-хоста без необходимости аутентификации. Если же ваше приложение работает на другом сервере, укажите 12.34.56.78:10587 как SMTP-хост с включенной аутентификацией.
Диагностика и исправление проблем
Если ваш SMTP-сервер Postfix испытывает трудности с отправкой исходящих писем и в журнале почты (/var/log/mail.log) отображается следующее сообщение об ошибке,
relay=none, delay=239, delays=239/0.04/0/0, dsn=4.3.0, status=deferred (сервер недоступен или не может принимат
LibClamAV Предупреждение: PNG: Неожиданное раннее завершение файла. LibClamAV Предупреждение: cli_scanxz: размер распакованного файла превышает пределы - сканирование только 27262976 байт
Вы можете увеличить масштаб сканирования следующим образом:
MaxScanSize 2048M MaxFileSize 2048M
В операционной системе Linux существует множество специализированных файлов в каталогах /proc/, /sys/, /run/, /dev/, /snap/ и /var/lib/lxcfs/cgroup/, которые не следует сканировать. Чтобы исключить их из проверки в ClamAV, необходимо добавить указанные строки в конец данного файла.
ExcludePath ^/proc ExcludePath ^/sys ExcludePath ^/run ExcludePath ^/dev ExcludePath ^/snap ExcludePath ^/var/lib/lxcfs/cgroup
Сохраните изменения в файле и закройте его. После этого перезапустите службу clamav-daemon.service, чтобы обновления начали действовать.
sudo systemctl restart clamav-daemon
Подождите несколько мгновений, пока завершится перезагрузка службы clamav-daemon.service. После этого вы можете приступить к сканированию с помощью:
sudo clamdscan --fdpass /
Система будет осуществлять сканирование всей файловой системы Linux, за исключением указанных ранее каталогов. Для того чтобы ClamAV выполнял автоматическое сканирование файловой системы, необходимо внести изменения в файл crontab для пользователя root.
sudo crontab - e
Вставьте эту строку в указанный файл. ClamAV будет осуществлять полное сканирование файловой системы ежедневно в 5:10 утра.
10 5 * * * /usr/bin/clamdscan --fdpass /
Сохраните файл и завершите его редактирование.
Совет №1: Есть еще одна утилита под названием clamscan, которая тоже предназначена для вирусного сканирования. Однако clamscan не применяет уже загруженную в память базу данных вирусов, а заново загружает отдельную версию этой базы, что может потреблять больше ресурсов сервера. Кроме того, clamscan работает медленнее, чем clamdscan, поэтому его использование не рекомендуется.
Совет №2: В случае, если на вашем сервере имеется множество файлов, clamdscan будет потреблять значительное количество ресурсов процессора.
Заключение
Надеюсь, данный учебник оказался полезным для настройки Amavis и ClamAV на вашем почтовом сервере под управлением Ubuntu. Если вам понравилась эта статья, не забудьте подписаться на нашу бесплатную рассылку, чтобы получать больше рекомендаций и лайфхаков.

