Настройка amavisd-new

Homepage: amavisd-new

# aptitude install amavisd-new

Документация расположена в директории /usr/share/doc/amavisd-new/

Рассматривается интеграция Amavisd-new, Spamassassin и ClamAV с транспортным почтовым агентом (MTA) Postfix. Postfix может также проверять легальность почты с помощью передачи ее внешним фильтрам содержания.

Отладка amavisd-new

  • Запуск amavisd-new в режиме отладки от непривилегированного пользователя
    # su - amavis
    $ /etc/init.d/amavis debug

    Установим недостающие библиотеки и утилиты

    # aptitude install bzip2 lzop p7zip unrar-free arj arc nomarch zoo ripole cabextract zip
  • Amavis по умолчанию работает на локальном порту 10024. Воспользуемся Примеры использования telnet для проверки ESMTP
    # telnet localhost 10024
    Trying ::1...
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    220 [127.0.0.1] ESMTP amavisd-new service ready
    EHLO mail.example.com
    250-[127.0.0.1]
    250-VRFY
    250-PIPELINING
    250-SIZE
    250-ENHANCEDSTATUSCODES
    250-8BITMIME
    250-DSN
    250 XFORWARD NAME ADDR PORT PROTO HELO IDENT SOURCE
    quit
    221 2.0.0 [127.0.0.1] amavisd-new closing transmission channel
    Connection closed by foreign host.

    Для проверки работоспособности LMTP вместо команды EHLO, в примере выше, используйте LHLO.

amavisd-new и ClamAV

Подключение ClamAV к mavisd-new. ClamAV Свободный Антивирус должен быть установлен.

  • Для того чтобы amavis загрузил поддержку антивирусника, нужно раскомментировать строки в файле /etc/amavis/conf.d/15-content_filter_mode:
    # Default antivirus checking mode
    # Please note, that anti-virus checking is DISABLED by
    # default.
    # If You wish to enable it, please uncomment the following lines:
    
    
    @bypass_virus_checks_maps = (
       \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
  • Добавьте пользователя clamav в группу amavis, чтобы Amavisd-new имел соответствующие права доступа для сканирования файлов:
    sudo adduser clamav amavis
    sudo adduser amavis clamav

Настройка amavisd-new 50-user

Все дополнительные настройки лучше делать в файле 50-user.

  • Если сетевое имя сервера отличается от MX записи домена, вам может потребоваться установить вручную опцию $myhostname. Также, если сервер принимает почту для нескольких доменов, опцию @local_domains_acl потребуется изменить. Отредактируйте файл /etc/amavis/conf.d/50-user:
    $myhostname = 'mail.example.com';
    @local_domains_acl = ( "example.com", "example.org" );

    Полный файл

    50-user
    use strict;
     
    #
    # Place your configuration directives here.  They will override those in
    # earlier files.
    #
    # See /usr/share/doc/amavisd-new/ for documentation and examples of
    # the directives you can use in this file
    #
     
    $myhostname = 'mail.example.com';
    @local_domains_acl = ( "example.com", "example.org" );
    $virus_admin = 'virusalert@example.com';
     
    #------------ Do not modify anything below this line -------------
    1;  # ensure a defined return

    Для применения изменений amavis должен быть перегружен

    # service amavis restart

Интеграции amavisd-new и Postfix

До этого момента amavisd-new и Настройка почтового сервера Postfix работали независимо, для их интеграции нужно выполнить три пункта:

  1. Создание транспорта для отправка писем от Postfix на обработку amavisd
  2. Настройка транспорта.
  3. Настройка пути возврата сообщений. Отфильтрованная почта должна какким-то образом вернуться в очередь Potsfix без повторного сканирования, поэтому необходим отдельный экземпляр smtpd, не использующий content_filter.
  • Создание транспорта main.cf:
    # sudo postconf -e "content_filter = amavis-new:[127.0.0.1]:10024"
  • Определение транспорта master.cf. Имя транспорат должно совпадать с именем в content_filter, то есть в нашем случае amavis-new:
    amavis-new unix -      -       n     -       4         smtp
     -o smtp_data_done_timeout=1200
     -o smtp_send_xforward_command=yes
     -o smtp_tls_note_starttls_offer=no
     -o disable_dns_lookups=yes
     -o max_use=80
  • Настройка пути возврата сообщений. В master.cf добавим строки:
    127.0.0.1:10025 inet n  -       n     -       -  smtpd
     -o content_filter=
     -o local_recipient_maps=
     -o relay_recipient_maps=
     -o smtpd_restriction_classes=
     -o smtpd_delay_reject=no
    # -o smtpd_client_restrictions=
     -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 mynetworks=127.0.0.0/8
     -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_milters

    Из всех параметров абсолютно необходим пустой параметр content_filter. Эта настройка перекрывает параметр content_filter в файле main.cf. Остальные параметры, также подменяют соответствующие параметры main.cf, включая параметры для отмены ограничений.

  • Добавьте две строки непосредственно после транспортного сервиса "pickup". Это предотвратит от попадания в спам сообщений, созданных в качестве отчетов о спаме.
    pickup    unix  n       -       -       60      1       pickup
     -o content_filter=
     -o receive_override_options=no_header_body_checks

Логирование amavisd-new

  • Настройка логирования демона amavisd-new:
    # nano /etc/amavis/conf.d/20-debian_defaults
    ...
    $log_recip_templ = undef;    # disable by-recipient level-0 log entries
    $DO_SYSLOG = 1;              # log via syslogd (preferred)
    $syslog_ident = 'amavis';    # syslog ident tag, prepended to all messages
    $syslog_facility = 'mail';
    $syslog_priority = 'debug';  # switch to info to drop debug output, etc
    ...

    Просмотр лога amavisd-new:

    # tail -F /var/log/syslog | grep amavis

Карантин amavisd-new

  • Параметры настройки карантина.
    $QUARANTINEDIR  = undef; # отключаем использование каратина
     
    # для частичного отключения карантина
    # используйте следующие переменные:
    # $clean_quarantine_method, $virus_quarantine_to, $banned_quarantine_to,
    # $bad_header_quarantine_to, $spam_quarantine_to,
    # 
    # пример: $bad_header_quarantine_to = 'undef';
  • Периодическая очистки карантина при помощи cron. Удаление из карантина файлов старше 40 дней.
    cron_mailserver
    # Look for and purge files older 40 days every 5 hours
    # 20 */5 * * * root find /var/lib/amavis/virusmails/* -mtime +40 | xargs rm &> /dev/null
    20 */5 * * * root find /var/lib/amavis/virusmails/* -mtime +40 -delete &> /dev/null
PQ VPS сервера в 28+ странах.