Фильтрация почты
Одной из больших проблем с электронной почтой является проблема массовой незатребованной почты (Unsolicited Bulk Email - UBE). Такие сообщения, более известные как СПАМ, могут к тому же содержать вирусы и другие виды вредоносных программ. В соответствии с некоторыми отчетами эти сообщения составляют подавляющую часть от всего трафика почтовых сообщений в интернете.
В этом разделе рассматривается интеграция Amavisd-new, Spamassassin и ClamAV с транспортным почтовым агентом (MTA) Postfix. Postfix может также проверять легальность почты с помощью передачи ее внешним фильтрам содержания. Эти фильтры могут иногда определить что сообщение является спамом без необходимости передачи его более ресурсоемким приложениям. Пара таких фильтров - это opendkim и python-policyd-spf.
Amavisd-new - это программная оболочка, которая может вызывать любое количество фильтрующих программ по обнаружению спама, антивирусов и т.п.
Spamassassin использует множество механизмов фильтрования почты на основе содержимого сообщений.
ClamAV - антивирусное приложение с открытым кодом.
opendkim является почтовым фильтром Sendmail для стандарта DKIM (почты, заверенной доменными ключами).
python-policyd-spf обеспечивает проверку SPF (структуры политики отправителя) с Postfix.
А здесь то, как эти части работают вместе:
Почтовое сообщение принимается Postfix.
Это сообщение проходит через некоторые внешние фильтры, в том числе opendkim и python-policyd-spf.
Затем сообщение обрабатывается Amavisd-new.
ClamAV используется для проверки сообщения. Если сообщение содержит вирус, Postfix сбросит сообщение.
Чистые сообщения затем будут проверены Spamassassin на принадлежность к спаму. Spamassassin затем добавит строки X-Header, позволяющие в дальнейшем Amavisd-new управлять сообщением.
Например, если сообщение содержит уровень спама более пятидесяти, оно будет автоматически выброшено из очереди чтобы не беспокоить получателя. В качестве альтернативы помеченное сообщение доставляется до почтового агента пользователя (MUA) чтобы пользователь сам определил насколько оно легальное.
Установка
Смотрите раздел Postfix для установки и настройки Postfix.
Чтобы установить основные приложения введите следующее в терминале:
sudo apt-get install amavisd-new spamassassin clamav-daemon sudo apt-get install opendkim postfix-policyd-spf-python
Существуют некоторые общие пакеты, подключаемые к Spamassassin для лучшего определения спама:
sudo apt-get install pyzor razor
Поскольку основным фильтрующим приложениям требуются утилиты архивации для обработки прикрепленных файлов:
sudo apt-get install arj cabextract cpio lha nomarch pax rar unrar unzip zip
Если вы внесли изменения в этот файл, убедитесь, что выполнили
sudo apt-get update
перед повторной попыткой установки.
Настройка
Теперь настроим чтобы все работало и фильтровало почту.
ClamAV
Стандартное поведение ClamAV вполне подходит для наших нужд. Для дополнительных опций настройки смотрите конфигурационные файлы в /etc/clamav.
Добавьте пользователя clamav в группу amavis, чтобы Amavisd-new имел соответствующие права доступа для сканирования файлов:
sudo adduser clamav amavis sudo adduser amavis clamav
Spamassassin
Spamassassin автоматически определяет общие компоненты и использует их, если они присутствуют. Это означает, что нет необходимости настраивать pyzor и razor.
Отредактируйте /etc/default/spamassassin для активации сервиса Spamassassin. Измените
ENABLED=0
на
ENABLED=1
Теперь запустим сервис:
sudo /etc/init.d/spamassassin start
Amavisd-new
Сначала активируем проверку на спам и вирусы в Amavisd-new, отредактировав /etc/amavis/conf.d/15-content_filter_mode:
use strict; # You can modify this file to re-enable SPAM checking through spamassassin # and to re-enable antivirus checking. # # Default antivirus checking mode # Uncomment the two lines below to enable it # @bypass_virus_checks_maps = ( \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re); # # Default SPAM checking mode # Uncomment the two lines below to enable it # @bypass_spam_checks_maps = ( \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re); 1; # insure a defined return
Возврат спама может быть плохой идеей, поскольку обратный адрес часто неверный. Подумайте над тем, чтобы изменить в /etc/amavis/conf.d/20-debian_defaults установку $final_spam_destiny на D_DISCARD вместо D_BOUNCE, как показано ниже:
$final_spam_destiny = D_DISCARD;
Дополнительно вы можете захотеть установить следующие опциональные флаги для отметки большего количества сообщений как спам:
$sa_tag_level_deflt = -999; # add spam info headers if at, or above that level $sa_tag2_level_deflt = 6.0; # add 'spam detected' headers at that level $sa_kill_level_deflt = 21.0; # triggers spam evasive actions $sa_dsn_cutoff_level = 4; # spam level beyond which a DSN is not sent
Если сетевое имя сервера отличается от MX записи домена, вам может потребоваться установить вручную опцию $myhostname. Также, если сервер принимает почту для нескольких доменов, опцию @local_domains_acl потребуется изменить. Отредактируйте файл /etc/amavis/conf.d/50-user:
$myhostname = 'mail.example.com'; @local_domains_acl = ( "example.com", "example.org" );
Если вы хотите покрывать несколько доменов, вы можете использовать следующее в файле /etc/amavis/conf.d/50-user:
@local_domains_acl = qw(.);
После настройки Amavisd-new требуется перезапустить:
sudo /etc/init.d/amavis restart
Белые списки DKIM
Amavisd-new может быть настроен на автоматическое занесение адресов в белый список из доменов с действительными доменными ключами. Есть несколько предварительно настроенных доменов в /etc/amavis/conf.d/40-policy_banks.
Существует несколько вариантов настройки белого списка для домена:
'example.com' => 'WHITELIST',: будет помещен в белый список любой адрес домена "example.com".
'.example.com' => 'WHITELIST',: будет помещен в белый список любой адрес любого поддомена, который имеет действительную подпись.
'.example.com/@example.com' => 'WHITELIST',: будут помещены в белый список поддомены "example.com", которые используют подпись родительского домена example.com.
'./@example.com' => 'WHITELIST',: добавляет адреса, которые имеют действительную подпись от "example.com". Это обычно используется для дискуссионных групп, которые подписывают свои сообщения.
Домен может иметь несколько настроек белого списка. После редактирования файла, перезапустите amavisd-new:
sudo /etc/init.d/amavis restart
Postfix
Для интеграции Postfix, введите следующее из терминала:
sudo postconf -e 'content_filter = smtp-amavis:[127.0.0.1]:10024'
Далее отредактируйте /etc/postfix/master.cf, добавив следующее в коне файла:
smtp-amavis unix - - - - 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
Также добавьте следующие две строки непосредственно после транспортного сервиса "pickup":
-o content_filter= -o receive_override_options=no_header_body_checks
Это предотвратит от попадания в спам сообщений, созданных в качестве отчетов о спаме.
Теперь перезапустите Postfix:
sudo /etc/init.d/postfix restart
Фильтрация содержимого с поиском спама и вирусов теперь включена.
Amavisd-new и Spamassassin
При интеграции Amavisd-new со Spamassassin, если вы решили заблокировать фильтр Байеса, отредактировав /etc/spamassassin/local.cf, и использовать cron для обновления ночных правил, то это может привести к ситуации, когда большой объем сообщений об ошибках будет посылаться пользователю amavis через задание cron amavisd-new.
Существует несколько вариантов разрешить эту ситуацию:
Настройте ваш MDA на фильтрацию сообщений, которые вы не желаете видеть.
Измените /usr/sbin/amavisd-new-cronjob на проверку, что use_bayes установлен в 0. Например, отредактируйте /usr/sbin/amavisd-new-cronjob, добавив следующее в начало до строк проверки:
egrep -q "^[ \t]*use_bayes[ \t]*0" /etc/spamassassin/local.cf && exit 0
Проверка
Для начала проверьте, что Amavisd-new SMTP активен:
telnet localhost 10024 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 [127.0.0.1] ESMTP amavisd-new service ready ^]
В заголовке сообщений, которые будут проходить через фильтр содержимого вы должны увидеть следующее:
X-Spam-Level: X-Virus-Scanned: Debian amavisd-new at example.com X-Spam-Status: No, hits=-2.3 tagged_above=-1000.0 required=5.0 tests=AWL, BAYES_00 X-Spam-Level:
Разрешение проблем
Лучший способ обнаружить, что что-то идет не так - проверить файлы журнала.
1. Для инструкций по журналам Postfix смотрите раздел Разрешение проблем.
2. Amavisd-new использует Syslog для отправки сообщений в /var/log/mail.log. Количество деталей может быть увеличено добавлением опции $log_level в /etc/amavis/conf.d/50-user и установкой значения от 1 до 5.
$log_level = 2;
3. Уровень журналирования ClamAV может быть увеличен редактированием /etc/clamav/clamd.conf и установкой следующей опции:
LogVerbose true
По уолчанию ClamAV посылает сообщения в журнал /var/log/clamav/clamav.log.
Ссылки
Для дополнительной информации обратитесь к следующим ссылкам:
Также не стесняйтесь задавать вопросы в канале IRC #ubuntu-server на freenode.