Это десятая часть серии руководств по настройке почтового сервера на базе CentOS 8/RHEL 8. В данной статье мы рассмотрим, как применять Amavis и ClamAV для вирусного сканирования электронной почты. Amavis — это мощный инструмент, служащий связующим звеном между агентами передачи сообщений (MTA), такими как Postfix, и фильтрами контента. Фильтр контента представляет собой программу, которая анализирует заголовки и содержание электронных писем, часто предпринимая действия в зависимости от обнаруженных данных. К наиболее известным примерам фильтров контента можно отнести антивирусный сканер ClamAV и SpamAssassin.

Amavis работает с протоколом SMTP и может также применять интерфейс Sendmail milter. Этот инструмент широко используется для
- Сканирование на вирусы с использованием ClamAV (Clam AntiVirus).
- проверки на нежелательную почту с использованием SpamAssassin
- Подписи и проверки DKIM. (На самом деле, я отдам предпочтение OpenDKIM для этих задач.)
Содержание статьи
- 1 Начальные условия
- 2 Установите Amavis на CentOS 8 или RHEL 8
- 3 Настройка взаимодействия Postfix с Amavis через SMTP
- 4 Настройка интеграции Amavis и ClamAV
- 5 Применяйте выделенный порт для отправки писем
- 6 Отключение спам-фильтрации в Amavis
- 7 Выключение DKIM в Amavis
- 8 Оптимизация работы Amavis
- 9 Исключение из процесса проверки на вирусы для ваших информационных рассылок
Начальные условия
Необходимо пройти хотя бы первую часть (SMTP сервер Postfix) и вторую часть (IMAP сервер Dovecot) серии руководств по настройке почтового сервера на CentOS 8/RHEL 8 с нуля. Учтите, что если вы уже настраивали почтовый сервер с помощью iRedMail или Modoboa, то Amavis и ClamAV будут установлены и настроены, и вам не потребуется следовать этому руководству.
Внимание: для работы Amavis и ClamAV необходимо значительное количество оперативной памяти. Убедитесь, что на вашем сервере доступно не менее 1.3 ГБ свободной ОЗУ перед установкой этих компонентов. Для корректной работы всей почтовой системы (Postfix, Dovecot, Amavis, ClamAV, SpamAssassin, OpenDKIM, MySQL/MariaDB, PostfixAdmin и Roundcube Webmail) требуется как минимум 3 ГБ ОЗУ. В противном случае, при нехватке памяти, вы можете столкнуться с проблемами, такими как сбой почтового сервера или его неработоспособное состояние.
Установите Amavis на CentOS 8 или RHEL 8
Amavis разработан с использованием Perl. Для установки необходимых зависимостей Perl для Amavis на RHEL 8 требуется активировать репозиторий EPEL (Дополнительные пакеты для корпоративного Linux) и репозиторий CodeReady Linux Builder.
sudo dnf install epel-release sudo subscription-manager repos --enable=codeready-builder-for-rhel-8-x86_64-rpms
На CentOS 8 активируйте репозиторий EPEL (Дополнительные пакеты для корпоративного Linux) и репозиторий PowerTools для установки зависимостей Perl, необходимых для Amavis.
sudo dnf install epel-release - y sudo dnf config-manager --set-enabled powertools
После этого установите пакет amavis.
sudo dnf install amavis - y
Для проверки номера версии выполните следующие шаги:
amavisd - V
amavisd-new-2.12.0 (20190725)
Вирусы зачастую передаются в виде вложений к электронным письмам. Для Amavis установите необходимые пакеты, чтобы извлекать и проверять архивы в сообщениях, включая файлы форматов .7z,.cab,.doc,.exe,.iso,.jar и. rar.
sudo dnf - y install arj bzip2 cpio file gzip nomarch spax unrar p7zip unzip zip lrzsz lzip lz4 lzop
Учтите, что если ваш сервер не использует полное квалифицированное доменное имя (FQDN) в качестве имени хоста, это может привести к проблемам с запуском Amavis. Также стоит помнить, что имя хоста операционной системы может изменяться, поэтому рекомендуется задать корректное имя хоста прямо в конфигурационном файле Amavis.
sudo nano /etc/amavisd/amavisd.conf
Определите следующую строку.
$mydomain = 'example.com'; # удобный вариант по умолчанию для других настроек
Рекомендуется также заменить значение mydomain на уникальное доменное имя, соответствующее вашему собственному веб-адресу.
$mydomain = 'linux16.ru'; # удобный вариант по умолчанию для других настроек
Затем нужно отыскать последующую фразу.
# $myhostname = 'host. example.com'; # должно быть полностью квалифицированное доменное имя!
Конечно, вот перефразированный текст:
Удалите первый символ замечания и перепишите.
Служба amavisd - Проверка почтового контента Amavis Статус: загружено (/usr/lib/systemd/system/amavisd.service; включено; предустановка поставщика: отключена) Состояние: Активно функционирует. с Чт 2020-11-19 01:21:26 EST; 8 секунд назад Документы: http://www. ijs. si/software/amavisd/#doc Основной PID: 18782 (/usr/sbin/amavi) Задачи: 3 (лимит: 12502) Память: 149.5M CGroup: /system. slice/amavisd.service ├─18782 /usr/sbin/amavisd (мастер) ├─18806 /usr/sbin/amavisd (чистый потомок) └─18807 /usr/sbin/amavisd (чистый потомок)
Если команда выше не завершилась мгновенно, нажмите клавишу Q.
Amavis функционирует, как видно. Если это не так, вы можете просмотреть логи командой ( sudo journalctl — eu amavisd ). Amavisd работает на 127.0.0.1:10024, что подтверждается следующими данными:
sudo ss - lnpt | grep amavi
Он функционирует под учетной записью amavis.
Настройка взаимодействия Postfix с Amavis через SMTP
Amavis функционирует как SMTP-прокси. Почтовые сообщения поступают к нему через протокол SMTP, проходят обработку и затем передаются обратно на почтовый сервер через новое SMTP-соединение.
Запустите команду, которая настраивает Postfix на фильтрацию содержимого, направляя каждое входящее письмо в Amavis, работающий на 127.0.0.1:10024.
sudo postconf - e "content_filter = smtp-amavis:[127.0.0.1]:10024"
Также выполните следующую команду. Это задержит соединение Postfix с фильтром содержимого до полного получения сообщения электронной почты, что поможет избежать ненужных затрат времени и ресурсов на медленные SMTP-клиенты.
sudo postconf - e "smtpd_proxy_options = speed_adjust"
После этого внесите изменения в файл 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, который будет принимать электронные письма от Amavis на 127.0.0.1:10025.
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 на операционных системах CentOS 8 или RHEL 8.
sudo dnf install clamav clamav-lib clamav-data clamav-update - y
Будут развернуты два системных сервиса systemd от ClamAV:
- [email protected] : демон Clam AntiVirus в пользовательском окружении
- clamav-freshclam.service: обновление базы данных вирусов ClamAV.
Сначала активируйте службу clamav-freshclam.service.
sudo systemctl start clamav-freshclam.service
Активируйте автозапуск во время загрузки.
sudo systemctl enable clamav-freshclam.service
Проверьте текущее состояние.
systemctl status clamav-freshclam

Как видно, он активно работает и использует 27.8 МБ ОЗУ на моем почтовом сервере. Далее проверьте журналы.
sudo journalctl - eu clamav-freshclam

Если команда не завершилась сразу, нажмите клавишу Q для выхода.
Мы наблюдаем, что freshclam скачал три вирусные базы данных. CVD обозначает базу данных вирусов для ClamAV.
- daily. cvd
- main. cvd
- bytecode. cvd
Служба clamav-freshclam.service будет обновлять базу данных вирусов ClamAV каждый час.
Активируйте автоматический старт при запуске системы. Откройте конфигурационный файл Amavis.
sudo nano /etc/amavisd/amavisd.conf
В данном файле содержится строка, в которой осуществляется проверка на наличие вирусов.
# @bypass_virus_checks_maps = (1); # контролирует выполнение кода антивируса
Если вы уберете комментарий с этой строки, проверка на вирусы будет отключена.
В разделе @av_scanners указано множество антивирусных сканеров, среди которых ClamAV является основным. Amavis будет взаимодействовать с ClamAV через Unix-сокет, расположенный по адресу /run/clamd. amavisd/clamd. sock. Оба процесса, ClamAV и Amavis, функционируют от имени пользователя amavis.
Закройте документ и перезапустите Amavis.
sudo systemctl restart amavisd
sudo journalctl - eu amavisd
Теперь вы можете наблюдать, что Amavis применяет ClamAV для обнаружения вирусов.
mail.linux16.ru amavis[1233432]: Использование основного внутреннего кода сканера av для ClamAV-clamd mail.linux16.ru amavis[1233432]: Найден вторичный сканер av ClamAV-clamscan по адресу /usr/bin/clamscan
Теперь, если вы отправите письмо с других почтовых сервисов, таких как Gmail, на свой собственный почтовый сервер и посмотрите заголовки сообщения, вы можете увидеть строку, аналогичную следующей, которая указывает на то, что это письмо было проверено Amavis.
X-Virus-Scanned: Debian amavisd-new на linux16.ru
Не забудьте просмотреть журнал почты (/var/log/maillog), чтобы проверить наличие ошибок.
Применяйте выделенный порт для отправки писем
ClamAV теперь способен проверять как входящие, так и исходящие электронные письма. Amavis принимает сообщения на порту 10024 для обоих типов почты. Однако рекомендуется использовать другой порт, например 10026, для отправки писем от аутентифицированных пользователей.
Измените главный файл конфигурации Amavis.
sudo nano /etc/amavisd/amavisd.conf
Определите следующую строку.
$inet_socket_port = 10024; # слушать на этом локальном TCP порту(ах)
Чтобы закомментировать строку, добавьте символ # перед ней.
#$inet_socket_port = 10024; # слушать на этом локальном TCP порту(ах)
Затем нужно отыскать последующую фразу.
# $inet_socket_port = [10024,10026]; # слушать на нескольких TCP портах
Удалите первый символ #, чтобы активировать эту строку и позволить Amavisd принимать соединения на порту 10026.
$inet_socket_port = [10024,10026]; # слушать на нескольких TCP портах
При прокрутке вниз вы наткнетесь на строку, которая задает политику «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 =>
В представленных выше строках видно, что Amavis по умолчанию перенаправляет электронные письма на службу SMTPD, отвечающую за подпись DKIM. За процесс подписания DKIM будут отвечать Postfix и OpenDKIM, поэтому необходимо закомментировать директиву forward_method.
# forward_method => 'smtp:[127.0.0.1]:10027',
Сохраните файл и закройте его. Затем необходимо настроить SELinux, чтобы разрешить Amavis использовать порт 10026. Для этого установите пакет, который включает команду semanage.
sudo dnf install policycoreutils-python-utils - y
После этого настройте тип порта 10026 на amavisd_recv_port_t, чтобы Amavis мог принимать подключения на этом порту.
sudo semanage port - m - t amavisd_recv_port_t - p tcp 10026
Пожалуйста, проверьте порт 10026.
sudo semanage port - l | grep 10026
Порт 10026 также может быть задействован Amavisd.

sudo systemctl restart amavisd
Проверьте его состояние, чтобы выяснить, прошел ли перезапуск успешно.
systemctl status amavisd
Затем внесите изменения в файл конфигурации главного Postfix.
sudo nano /etc/postfix/master.cf
Включите следующую строку в службу отправки, чтобы обеспечить передачу писем от аутентифицированных SMTP-клиентов в Amavis, который работает на порту 10026. Эта запись изменит параметр content_filter (-o) в файле /etc/postfix/main.cf.
-o content_filter=smtp-amavis:[127.0.0.1]:10026

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

Сохраните файл и закройте его. Затем перезапустите Postfix, чтобы изменения были применены.
sudo systemctl restart postfix
Проверьте его статус, чтобы определить, удалось ли выполнить перезапуск.
systemctl status postfix
Отключение спам-фильтрации в Amavis
Фильтрация спама в Amavis активирована по умолчанию. Если вы уже ознакомились с моим руководством по SpamAssassin, активация проверки спама в Amavis не требуется. В противном случае каждое письмо будет подвергаться двойной проверке с использованием SpamAssassin.
Для деактивации проверки спама в Amavis необходимо внести изменения в конфигурационный файл Amavis.
sudo nano /etc/amavisd/amavisd.conf
Определите следующую строку.
# @bypass_spam_checks_maps = (1); # контролирует выполнение кода антиспама
Удалите первый символ комментария (#), чтобы деактивировать проверку на спам.
@bypass_spam_checks_maps = (1); # контролирует выполнение кода антиспама
Сохраните изменения и закройте документ. После этого перезапустите Amavis.
sudo systemctl restart amavisd
Выключение DKIM в Amavis
Среди популярных программ для подписания и проверки DKIM на Linux выделяются OpenDKIM и Amavis. Я отдам предпочтение OpenDKIM, поскольку он более совместим с OpenDMARC. Поэтому я не буду углубляться в процесс подписания электронных писем с помощью DKIM в Amavis.
По умолчанию в Amavis активированы подписка и проверка DKIM. Если на вашем почтовом сервере работает OpenDKIM, вы можете отключить функцию DKIM в Amavis.
sudo nano /etc/amavisd/amavisd.conf
Найдите следующие две строки и замените оба 1 на 0, чтобы Amavis прекратил проверку DKIM-подписей для входящих писем и не ставил DKIM-подпись на исходящие сообщения.
$enable_dkim_verification = 1; # включить проверку подписей DKIM $enable_dkim_signing = 1; # загрузить код подписи DKIM, ключи определены dkim_key
Сохраните изменения и закройте документ. После этого перезапустите Amavis.
sudo systemctl restart amavisd
При обработке входящих писем Postfix будет обращаться к OpenDKIM через интерфейс sendmail milter для проверки DKIM-подписей, после чего передаст письмо в Amavis для антивирусной проверки. Для исходящих писем Postfix вызовет OpenDKIM для подписи, а затем направит их в Amavis для проверки на наличие вирусов.
Оптимизация работы Amavis
По умолчанию Amavis активирует два процесса. Если в почтовом журнале (/var/log/maillog) появляются указанные строки, это свидетельствует о том, что 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/amavisd/amavisd.conf
Найдите строку, которую нужно изменить. Замените 2 на 4, чтобы Amavis начал 4 процесса. Если у вас 10 ядер процессора, можно изменить 4 на 10.
$max_servers = 2; # количество предзапущенных дочерних процессов (2..30 - обычно), - m
Сохраните изменения и закройте файл. После этого внесите правки в файл конфигурации Postfix master.
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 amavisd postfix
Теперь выполните следующую команду. Вы должны заметить, что в данный момент активны 4 процесса Amavis.
sudo amavisd-nanny

sudo amavisd-nanny
.» width=»727″ height=»161″ />
Нажмите сочетание клавиш Ctrl+C, чтобы прервать работу amavisd-nanny.
Исключение из процесса проверки на вирусы для ваших информационных рассылок
Если вы отправляете информационные бюллетени с помощью своего почтового сервера и используете Amavis и ClamAV, то проверка вирусов может значительно нагрузить процессор и оперативную память, что в итоге приведет к снижению отзывчивости вашего сервера. Вы можете обойти проверку вирусов для ваших бюллетеней, воспользовавшись описанным ниже способом.
Измените файл конфигурации master для 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. Данная настройка предназначена для клиентских соединений с другого сервера. Параметр content_filter также будет установлен в значение none.
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-хост с необходимой аутентификацией. Надеюсь, этот урок оказался для вас полезным в процессе настройки Amavis и ClamAV на почтовом сервере CentOS 8/RHEL 8.

