Amavis что это
Перейти к содержимому

Amavis что это

  • автор:

Настройка 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 работали независимо, для их интеграции нужно выполнить три пункта:

Создание транспорта для отправка писем от Postfix на обработку amavisd
Настройка транспорта.

Настройка пути возврата сообщений. Отфильтрованная почта должна какким-то образом вернуться в очередь 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

Добавляем проверку писем на вирусы и спам в Postfix

В данной статье мы расскажем о том, как добавить к почтовой системе Postfix средства проверки писем с вложенными файлами/архивами на наличие вирусов и спама. Для этих целей мы избрали антивируc ClamAV в связке со спамовым фильтром SpamAssassin. Вместе с тем будут рассмотрены и методы, позволяющие организовать фильтрацию спама.

Аренда выделенного сервера

Используйте готовые решения, чтобы быстро подобрать оптимальный для себя вариант аренды сервера

  • Intel® Xeon® E3-1230 v2, 3,3 GHz/4core
    3.3 , 4 ядра
  • 8Gb DDR3
  • 2 x SSD: 480Gb, Ent
  • 2 x SATA3: 1 TB

Недорогой, выделенный сервер, для задач средней сложности.

  • Intel® Xeon® E3-1270 v2, 3,5 GHz/4core
    3.5 , 4 ядра
  • 32Gb DDR3
  • 2 x SSD: 480Gb, Ent
  • 2 x SATA3: 1 TB

Хорошее решение, для задач средней ложности.
Любой выбранный сервер, всегда можно улучшить в процессе работы, если вы поймете что вам не достаточно производительности.

  • 2 x Intel® Xeon® E5-2667, 3,3 GHz/HT32core
    3.3 , 16 ядер
  • 32Gb DDR3
  • 2 x SSD: 480Gb, Ent
  • 2 x SATA3: 2 TB

Аренда сервера для удаленного доступа и 1С.
Позволит экономить и безопасно работать на арендованном сервере, через удаленный рабочий стол и Веб браузер.

Несколько слов об используемых программных продуктах

Для начала пробежимся по тому, что представляет собой каждый, из названных выше компонентов:

Postfix представляет собой достаточно популярный почтовый агент (Mail Transfer Agent, MTA), который позволяет эффективно пересылать письма адресатам.

SpamAssasin – высокоэффективный почтовый фильтр, который предназначен для борьбы со спамом.

ClamAV – распространенное антивирусное opensource-ПО.

Amavisd-new — надежный и эффективный интерфейс между фильтрами содержимого и почтовым агентов, написанный на языке Perl. Взаимодействует данное решение с MTA с использованием ПО-посредника через LMTp и SMTP.

Установка необходимых приложений

Для установки нужного нам ПО прописываем в терминале следующее:

sudо аpt-gеt instаll аmavisd-nеw spаmassassin clаmav-dаеmоn

Для того чтобы улучшить функцию распознавания спама в различном формате можем прописать:

sudо аpt-gеt instаll libnеt-dns-pеrl libmаil-spf-quеry-pеrl pyzоr razоr

Если необходима проверка на спам и вирусы в архивах потребуется установка следующих пакетов:

sudо аpt-get instаll arj bzip2 cаbextract cpiо filе gziр lhа nоmаrсh pаx rаr unrаr unziр unzоо ziр zоо

Настройка

ClаmAV

Для начала настроим ClamAV. Нам необходимо обеспечить его взаимодействие с Amavisd, для чего мы поместим эти два решения в соответствующие группы:

sudо аdduser аmаvis clаmаv

sudo adduser clamav amavis

После этого в обязательном порядке потребуется обновление антивирусных баз и бинарных файлов:

sudо frеshclаm

Spаmassassin

Переходим к настройке Spamassassin. В первую очередь нам понадобится обеспечить возможность обновить БД в автоматическом режиме. Для этого редактируем файл конфига /еtc/defаult/spаmassassin.

Правим два параметра:

После этого перезапускаем Spamassassin:

sudо /еtc/init.d/spаmassassin rеstart

Amаvis-nеw

Теперь о настройке Amavisd-new. Для начала включаем проверку писем на спам и вирусы. Для этого правим файл конфигурации /еtc/amаvis/conf.d/15-cоntent_filtеr_mоdе.

Здесь мы раскомментируем несколько параметров:

@bypаss_spаm_chеcks_mаps = ( \%bypаss_spаm_chеcks, \@bypаss_spаm_chеcks_аcl, \$bypаss_spаm_chеcks_rе);

@bypаss_virus_chеcks_mаps = ( \%bypаss_virus_chеcks, \@bypаss_virus_chеcks_аcl, \$bypаss_virus_chеcks_rе);

Но это еще не все – для того чтобы письма, предназначенные для локального домена, обрабатывались правильно, необходимо добавить в конец конфиг-файла /еtс/аmаvis/cоnf.d/21-ubuntu_dеfаults следующий параметр:

@lоcal_domаins_аcl = (‘.’);

Теперь можно перезапустить Amavisd-new:

sudо /еtc/init.d/amаvis restаrt

Pаstfix

Для того чтобы «прикрутить» Amavisd, который будет обрабатывать электронные письма, к Postfix, необходимо использовать его как контент-фильтр. Amavisd-new запускается в рамках петлевого интерфейса с ожиданием подключения на порт 10024. Чтобы это организовать добавляем следующий параметр в файл конфига:

cаntent_filter = smtp-аmavis:[127.0.0.1]:10024

Это позволит postfix отправлять электронные письма на проверку в Amavisd-new посредством протокола smtp в отношении спама и вирусов, после чего принимать их обратно, используя тот же самый протокол проверки. С этой целью нам потребуется произвести настройку дополнительного сервера и smtp-клиента. Сделать это необходимо в файле конфига /etc/postfix/master.cf, в конце которого мы добавляем следующие параметры:

smtp-аmavis unix — — — — 2 smtр

-o smtр_dаta_dоnе_timеоut=1200

-о smtр_sеnd_xforwаrd_cоmmand=yеs

-о disаble_dns_lооkups=yеs

-о mаx_usе=20

127.0.0.1:10025 inеt n — — — — smtрd

-о cоntent_filtеr=

-о lоcal_rеcipient_mарs=

-о rеlay_rеcipient_mаps=

-о smtрd_rеstriсtiоn_clаssеs=

-о smtpd_dеlay_rеject=nо

-о smtрd_cliеnt_rеstrictions=pеrmit_mynеtworks,rеject

-о smtрd_hеlо_rеstrictions=

-о smtрd_sеnder_rеstrictions=

-о smtрd_recipient_restrictions=permit_mynetworks,reject

-о smtрd_dаtа_rеstrictions=rеjесt_unauth_pipеlining

-о smtрd_еnd_оf_dаtа_rеstrictions=

-о mynetwоrks=127.0.0.0/8

-о smtрd_еrrоr_slееp_timе=0

-о smtрd_sоft_еrrоr_limit=1001

-о smtрd_hаrd_еrrоr_limit=1000

-о smtрd_cliеnt_connеction_cоunt_limit=0

-о smtрd_cliеnt_connеction_rаtе_limit=0

-о recеive_оverride_оptions=nо_hеаder_bоdy_chеcks,nо_unknоwn_rеcipiеnt_chеcks

После pickup-транспорта необходимо добавить следующие параметры:

-о contеnt_filtеr=

-о rеceive_оverride_оptions=nо_heаder_bоdy_chеcks

Прописав необходимые параметры, можем перезапустить postfix:

sudо /еtc/init.d/pоstfiх relоаd

Проверка

Необходимо убедиться в том, что сервис Amavisd работает, как надо, для чего мы выполним подключение telnet к нему:

telnеt locаlhоst 10024 Trying 127.0.0.1. Cоnnected tо localhоst. Escаpe charаcter is ‘^]’. 220 [127.0.0.1] ЕSMTP amаvisd-nеw

Если система выдаст сообщение «ЕSMTP аmavisd-nеw sеrvice rеаdy», значит все настроено верно и работает, как полагается.

Режимы почтовой фильтрации

Возвращаемся к файлу конфига /еtc/аmаvis/cоnf.d/21-ubuntu_defaults, содержащему параметры режимов фильтрации писем с вирусами и спамом. Здесь мы можем указать нужные нам параметры:

$finаl_spаm_dеstiny — запуск режима фильтрации спама;

$final_virus_destiny — запуск режима вирусной фильтрации;

Для управления фильтрацией можно использовать следующие режимы:

D_DISCАRD – письмо отбрасывается;

D_REJЕCT – отбрасываются письма с вынесением предупреждения b[ отправителю;

D_BОUNCE – отбрасываются письма с последующим помещением в карантин;

D_PАSS – отправляется письмо получателю с пометкой в теме.

$bаnned_filеname_rе = new_RЕ(…)

### BLОCK THE FОLLОWING, ЕXCEPT WITHIN АRHIVES:

# [ qr’^\.(zip|rаr|аrc|аrj|zоо)$’=> 0 ], # аllоw аny within thеsе аrchivеs — здесь мы закомментируем параметр блокировки с возможностью проверки исполняемых файлов в архивах форматов zip, rar, arc, arj и zoo.

Настройка связки Postfix + amavisd-new + SpamAssassin

Пришла пора настроить какую-то спам-систему на своем сервере. Выбор пал на SpamAssasin. Что ж, приступим.

Установка и настройка amavisd-new

# cd /usr/ports/security/amavisd-new # sudo make install clean

Тут просто огромное количество опций, которые можно выбрать перед установкой. Я особо с ними не разбирался, по этому оставил все как есть.
При установке, данный порт сразу же ставит и порт p5-Mail-SpamAssassin и Razor.

После установки, добавляем в rc.conf две строчки:

spamd_enable="YES" amavisd_enable="YES"

После установки, в /usr/local/etc/ у нас появилось аж шесть amavisd*. Нам нужен amavisd.conf. Правми его:

use strict; #СЕКЦИИ: # Секция I - Настройки демона и настройки MTA # Секция II - Специфичные настройки MTA # Секция III - Логи # Секция IV - Уведомления/DSN, доставка, карантин # Секция V - Различные списки, включая белые и черные. # Секция VI - Лимиты ресурсов # Секция VII - Внешние программы, модули и антивирусы # Секция VIII - Отладка # Секция IX - Политики (динамическая смена политики) # # Секция I - Настройки демона и настройки MTA # # Устанавливаем переменную MYHOME # Она не используется программой, а нужна лишь другим переменным ниже $MYHOME = '/var/amavis'; # Переменная $mydomain так же никогда не используется программой напрямую # Нужна другим переменным ниже $mydomain = 'vcore.ru'; #$myhostname = 'host.vcore.ru'; # Указываем от какого имени и группы будет запускаться демон $daemon_user = 'vscan'; $daemon_group = 'vscan'; # Рабочая директория демона и временная директория, # куда распаковывается почта $TEMPBASE = "$MYHOME/tmp"; # Директория, где хранится база данных $db_home = "$MYHOME/db"; # Директория, где будет работать SpamAssassin $helpers_home = "$MYHOME/var"; # Переменная, которая указывает, где хранятся временные файлы # SA, некоторых фильтров и т.д. $ENV = $TEMPBASE; # Используем BerkeleyDB/libdb (SNMP и nanny) $enable_db = 1; # Если $enable_db=1, то используем libdb-based кэш $enable_global_cache = 1; # Настройки MTA # Настройки, которые подходят для Postfix # Куда направлять проверенную почту $forward_method = 'smtp:[fusion_builder_container hundred_percent="yes" overflow="visible"][fusion_builder_row][fusion_builder_column type="1_1" background_position="left top" background_color="" border_size="" border_color="" border_style="solid" spacing="yes" background_image="" background_repeat="no-repeat" padding="" margin_top="0px" margin_bottom="0px" animation_type="" animation_speed="0.3" animation_direction="left" hide_on_mobile="no" center_content="no" min_height="none"][127.0.0.1]:10025'; # Куда направлять уведомления $notify_method = $forward_method; # Настройки Net::Server # $max_servers должно соответствовать ширине канала вашего MTA # Например, поле 'Max procs' в файле master.cf должно быть равно 20-ти: # smtpd_amavis unix - - n - 2 smtp # # Количество процессов $max_servers = 20; # Завершать процесс, если он не завершил свою обработку за N секунд $child_timeout = 20*60; # Это быстрый путь, чтобы полностью отключить некоторые участки кода, # которые нам не нужны (они даже не будут включены в код). # Мы выключаем антивирус, т.к. антивирусной проверкой занимается ClamAV. # Так же в самом низу удалим разделы @av_scanners и @av_scanners_backup @bypass_virus_checks_maps = (1); # Список с локальными доменами # @local_domains_map отвечает за то, чтобы определять является ли # отправитель локальным или нет, т.е., другими словами, является ли # сообщение входящим или исходящим. # Эти значения на очень многое влияют. Смотрите файл README.lookups. @local_domains_maps = ( [".$mydomain"] ); # # Секция II - Специфичные настройки MTA # # Настройки протокола клиента Amavis-Client $unix_socketname = "$MYHOME/amavisd.sock"; # На какой порт подключается SMTP-сервер Postfix $inet_socket_port = 10024; # Кому разрешено подключаться к Amavisd # Если MTA находится на этом же серваке, то используйте либо одну # опцию, либо другую (можно сразу же две) $inet_socket_bind = '127.0.0.1'; @inet_acl = qw( 127.0.0.1 ); # $mynetworks содержит список IP-адресов SMTP-клиентов, которые # принадлежат внутренней сети (т.е. почта идет от них). @mynetworks = qw( 127.0.0.0/8 192.168.0.0/16 ); # # Секция III - Логи # # Если равно 1, то используем syslog, если 0 - файл # Файл указывается в переменной $LOGFILE $DO_SYSLOG = 1; # Куда сохранять логи (mail, daemon, user, local0, . local7) $syslog_facility = 'mail'; # Уровень логов (emerg, alert, crit, err, warning, notice, info, debug) $syslog_priority = 'crit'; # Файл, куда пишем логи, если не используем syslog $LOGFILE = "$MYHOME/amavis.log"; # Замечание: уровени логов четко не регулируются. Этот список, чтобы иметь # хоть примерное представление об уровне логов. # 0: сообщения о запуске/остановке/сбоях, найденных вирусах # 1: аргументы, передаваемые от клиентов # 2: вывод сообщение от антивируса, тайминги # 3: сервер, клиент # 4: разбор сообщения # 5: отладочная информация $log_level = 0; # Отключает by-message записи в логах с уровнем 0 #$log_templ = undef; # Отключает by-recipient записи в логах с уровнем 0 $log_recip_templ = undef; # # Секция IV - Уведомления/DSN, доставка, карантин # # В какую кодировку перекодировать тело письма и заголовок $hdr_encoding = 'windows-1251'; $bdy_encoding = 'windows-1251'; # Указываем что делать с зараженными или спам письмами # Теперь быстренько разберемся что делает каждое значение: # # D_PASS почта дойдет до получателя, независимо от того какой она является # # D_DISCARD почта не дойдет до получателя, получатель не будет об этом уведомлен. # Иными словами, мы теряем письма. Для правильно настроенного почтовика # это нежелательно, но иногда необходимо. # # D_BOUNCE почта не будет доставлена получателю, уведомление о невозможности # доставить письмо будет выслано отправителю (уведомление вышлет amavisd) # Уведомление не вышлется, если название вируса совпадает со значением # $viruses_that_fake_sender_maps, или сообщениям из списка рассылок # (bult|list|junk), или для писем с уровнем спама, превышающим значение, # указанное в $sa_dsn_cutoff_level # # D_REJECT почта не будет доставлена получателю, уведомление о невозможности # доставить письмо должно будет выслаться SMTP или MTA, если этого # не произойдет, то уведомление вышлет amavisd (как в примере выше). # Не использовать с Postfix. $final_banned_destiny = D_BOUNCE; $final_spam_destiny = D_BOUNCE; $final_bad_header_destiny = D_PASS; # Чтобы отследить статус, присваиваемым письмам, шлем уведомление админу $dsn_bcc = '[email protected]'; # Куда отсылать уведомление о спаме $spam_admin = "admin@$mydomain"; # От кого шлем уведомления (может быть пустым) $mailfrom_notify_admin = "virusalert@$mydomain"; $mailfrom_notify_recip = "virusalert@$mydomain"; $mailfrom_notify_spamadmin = "spam.police@$mydomain"; # Указываем заголовок письма # Согласно rfc2822, не может быть пустым $hdrfrom_notify_sender = ""Система фильтрации спама на $myhostname" "; # Если не указано, то указывает адрес отправителя $mailfrom_to_quarantine = ''; # Куда кладем зараженные письма $QUARANTINEDIR = '/var/virusmails'; # Отсылаем копию каждого письма сюда #$archive_quarantine_method = $notify_method; #$archive_quarantine_to_maps = ( '[email protected]' ); # Эти опции позволяют поместить письмо в MIME-контейнер формата # 'Content-type: multipart/mixed', где первая часть - это text/plain # с небольшим объяснением, а вторая часть - это оригинальное письмо $defang_virus = 1; $defang_banned = 1; # Используется для плохих заголовков $defang_by_ccat = 1; # NUL или CR символы в заголовке $defang_by_ccat = 1; # заголовок больше чем 998 символов $defang_by_ccat = 1; # ошибка синтаксиса заголовка # Не доверять следующим файлам или распаковщикам, которые могут их распаковать # Предоставить антивирусу оригинал вместе с распакованным файлом @keep_decoded_original_maps = (new_RE( qr'^MAIL-UNDECIPHERABLE$', # перепроверить всю почту, если она содержит нерасшифровымае части qr'^(ASCII(?! cpio)|text|uuencoded|xxencoded|binhex)'i, )); # Проверяем почту на содержание запрещенных форматов MIME # Если находим, то запрещаем целое письмо $banned_filename_re = new_RE( ### БЛОКИРУЕТСЯ ВЕЗДЕ qr'^.(exe-ms|dll)$', # запрещенные типы файлов, рудиментарный ### БЛОКИРОВАТЬ СЛЕДУЮЩИЕ ФАЙЛЫ, КРОМЕ ТЕХ, КОТОРЫЕ СОДЕРЖАТСЯ В UNIX АРХИВАХ: [ qr'^.(rpm|cpio|tar)$' => 0 ], # разрешать любые в Unix-оподобных архивах qr'..(pif|scr)$'i, # запрещенные расширения ### БЛОКИРОВАТЬ СЛЕДУЮЩИЕ ФАЙЛЫ, КРОМЕ ТЕХ, КОТОРЫЕ СОДЕРЖАТСЯ В АРХИВАХ qr'^application/x-msdownload$'i, # блокируем эти форматы MIME qr'^application/x-msdos-program$'i, qr'^application/hta$'i, # блокируем некоторые двойные расширения в файлах qr'.[^./]*[A-Za-z][^./]*.s*(exe|vbs|pif|scr|bat|cmd|com|cpl|dll)[.s]*$'i, qr'..(exe|vbs|pif|scr|cpl)$'i, # запрещенные расширения - основные ); # # Секция V - Различные списки, включая белые и черные # # Отключаем поддержку белых и черных списков в MySQL $sql_select_white_black_list = undef; # Что это так делает, я так толком и не понял. Судя по всему, это приставки, которые # добавляются к файлам, и письмам @addr_extension_virus_maps = ('virus'); @addr_extension_banned_maps = ('banned'); @addr_extension_spam_maps = ('spam'); @addr_extension_bad_header_maps = ('badh'); # Вместо того, чтобы тупо использовать белые и черные списки, мы используем систему баллов # Чем больше очков, тем больше вероятность попасть в черный список @score_sender_maps = (< # список хешей получателей; # все результаты суммируются # ## таблицы получателей (ПОМЕТКА: положительные: черный список, отрицательные: белый) # '[email protected]' => [[email protected]' => 10.0>], # '[email protected]' => [ -3.0>], # '[email protected]' => [[email protected]' => -7.0, # '.cleargreen.com' => -5.0>], ## глобальные опции для отправителей (символ '.' соответствует любому отправителю) '.' => [ # первый отправитель, соответствующий списку, определяет количество очков new_RE( # таблица regexp-type, содержащая лишь спамовые выражения [qr'^(bulkmail|offers|cheapbenefits|earnmoney|foryou)@'i => 5.0], [qr'^(greatcasino|investments|lose_weight_today|market.alert)@'i=> 5.0], [qr'^(money2you|MyGreenCard|new.tld.registry|opt-out|opt-in)@'i=> 5.0], [qr'^(optin|saveonlsmoking2002k|specialoffer|specialoffers)@'i => 5.0], [qr'^(stockalert|stopsnoring|wantsome|workathome|yesitsfree)@'i => 5.0], [qr'^(your_friend|greatoffers)@'i => 5.0], [qr'^(inkjetplanet|marketopt|MakeMoney)d*@'i => 5.0], ), < # массив из адресов '[email protected]' => -3.0, '[email protected]' => -3.0, '[email protected]' => -3.0, '[email protected]' => -3.0, 'securityfocus.com' => -3.0, '[email protected]' => -3.0, 'security-a[email protected]' => -3.0, '[email protected]' => -3.0, '[email protected]'=> -3.0, '[email protected]' => -3.0, 'spamassassin.apache.org' => -3.0, '[email protected]' => -3.0, '[email protected]' => -3.0, '[email protected]' => -3.0, '[email protected]' => -3.0, '[email protected]' => -3.0, '[email protected]' => -3.0, '[email protected]' => -3.0, '[email protected]' => -3.0, '[email protected]' => -3.0, '[email protected]' => -3.0, '[email protected]' => -3.0, '[email protected]' => -3.0, '[email protected]' => -3.0, '[email protected]' => -3.0, '[email protected]' => -5.0, '[email protected]' => -3.0, 'returns.groups.yahoo.com' => -3.0, '[email protected]' => -3.0, lc('[email protected]') => -3.0, lc('[email protected]') => -5.0, # вероятно-плохие отправители (положительная оценка) '[email protected]' => 3.0, '.example.net' => 1.0, >, ], # конец глобального списка >); # Считываем файлы, с белыми и черными списками read_hash(%whitelist_sender, '/var/amavis/whitelist'); read_hash(%blacklist_sender, '/var/amavis/blacklist'); read_hash(%spam_lovers, '/var/amavis/spam_lovers'); # # Секция VI - Лимиты ресурсов # # Количество уровней для распаковки архивов $MAXLEVELS = 14; # Количество файлов, которые можно извлечь из архива $MAXFILES = 1500; # Чтобы защититься от слишком больших писем, мы ставим ограничения # на общий размер всех распакованных частей письма (в байтах) $MIN_EXPANSION_QUOTA = 100*1024; $MAX_EXPANSION_QUOTA = 300*1024*1024; $MIN_EXPANSION_FACTOR = 5; $MAX_EXPANSION_FACTOR = 500; # # Секция VII - Внешние программы, модули и антивирусы # # Указываем пути до нужных нам программ $path = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/usr/bin:/bin'; # Можно так же указать саму программу # Например, утилита file(1) $file = 'file'; @decoders = ( ['mail', &do_mime_decode], ['asc', &do_ascii], ['uue', &do_ascii], ['hqx', &do_ascii], ['ync', &do_ascii], ['F', &do_uncompress, ['unfreeze','freeze -d','melt','fcat'] ], ['Z', &do_uncompress, ['uncompress','gzip -d','zcat'] ], ['gz', &do_uncompress, 'gzip -d'], ['gz', &do_gunzip], ['bz2', &do_uncompress, 'bzip2 -d'], ['lzo', &do_uncompress, 'lzop -d'], ['rpm', &do_uncompress, ['rpm2cpio.pl','rpm2cpio'] ], ['cpio', &do_pax_cpio, ['pax','gcpio','cpio'] ], ['tar', &do_pax_cpio, ['pax','gcpio','cpio'] ], ['deb', &do_ar, 'ar'], ['zip', &do_unzip], ['7z', &do_7zip, ['7zr','7za','7z'] ], ['rar', &do_unrar, ['rar','unrar'] ], ['arj', &do_unarj, ['arj','unarj'] ], ['arc', &do_arc, ['nomarch','arc'] ], ['zoo', &do_zoo, ['zoo','unzoo'] ], ['lha', &do_lha, 'lha'], ['cab', &do_cabextract, 'cabextract'], ['tnef', &do_tnef_ext, 'tnef'], ['tnef', &do_tnef], ['exe', &do_executable, ['rar','unrar'], 'lha', ['arj','unarj'] ], ); # Настройки SpamAssassin # Указываем SA, что можно выполнять онлайн тесты $sa_local_tests_only = 0; # Не передавать SA письма с размеров больше 64k $sa_mail_body_size_limit = 64*1024; # Добавляем в заголовок, что это спам, при количестве баллов больше или равном 2 $sa_tag_level_deflt = 2.0; # Добавляем в заголовок 'spam detected' $sa_tag2_level_deflt = 6.31; # Отвергаем спам при количестве баллов больше или равном 6.9 $sa_kill_level_deflt = 6.9; # Количество очков, при котором письмо просто выкидывается $sa_dsn_cutoff_level = 9; # Если ранее отправитель получал от получателя письмо, то с оценки # списывается N количество баллов $penpals_bonus_score = 8; # Не проверять, если письмо классифицирована как супер-мега-спам $penpals_threshold_high = $sa_kill_level_deflt; # Что добавлять к теме сообщения, когда количество баллов привышает уровень tag2 $sa_spam_subject_tag = '***СПАМ*** '; # # Секция VIII - Отладка # # Включить отладку SA (вывод в STDERR) $sa_debug = '1,all'; # # Секция IX - Политики (динамическая смена политики) # $policy_bank = < # почта, отправленная из @mynetworks originating =>1, # равно 1 по умолчанию, но на всякий случай, установим в 1 os_fingerprint_method => undef, # не опрашивать p0f для клиентов из нашей сети >; # MTA должен сам будет перенаправить всю почту от авторизовнных пользователей или из # внутренней сети на выделенный TCP порт (например, 10026) для фильтрации $interface_policy = 'ORIGINATING'; $policy_bank = < # почта, которая была отправлена нашими пользователями originating =>1, # указываем, что почта была получена от нашего smtp-клиента allow_disclaimers => 1, # включаем поддержку отказов; если поддерживается, то # сообщаем админу о спаме исходящем от нашей сети virus_admin_maps => ["admin@$mydomain"], spam_admin_maps => ["admin@$mydomain"], warnbadhsender => 1, # перенаправляем на smtp сервис, обеспечивающий подписку DKIM forward_method => 'smtp:[127.0.0.1]:10027', # заставляем MTA конвертировать все в 7-бит smtpd_discard_ehlo_keywords => ['8BITMIME'], bypass_banned_checks_maps => [1], # разрешаем посылать файлы с любыми именами и расширениями terminate_dsn_on_notify_success => 0, # не убирать опцию NOTIFY=SUCCESS >; $interface_policy = 'AM.PDP-SOCK'; # Использовать с amavis-release через сокет или с amavis-milter.c, созданный Petr Rehor # (с amavis-milter.c из этого порта или старым amavis.c клиентом используйте 'AM.CL'): $policy_bank = < protocol =>'AM.PDP', auth_required_release => 0, # не требовать secret_id для amavisd-release >; 1; # insure a defined return

Так же удалим в этом файле два раздела @av_scanners и @av_scanners_backup (в самом конце). Антивирусной проверкой у нас занимается clamav.

Создадим следующие файл-списки: whitelist, blacklist и spam_lovers. Эти файлы будут содержать по одному адресу e-mail или имени домена на одной строчке (написанные маленькими буквами), тех получателей или отправителей, которых мы будем обрабатывать специально. Записи в фале-списке: blacklist автоматически воспринимаются как SPAM. Отправители в фал-списке: whitelist не проходят проверку на SPAM. Получатели в файл-списке: spam_lovers в основном те пользователи, которые не участвуют в системе блокировки спама:

# touch /var/amavis/blacklist # touch /var/amavis/whitelist # touch /var/amavis/spam_lovers

Вы можете добавить вашу учетную запись postmaster в файл-список: spam_lovers, т.к. в соответствии с RFC postmaster всегда должен принимать почту, направленную ему.

# echo [email protected] >> /var/amavis/spam_lovers

Настройка SpamAssasin

# Добавлять метку *****SPAM***** к заголовку спамовых писем rewrite_header Subject *****SPAM***** # Сохранять спам как MIME-вложение (message/rfc822) вместо того, # чтобы изменять оригинал сообщения (0: выкл, 2: использовать text/plain) report_safe 2 # Указываем какие подсети будут "доверенными", письма с которых не будут # считаться спамом trusted_networks 192.168.0. # Указываем оценку, при которой письма считаются спамом required_score 5.0 # Включаем Bayesian обучение системы use_bayes 1 # Указываем путь до базы bayes bayes_path /root/.spamassassin/bayes # SA будет автоматически добавлять сообщения, распознанные # как SPAM на 100% или на 100% как не SPAM сообщения, в # Baysian базу данных bayes_auto_learn 1 # Отключаем разные сетевые проверки skip_rbl_checks 0 # Указываем SA использовать Razor версии 2 use_razor2 1 # Указываем SA использовать DCC (Distributed Checksum Clearinghouse) use_dcc 1 # Указываем SA не использовать Pyzor (мы его и не ставили) use_pyzor 0 # Mail using languages used in these country codes will not be marked # as being possibly spam in a foreign language. # - english russian #ok_languages en ru # Mail using locales used in these country codes will not be marked # as being possibly spam in a foreign language. #ok_locales en ru

Настройка Razor

Что такое Razor? Razor — это достаточно большая антиспам-сеть. Чтобы начать ее использовать, нам надо зарегистрироваться в ней. Это делается двумя командами. Первая создает конфиг файл в папке /root/.razor, а вторая собственно регистрируется в сети.

Для работы Razor надо открыть два порта:
TCP 2703 — Исходящий трафик от MTA на Razor серверы
TCP 7 — Исходящий ping от MTA на Razor серверы

Настройка и установка DCC

# cd /usr/ports/mail/dcc-dccd # sudo make install clean

Добавляем запись в /etc/rc.conf:

dccifd_enable="YES"

Копируем файл /usr/local/dcc/dcc_conf.dist в /usr/local/dcc/dcc_conf. Если этого не сделать, то при старте dcc будет выскакивать сообщение:

/usr/local/etc/rc.d/dcc-start: WARNING: /usr/local/dcc/dcc_conf is not readable
DCCIFD_ENABLE=on

Чтобы SpamAssassin запускался без ошибок и не ругался:

[60175] info: config: failed to parse line, skipping, in "/usr/local/etc/mail/spamassassin/local.cf": use_dcc 1

надо в файл /usr/local/etc/mail/spamassassin/init.pre добавить строчку:

loadplugin Mail::SpamAssassin::Plugin::DCC

Если мы поднимаем локальный сервак с «серыми листами», то для работы необходимо открыть udp порт 6277. Мы этого не делаем. Чтобы убедиться в работоспособности, выполняем команду:

# cdcc 'info'

Вы должны увидеть что-то типа:

dcc1.dcc-servers.net,- RTT+1000 ms anon # 136.161.101.6,- dcc-servers.net ID 102 # 100% of 1 requests ok 239.65+1000 ms RTT 100 ms queue wait # *194.228.41.73,- CTc-dcc1 ID 1030 # 100% of 1 requests ok 157.75+1000 ms RTT 100 ms queue wait # 208.201.249.233,- sonic.net ID 1117 # 100% of 1 requests ok 296.68+1000 ms RTT 100 ms queue wait

Это значит, что есть связь с серваками. Но в конце, например, у меня была запись:

127.0.0.1,- RTT-1000 ms 32768 3055487221y2254 # 127.0.0.1,- # not answering

Мы не поднимали локальный сервак. Надо эту запись удалить. Сначала в файле /usr/local/dcc/map.txt.dist закомментируем строки с 127.0.0.1, потом выполним команду:

# cdcc 'load /usr/local/dcc/map.txt.dist'

Опрашиваем серваки снова. Облом. Наш сервак все еще опрашивается. Тогда просто удалим записи:

# cdcc "delete 127.0.0.1 Greylist" # cdcc "delete 127.0.0.1"

Все. Локальный сервак больше не опрашивается. Это хорошо.

Настраиваем Postfix

Суть всей этой цепочки такова. Postfix получает письмо, потом он отсылает его amavisd на порт 10024, amavisd делает все проверки, потом отсылает его обратно postfix на порт 10025. Чтобы такая цепочка заработала, надо отредактировать файл /usr/local/etc/postfix/master.cf. Добавляем туда следующие строчки:

amavisfeed unix - - n - 20 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -o disable_dns_lookups=yes -o max_use=20 127.0.0.1:10025 inet n - n - - smtpd -o content_filter= -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_data_restrictions=reject_unauth_pipelining -o smtpd_end_of_data_restrictions= -o smtpd_restriction_classes= -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 -o local_header_rewrite_clients=

А в /usr/local/etc/postfix/main.cf добавим:

content_filter=amavisfeed:[127.0.0.1]:10024

Linux, Internet технологии, программирование и администрирование 1C

На просторах интернета две извечных проблемы — спам и вирусы. Эти проблемы не обошли и почту. К счастью, бороться с обоими можно при помощи AMaViS (A Mail Virus Scaner). AMaViS — это своего рода интерфейс между Postfix, SpamAssasin (довольно распространенный и надежный спам-фильтр) и, опционально, антивирусом. AMaViS содержит спам-фильтр, но в нем нет встроенного антивируса. Т.е. нам необходимо установить таковой (что мы уже сделали в первом разделе этого мануала). Воспользуемся ClamAV`ом. Очень качественный и бесплатный антивирус с постоянным обновлением вирусных баз.

Конфигурационные файлы AMaViS лежат в /etc/amavis/conf.d. Итак, ClamAV у нас уже установлен и сконфигурирован по умолчанию, осталось только его включить:

#>mcedit /etc/amavis/conf.d/15-content_filter_mode

и раскомментируем строки, начинающиеся с:

@bypass_virus_checks_maps
@bypass_virus_checks_maps

Рассмотрим еще один конфиг /etc/amavis/conf.d/20-debian_defaults. Его непосредственно, лучше не править. Чтоб поправить его настройки — правильнее будет править /etc/amavis/conf.d/50-user и добавим в него:

$sa_spam_subject_tag = '***SPAM***';
$QUARANTINEDIR = '/var/vmail/spamvirusmails';
$spam_quarantine_method = 'local:spam-%b-%i-%n';
$spam_quarantine_to = 'spam-quarantine';
$final_spam_destiny = D_DISCARD;
$sa_tag_level_deflt = undef;
$spam_admin = "root\@$mydomain";
1; # ensure a defined return

Возможные параметры:

$sa_spam_subject_tag: если установлен этот параметр — к теме email`а, который AMaViS сочтет спамом, будет добавлена строка «***SPAM***», установленная в этом параметре. Если мы хотим оставить «оригинальную» тему письма, то необходимо оставить этот параметр в виде: «$sa_spam_subject_tag = undef». Служебная инфа о том, что AMaViS пометил письмо «как спам», для пользователя все равно останется в X-Spam-Status заголовке.

$sa_tag_level_deflt: параметр спам-уровня (число). В зависимости от установленного уровня: выше или ниже, в заголовок письма будет добавляться спам-заголовки (т.е., на сколько я понял, в заголовок письма добавятся заголовки о спам проверке, вне зависимости от того, будет ли письмо расценено как спам или нет). Для упрощения отладки, мы всегда будем добавлять эти заголовки, поэтому этот параметр установлен в самый низкий уровень, т.е. «undef».

$sa_tag2_level_deflt: этот параметр спам-уровня отвечает за чувствительность спам-фильтра к определению спама. Лучше оставить его по-умолчанию (или вообще не определять в конфиге), ибо при слишком низком уровне — может проскочить много спама, при слишком высоком уровне — как спам могут быть расценены совершенно безобидные сообщения.

$sa_kill_level_deflt: должен быть установлен в то же значение, что и $sa_tag2_level_deflt
$final_spam_destiny: параметр «судьбы» спама. По-умолчанию = D_BOUNCE (отбросить).

В нашем случае, спам будет помещаться в карантин, т.е. D_DISCARD. Если же установить его в D_PASS — письма проходить будут, и пусть пользователь сам принимает решение о том, что делать со спамом.

Даем AMaViS`у разрешение на писать в карантин:

#> chown amavis:amavis -R /var/vmail/spamvirusmails

Перестартуем AMaViS :

#> /etc/init.d/amavis restart 

Проверяем, чтоб AMaViS слушал 10024 порт :

#> netstat -nap | grep 10024 

Должно быть что то типа :

tcp 0 0 127.0.0.1:10024 0.0.0.0:* LISTEN 12345/amavisd

Если получили похожую строку — значит AMaViS запущен и ждет SMTP сессии. В противном случае — смотри логи (/var/log/mail.log)

Теперь, рассмотрим как это работает. Кто то отправляет нам мыло из инета. Postfix его получает через TCP порт 25 (SMTP). Если Postfix пропускает это сообщение — он форвардит его AMaViS`у на TCP порт 10024 (SMTP). Далее, если AMaViS`а устраивает содержимое письма, то форвардит мыло обратно Postfix`у на TCP порт 10025 (SMTP). И после всего этого Postfix уже отправляет мыло до конечного получателя.

Объясняем Postfix`у вышеуказанную модель и укажем еще один важный параметр «receive_override_option», назначение которого рассмотрим позже:

#>postconf -e content_filter=smtp-amavis:[127.0.0.1]:10024
#>postconf -e receive_override_options=no_address_mappings 

Также, необходимо объявить службу smtp-amavis в параметрах /etc/postfix/master.cf. Плюс, указать Postfix`у слушать 10025 порт, для получения писем от AMaViD:

smtp-amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
127.0.0.1:10025 inet 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=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-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
-o local_header_rewrite_clients=

Важно! В данном случае -o mynetworks=127.0.0.0/8 необходимо оставить именно в таком виде, а не указывать mynetworks как /etc/postfix/main.cf. Ибо связка Postfix — AMaViS крутятся на одном сервере и находятся в пределах одной подсети 127.0.0.0/8.

#> postfix reload 

Дадим некоторые пояснения. Сначала мы установили опцию receive_override_options в значение no_address_mapping, ее мы упоминали выше. Она отключает все сопоставления (mapping) адресов. Для чего это нужно?

Postfix принимает письмо. П равила редиректа (таблица forwardings в MySQL) из-за отключения сопоставления адресов не сработали (не подтверждены). Письмо пересылается в службу smtp-amavis, после чего опять возвращается на 127.0.0.1:10025 уже с кучей параметров. Один из этих параметров как раз опять receive_override_option, но теперь уже без значения no_address_mapping (т.е. теперь сопоставление адресов включено). И уже на этом этапе происходит обработка таблицы forwardings. Т.е. эта опция необходима, что бы не задваивать письма при форвардинге.

Внимание! receive_override_option = no_address_mapping фактически дает директиву Postfix отключить форвардинг. И если впоследствии мы решим отключить AMaViS, то нужно будет убрать и эту опцию.

Напомним, что пользователь «clamav» должен быть в группе «amavis», что бы эти службы могли общаться друг сдругом . Добавим его туда:

#>adduser clamav amavis
#>/etc/init.d/clamav-daemon restart 

Отключим спам проверку для нашей (внутри нашего домена) исходящей почты. Для этого в /et/amavis/conf.d/50-user перед «1;» добавим такие строки:

@lookup_sql_dsn = ( ['DBI:mysql:database=mail;host=127.0.0.1;port=3306',
'mail_admin',
'mailadminpass']);
$sql_select_policy = 'SELECT domain FROM domains WHERE CONCAT("@",domain) IN (%k)';

@lookup_sql_dsn определяет параметры доступа AMaViS кнашей базе данных mail в MySQL. А $sql_select_policy задает SQL запрос, который выполняется когда AMaViS определяет из какого домена идет отсылка и принадлежит ли полученный домен нашему. %k — набор строк, с которыми идет сопоставление. Т.е. полноценный SQL запрос будет выглядеть следующим образом:

SELECT domain FROM domains WHERE CONCAT("@",name)
IN ( 'john@example.com',
'john',
'@example.com',
'@.example.com',

Выглядит, конечно странно. Но в конечном итоге получим строку ‘@exemple.com’.

#>/etc/init.d/amavis restart 

Пробуем отослать мыло на john@exemple.com. Если просмотреть заголовки письма, то мы должны найти строки, добавленные AMaViS:

X-Virus-Scanned: Debian amavisd-new at mymailserver
X-Spam-Score: 0
X-Spam-Level:
X-Spam-Status: No, score=0 tagged_above=-9999 required=6.31 tests=[none]

На этом настройка завершена! Все входящие письма теперь будут проверяться на вирусы и спам. Выполним еще одну проверку. Пример спама есть в /usr/share/docs/spamassasin/exemples/sample-spam.txt. Отправим спам-сообщение на jhon@exemple.com:

#>sendmail john@example.com < /usr/share/doc/spamassassin/examples/sample-spam.txt

Смотрим в логи /var/log/mail.log, должны увидеть что AMaViS отработал:

amavis[13001]: (13001-02) Passed SPAM, -> , . 

Отлично! Письмо помечено как спам и отправлено Jhon`у. И, наконец, устанавливаем необходимые права:

#>chmod o= /etc/amavis/conf.d/50-user

Все! Теперь имеем полнофункциональный почтовый сервер!

Данный мануал является вольным переводом статьи Postfix+MySQL+Dovecot-POP/IMAP+Amavis howto on Debian Lenny by Christoph Haas, адаптированный под UBUNTU 10.04

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *