Почтовый шлюз с фильтрацией

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Mailfiltering Gateway and the translation is 98% complete.
Outdated translations are marked like this.
Other languages:
This article has been flagged for not conforming to the wiki guidelines (Use of 2nd person pronouns). Please help Gentoo out by starting fixing things.
Some of the information in this article may have drifted out of sync with current practices. Please help out by checking over the content (how to get started).

Данная статья покажет пошаговые инструкция по установке технологий по борьбе со спамом для Postfix. Среди них мы рассмотрим Amavisd-new с использованием Spamassassin и ClamAV, серые списки и SPF.

See the Complete Virtual Mail Server article for a full guide on setting up a well featured mail server.

Введение

Данная статья описывает пошаговую инструкцию по установке шлюза фильтрации почты на спам и вирусы. Если у вас всего один сервер, вы можете легко адаптировать информацию данной статьи под такую ситуацию.

Общая картина

Данный документ описывает, как настроить шлюз для фильтрации спама в почтовом трафике со множеством доменов. Такой сервер можно запускать перед настоящими почтовыми серверами, например, Microsoft Exchange или Lotus Notes.

Для данной статьи были выбраны приложения с читаемой конфигурацией и хорошими отзывами о безопасности. Почтовый сервер - Postfix, который достаточно безопасен и который можно достаточно просто правильно настроить. Обычно Postfix проверяет входящую почту на порту 25. При получении, он будет перенаправлять ее Amavisd-new на порт 10024. Amavisd-new затем будет отфильтровывать почту через различные фильтры, а затем отправит ее обратно Postfix по порту 10025, после чего Postfix перенаправит почту следующему почтовому серверу.

Amavisd-new это фреймворк по фильтрации содержимого, использующий приложения-помощники для фильтрации вирусов и фильтрации спама. В данной настройке мы будем использовать два приложения-помощника — ClamAV для фильтрации писем с вирусами и Spamassassin для отфильтровывания спама. Spamassassin сам по себе может служить еще одним слоем фильтрации содержимого, и использовать приложения-помощники, например, Vipul's Razor2 и DCC.

В отличие от многих других технологий борьбы со спамом, вроде RBL, Spamassassin не просто принимает или отбрасывает данное письмо, судя по одному единственному тесту. Он использует множество внутренних тестов и внешних приложений-помощников, чтобы вычислить очки спама для каждого проходящего письма. Эти очки основаны на следующих тестах:

  • Байесова фильтрация
  • Статические правила на основе регулярных выражений
  • Распределенные сети:
    • RBLs
    • Razor2
    • Pyzor
    • DCC

Первая часть (с 1 по 4 главу) данной статьи описывает базовую настройку почтового шлюза с фильтрацией. Следующие главы могут реализовываться по отдельности, без зависимостей между главами. Эти главы опишут, как

  • настроить специальные папки IMAP для обучения фильтра Байеса, а также для доставки ложных срабатываний
  • настроить серые списки в Postfix
  • настроить Amavisd-new для использования MySQL в качестве бэкенда для пользовательских настроек
  • настроить Spamassasin для использования MySQL в качестве бэкенда для данных AWL и Байеса
Заметка
Папки IMAP будут использоваться в формате maildir. Иметь каждое почтовое сообщение в отдельном файле гораздо проще. Если вы используете mbox, я предлагаю попробовать maildir. Если вы еще не используете maildir, установите необходимые программы с помощью emerge courier-imap.

Планируемая пятая часть будет содержать различные подсказки по поводу быстродействия, а также всяким вещам, о которых вы можете захотеть узнать (запуск в изолированном окружении, ограничения Postfix, и так далее).

Заметка
Перенос ответственности на третью сторону тоже имеет свои риски. Вы должны знать и доверять этим третьим лицам. В данной настройке только решение о карантине почты с вирусами будет основано на решении третьих лиц. Использование системы оценивания Spamassassin для блокирования почты со спамом не делается одной программой, кроме, возможно, собственных статических правил Spamassassin.
Предупреждение
При отбрасывании почты со спамом на уровне MTA, вы должны быть очень осторожны при выборе RBL которые вы хотите использовать. Например, SpamCop это плохой RBL для использования на уровне MTA, так как у вас будет много ложных срабатываний, из-за того, что иногда их листинг чересчур агрессивен. Большее количество информации можно найти в статье Realtime Blackhole Lists плохие и Проблема спама: Двигаемся дальше чем RBL

Приготовления

Перед тем, как вы начнете, проверьте, что у вас есть рабочая установка Postfix, куда вы можете посылать, и откуда вы можете получать почту. Также вам понадобится почтовый сервер, куда вы будете отправлять почту далее. Если вы не умеете настраивать Postfix, то процесс может быстро стать чересчур сложным, если вы все делаете за один раз. Если вам нужна помощь, вы можете найти ее в отличной статье полный виртуальный почтовый сервер в Gentoo Wiki.

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

Мы начнем с установки самых важных программ: Amavisd-new, Spamassassin и ClamAV.

root #echo "mail-filter/amavisd-new spamassassin clamav" >> /etc/portage/package.use
root #emerge amavisd-new
root #freshclam
Заметка
Как было замечено ранее, у вас уже должна быть рабочая установка postfix. Если кратко, это сводится к emerge postfix и базовому пониманию того, как работает Postfix.

Настройка DNS

Заметка
Если вы не устанавливаете сервер шлюза, а будете иметь почтовые ящики на этом же сервере, вам нужно создать только запись MX.

Пока программы устанавливаются, запустите еще одну оболочку, и создайте необходимые записи DNS.

Начните с создания записи MX для почтового шлюза и записи A для следующего пункта назначения.

КОД Настройка DNS
(Создайте запись MX для сервера шлюза)
                MX      10      mailgateway.mydomain.tld.
(Создайте запись A для сервера шлюза)
mailgateway     A       почтовыйшлюз.ip.добавьте.сюда
(Создайте запись A для следующего почтового сервера)
mail            A       почтовыйсервер.ip.добавьте.сюда


Заметка
Некоторые провайдеры ADSL могут блокировать порт 25 и заставлять вас передавать почту через один из их серверов. Обычно вам нужно создать вторичную запись MX, вроде MX 20 backup-mx.some-isp.tld


Открываем файрвол

Кроме разрешения на прохождение нормального почтового трафика, вам нужно разрешить некоторым сервисам прохождение через ваш файрвол, чтобы позволить сетевым проверкам взаимодействовать с серверами.

Приложение Протокол Порт
DCC UDP 6277
Razor(исходящий ping) TCP 7
Razor TCP 2703

Razor использует пинги, чтобы определить ближайшие сервера.

Конфигурация Postfix

Сначала нам нужно сказать postfix, чтобы он прослушивал порт 10025, и мы уберем большинство ограничений, так как они уже были применены экземпляром postfix, который прослушивает порт 25. Также мы убедимся, что на порту 10025 он прослушивает только локальные соединения. Чтобы этого достичь, нам нужно добавить следующие строки в конце файла /etc/postfix/master.cf

КОД Изменяем файл master.cf
smtp-amavis     unix -        -       n     -       2  smtp
  -o smtp_data_done_timeout=1200
  -o smtp_send_xforward_command=yes
#Либо эквивалентно, при использовании lmtp:
#lmtp-amavis    unix -        -       n     -       2  lmtp
#   -o lmtp_data_done_timeout=1200
#   -o lmtp_send_xforward_command=yes
  
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_client_restrictions=
  -o smtpd_helo_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o mynetworks=127.0.0.0/8
  -o strict_rfc821_envelopes=yes
  -o smtpd_error_sleep_time=0
  -o smtpd_soft_error_limit=1001
  -o smtpd_hard_error_limit=1000
  
#Если вы вместо этого хотите использовать прокси-фильтрацию
#smtp            inet n         -       n      -       8 smtpd
# -o smtpd_proxy_filter=127.0.0.1:10024
# -o smtpd_client_connection_count_limit=4
#Если вы не хотите сканировать исходящую почту, используйте это
#10.0.0.2:smtp   inet n         -       n       -      - smtpd
#-o content_filter=
Заметка
Строка smtp-amavis определяет, что максимум два процесса могут быть запущены в любой момент времени. Если вам нужно большее число процессов, измените это число так, как вам нужно. Помните, что число должно соответствовать числу $max_servers в amavisd.conf . Помните, что amavisd-new очень требователен к памяти, поэтому повышение количества процессов amavisd-new может легко привести к исчерпанию памяти и большому использованию свопа, что приведет к катастрофическому падению производительности.
Заметка
Если вы хотите отбрасывать спам в самом начале процесса, вы можете использовать метод Before-Queue (proxy) вместо метода filter. Если вы раскомментируете три строки, вам нужно будет настроить content_filter= в main.cf . Это не рекомендуется делать для высоконагруженных по трафику серверов, так как число одновременных соединений ограничено числом экземпляров amavisd.
Предупреждение
Метод Before-Queue(proxy) все еще не был тщательно проверен.
Заметка
Если вы, по какой-либо причине, хотите посылать почту с этого компьютера, и не хотите, чтобы она сканировалась, добавьте еще один экземпляр Postfix, раскомментировав последние две строки, и подставив нужный IP.

Файл master.cf сообщает программе master из состава postfix, как запускать каждый индивидуальный процесс postfix. Более подробную информацию можно получить по команде man 8 master .

Далее нам нужно, чтобы главный экземпляр postfix, слушающий порт 25, фильтровал почту через amavisd-new, который слушает порт 10024.

Также нам надо установить, куда нужно отправлять почту далее. Скажите Postfix фильтровать всю почту через внешний фильтр содержимого, и включите явный выбор маршрута, чтобы Postfix знал, куда направлять почту.

ФАЙЛ /etc/postfix/main.cf
biff = no
empty_address_recipient = MAILER-DAEMON
queue_minfree = 120000000
  
content_filter = smtp-amavis:[127.0.0.1]:10024
#Equivalently when using lmtp:
#content_filter = lmtp-amavis:[127.0.0.1]:10024
  
# Карта транспорта
#
# Вставьте текст из sample-transport.cf если вам нужен явный маршрут.
transport_maps = hash:/etc/postfix/transport
  
relay_domains = $transport_maps

У Postfix есть множество установленных опций в main.cf. Для более детального объяснения данного файла просмотрите man 5 postconf, либо то же самое онлайн Параметры Конфигурации Postfix .

Файл transport это обычный файл хэша Postfix. Направьте почту на домен в левой части, и она будет перенаправлена в пункт назначения в правой части.

ФАЙЛ /etc/postfix/transport
mydomain.tld                          smtp:mail.mydomain.tld

После того, как мы отредактировали файл, нам нужно запустить команду postmap. Postfix не будет читать данный файл, пока мы не преобразуем его в нужный формат с помощью команды postmap /etc/postfix/transport . Тогда будет создан файл /etc/postfix/transport.db . Нет необходимости перезагружать Postfix, так как он увидит изменения автоматически.

Заметка
Если следующий почтовый сервер не слушает на стандартном порту SMTP 25, вы можете задать Postfix нужный номер порта, например, smtp:mail.mydomain.tld:25000 .

Если ваши первые попытки послать почту привели к ошибкам, скорее всего где-то вы допустили ошибки в конфигурации. Пока вы работаете с ошибками конфигурации, попробуйте временно разрешить soft_bounce. Это не даст Postfix отбрасывать письма при ошибках доставки, и Postfix будет считать такие ошибки временными. Он будет оставлять письма в почтовой очереди, пока soft_bounce не будет отключен, либо убран.

root #postconf -e "soft_bounce = yes"
root #/etc/init.d/postfix reload

Как только вы закончили создавать рабочую конфигурацию, удостоверьтесь, что вы отключили или убрали soft_bounce и перезагрузили Postfix.

Конфигурация Amavisd-new

Amavisd-new используется для работы по фильтрации, и позволяет вам легко соединить несколько различных технологий. При получении почтового сообщения, он извлечет письмо, профильтрует его через некоторые фильтры, с поддержкой белых и черных списков, отфильтрует почту с использованием различных вирусных сканеров, и, в конце концов, отфильтрует почту с использованием SpamAssassin.

Amavisd-new и сам имеет некоторое число дополнительных возможностей:

  • он определяет опасные файлы в приложениях к письму, и у него есть политики для их обработки
  • политики (для каждого пользователя, для каждого домена, для всей системы) для:
    • белых списков
    • черных списков
    • границы оценок для спама
    • политики в части вирусов и спама

Кроме postfix и freshclam, все приложения мы будем запускать под пользователем amavis .

Отредактируйте следующие строки в /etc/amavisd.conf

ФАЙЛ /etc/amavisd.conf
# (Вставьте какой домен проверять)
$mydomain = 'example.com';
# (Работать только на интерфейсе-петле)
$inet_socket_bind = '127.0.0.1';
# (Передавать Postfix на порту 10025)
$forward_method = 'smtp:127.0.0.1:10025';
$notify_method = $forward_method;
# (Определить аккаунт, куда посылать письма с вирусами)
$virus_admin = "virusalert\@$mydomain";
# (Всегда добавлять заголовки относительно проверки на спам)
$sa_tag_level_deflt  = -100;
# (Добавлять заголовок обнаружения спама, вроде такого X-Spam-Status: Yes)
$sa_tag2_level_deflt = 5;
# (Включать какие-либо действия при таком уровне спама)
$sa_kill_level_deflt = $sa_tag2_level_deflt;
# (Не отсылать статус получения отправителю. Это не влияет на получение спама.
#  Чтобы сделать это, используйте kill_level)
$sa_dsn_cutoff_level = 10;
# Не отбрасывать письма, а помещать их в карантин
$final_virus_destiny      = D_DISCARD;  # (по умолчанию D_DISCARD)
$final_banned_destiny     = D_DISCARD;  # (по умолчанию D_BOUNCE)
$final_spam_destiny       = D_DISCARD;  # (по умолчанию D_BOUNCE)
Заметка
Строка $sa_tag2_level_deflt = 5; устанавливает границу определения письма как спам в 5 баллов. Это немного низкое значение. Как вы могли заметить, по умолчанию Amavisd-new задает 6.3 . Если вы не хотите видеть ни одного письма со спамом в вашем почтовом ящике, выбирайте 5 , однако если вы не хотите разбираться с ложными срабатываниями, выбирайте 6.3 .

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

root #mkdir /var/amavis/virusmails
root #chown amavis:amavis /var/amavis/virusmails
root #chmod 750 /var/amavis/virusmails
Заметка
Amavisd-new может более точно определять политику, используя банки политик.

Конфигурация ClamAV

Мы будем использовать ClamAV в качестве вирусного сканера, так как у него неплохой процент детектирования, сравнимый с коммерческими предложениями, он очень быстр, и у него открытый исходный код. Мы с вами любим файлы логов, поэтому создайте лог clamd, используя syslog и включите дополнительное логгирование. Кроме того, не запускайте clamd от пользователя root . Теперь отредактируйте /etc/clamd.conf

ФАЙЛ /etc/clamd.conf
# (Детальные логи с использованием syslog)
LogSyslog
LogVerbose
LogFacility LOG_MAIL
# (Измените положение pid файла)
PidFile /var/run/amavis/clamd.pid
# (Установите сокет clamav)
LocalSocket /var/amavis/clamd
# (Закрыть соединение, когда данный лимит будет превышен)
StreamMaxLength 10M
# (Не запускать clamd от пользователя)
User amavis
# (Более новые версии требуют, чтобы это было раскомментировано)
ScanMail
ScanArchive
Заметка
Также помните, что нужно удалить директиву Example, чтобы ClamAV заработал

В пакете программ ClamAV есть демон freshclam, который периодически проверяет обновления вирусных сигнатур. Вместо того, чтобы обновлять вирусные сигнатуры дважды в день, заставим freshclam обновлять вирусные сигнатуры каждые два часа.

ФАЙЛ /etc/freshclam.conf
# (Логи с использованием Syslog)
LogSyslog
# (Детальные логи)
LogVerbose
# (Явно уберем привилегии root)
DatabaseOwner clamav
# (Проверять обновления каждые 2 часа. Это официальная рекомендация)
Checks 12
# (Используйте зеркало, которое ближе всего к вам. Замените XY на код вашей страны)
DatabaseMirror db.XY.clamav.net

Запустите clamd м freshclam, используя инициализационные скрипты, изменив /etc/conf.d/clamd .

ФАЙЛ /etc/conf.d/clamd
START_CLAMD=yes
START_FRESHCLAM=yes
CLAMD_NICELEVEL=3
FRESHCLAM_NICELEVEL=19
IONICE_LEVEL=2

В конце, укажите в файле amavisd.conf новое положение сокета.

ФАЙЛ /etc/amavisd.conf
# (Раскомментируйте сканер clamav и измените месторасположение сокета)
['ClamAV-clamd',
\&ask_daemon, ["CONTSCAN {}\n", "/var/amavis/clamd"],
  qr/\bOK$/, qr/\bFOUND$/,
  qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
Предупреждение
НЕ изменяйте $unix_socketname, если только вы не понимаете, что вы делаете.

Конфигурация Vipul's Razor

Razor2 это распределенная сеть контрольных сумм писем со спамом. Установите ее с помощью команды emerge razor и создайте необходимые файлы конфигурации. Делайте это от пользователя amavis, выполнив команду su - amavis, а за ней razor-admin -create .

root #emerge razor
root #su - amavis -s /bin/bash
user $razor-admin -create
user $exit

Конфигурация Distributed Checksum Clearinghouse (dcc)

Как и Razor2, dcc это сеть контрольной суммы спама, являющаяся распределенной и управляемая сообществом. Ее философия состоит в том, чтобы подсчитать число получателей данного письма, идентифицировав каждое письмо некоторой контрольной суммой.

root #emerge dcc

Конфигурация Spamassassin

Amavis сам использует библиотеки Perl для Spamassassin, поэтому нет необходимости запускать сервис. Кроме того, это создает некоторую путаницу в конфигурации, так как некоторые настройки Spamassassin конфигурируются в файле /etc/mail/spamassassin/local.cf, но, потом, перенастраиваются в /etc/amavisd.conf .

ФАЙЛ /etc/mail/spamassassin/local.cf
# Включить систему Байеса
use_bayes               1
  
# Включить все сетевые проверки
skip_rbl_checks         0
  
# Письма на таких языках не будут маркироваться
# как возможный спам на иностранном языке
# - датский, английский, норвежский, шведский
ok_languages            da en no sv

# Письма с такими локалями не будут маркироваться
# как возможный спам на иностранном языке
ok_locales              en
  
# Использовать такой путь к фильтру Байеса
bayes_path              /var/amavis/.spamassassin/bayes


Заметка
Со Spamassassin версии 3.1 вам нужно включить DCC и Razor2 раскомментировав соответствующие строки в файле v310.pre.
Заметка
Вы можете получить вдохновение для создания вашего файла local.cf, попробовав Генератор Конфигурации SpamAssassin.
Заметка
Вы также, скорее всего, захотите изменить ok_languages и ok_locales.

У каждого хорошего правила есть и хорошие исключения

Как только почта по настоящему начнет проходить через данный почтовый шлюз, вы, скорее всего, выясните, что вышеприведенная настройка несовершенна. Может быть каким-то из ваших клиентов нравится получать письма, которые не нравятся другим. Вы можете достаточно просто создать белые и черные списки для отправителей. Раскомментируйте следующую строку в amavisd.conf.

ФАЙЛ amavisd.confОбщесайтовые очки
read_hash("/var/amavis/sender_scores_sitewide"),

В файле sender_scores_sitewide вы помещаете полные адреса электронной почты, либо только их доменные части, а затем указываете положительное/отрицательное количество очков, которое нужно добавить к очкам спама.

ФАЙЛ whitelist_senderПример
# (Занести в белый список все письма с конкретного адреса электронной почты)
postmaster@example.net                -3.0
# (Занести в белый список всю почту с example.net, за исключением поддоменов)
.example.net                          1.0


Заметка
Для других примеров смотри файл /etc/amavisd.conf.
Заметка
Размещение этих адресов вне файла amavisd.conf это более правильное и безопасное решение.
Заметка
Кроме того, это можно сделать в конфигурационном файле Spamassassin /etc/mail/spamassassin/local.cf, но, я думаю, будет лучше сделать это в /etc/amavisd.conf .
Заметка
В следующих главах я покажу, как реализовать отдельные политики для каждого пользователя с использованием MySQL.

В поисках более хорошего метода, пока вы можете добавить следующее в файл amavisd.conf, чтобы не выполнять проверки на спам для почтовых ящиков postmaster и abuse.

КОД Не проверять с помощью спам-фильтров почту с ящиков postmaster и abuse
map { $bypass_spam_checks{lc($_)}=1 } (qw(
        postmaster@
        abuse@
));
Важно
Никогда не следует автоматически отбрасывать письма к аккаунтам postmaster или abuse. Смотрите RFC 2142 ИМЕНА ПОЧТОВЫХ ЯЩИКОВ ДЛЯ ЧАСТОИСПОЛЬЗУЕМЫХ СЕРВИСОВ, РОЛЕЙ И ФУНКЦИЙ . В противном случае, ваши домены могут попасть в какие-то из списков плохих хостов на rfc-ignorant.org.

Добавляем больше правил

Если вы хотите использовать больше правил, разработанных ниндзями по борьбе со спамом из SARE (SpamAssassin Rules Emporium), вы можете легко добавлять и удалять их путем механизма sa-update, включенного в Spamassassin.

Краткое описание использования наборов правил SARE совместно с sa-update может быть найдено здесь .

Тестируем и запускаем

Тестирование установки

Теперь, перед запуском freshclam можно проверить вручную, что все работает.

root #freshclam
ClamAV update process started at Sun May  2 09:13:41 2004
Reading CVD header (main.cvd): OK
Downloading main.cvd [*]
main.cvd updated (version: 22, sigs: 20229, f-level: 1, builder: tkojm)
Reading CVD header (daily.cvd): OK
Downloading daily.cvd [*]
daily.cvd updated (version: 298, sigs: 1141, f-level: 2, builder: diego)
Database updated (21370 signatures) from database.clamav.net (193.1.219.100).

Теперь вы обновили определения вирусов, и вы знаете, что freshclam.conf правильно работает.

Проверьте freshclam и amavisd из командной строки, используя тестовые письма amavisd. Запустите clamd и amavis следующими командами:

root #/etc/init.d/clamd start
root #/etc/init.d/amavisd start
root #/etc/init.d/postfix reload

Если все пройдет хорошо, то postfix теперь должен слушать входящую почту на порту 25, и копии проверенных писем на порту 10024. Для проверки этого, просмотрите ваш файл логов.

root #tail -f /var/log/mail.log
Заметка
В зависимости от настроек ваших логов, вполне может быть, что вам нужен файл /var/log/messages .

Теперь, если в файле логов не появилось никаких странных сообщений, то пришло время нового теста.

Используйте netcat чтобы вручную соединиться с amavisd на порту 10024 и с postfix на порту 10025.

Заметка
Netcat можно использовать как расширенную замену программы telnet . Установите ее с помощью emerge netcat .
Заметка
Если по какой-то неизвестной причине вы не можете выполнить ручную передачу почты amavisd с помощью netcat, используйте вместо нее telnet .
root #nc localhost 10024
220 [127.0.0.1] ESMTP amavisd-new service ready
root #nc localhost 10025
220 example.com ESMTP Postfix


Заметка
Если вы хотите получить полный лог от amavisd-new, запустите amavisd debug-sa под пользователем amavis и пошлите письмо. Чтобы это сработало, вам может понадобиться изменить оболочку по умолчанию в файле /etc/passwd.

Добавьте amavisd и clamd к уровню запуска default (по умолчанию).

root #rc-update add clamd default
root #rc-update add amavisd default
Заметка
Мы не добавляем spamd к уровню запуска default, так как amavisd использует Perl-библиотеки Spamassassin явно.
Заметка
Вы можете заметить строки Net::Server: Couldn't POSIX::setuid to ... [] в вашем файле логов. Согласно Описанию amavis chroot , если процесс UID равен 0 ( пользователь root ), то программа будет завершена, в противном случае вы можете считать это сообщение просто информационным. Это происходит потому, что POSIX::setuid() возвращает строку 0 but true .
Важно
Если вы разрешили логин для пользователя amavis, поменяйте оболочку для логина в файле /etc/passwd обратно на /bin/false .

Автоматическое обучение, и перенаправление почты

Создаем пользователя spamtrap (ловушка для спама)

Создайте аккаунт и каталоги spamtrap.

root #useradd -m spamtrap
root #maildirmake /home/spamtrap/.maildir
root #chown -R spamtrap:spamtrap /home/spamtrap/.maildir

Дайте пользователю spamtrap какой-либо пароль.

root #passwd spamtrap

Если вы хотите вручную проверять некоторые письма, чтобы удостовериться, что не произошло ложных срабатываний, вы можете использовать следующую конфигурацию procmail для перенаправления найденного спама в другие каталоги почты.

Создаем .procmailrc

ФАЙЛ /home/spamtrap/.procmailrc
#Некоторые переменные по умолчанию
MAILDIR=$HOME/.maildir
  
SPAM_FOLDER=$MAILDIR/.spam-found/
  
LIKELY_SPAM_FOLDER=$MAILDIR/.likely-spam-found/
  
#Письма с очками спама 7+ в каталог со спамом
:0:
* ^X-Spam-Status: Yes
* ^X-Spam-Level: \*\*\*\*\*\*\*
$SPAM_FOLDER
  
#Письма с очками спама между 5 и 7 в папку "скорее всего спам"
:0:
* ^X-Spam-Status: Yes
$LIKELY_SPAM_FOLDER
  
#Остальные письма во входящие
:0
*
./
Предупреждение
Если ваш почтовый сервер будет высоконагруженным, вы НЕ должны использовать папку для "возможного спама". Вместо этого установите $sa_tag2_level_deflt в достаточно большое значение, чтобы избежать ложных срабатываний, и направляйте письма прямо в $SPAM_FOLDER .
Заметка
Если вы еще не установили procmail, сделайте это с помощью команды emerge procmail .

Проверьте, что Postfix использует procmail для доставки почты.

ФАЙЛ /etc/postfix/main.cf
mailbox_command = /usr/bin/procmail -a "DOMAIN"

Создаем каталоги для почты

Теперь мы создадим папки для хорошей почты (ham) и плохой почты (spam).

root #maildirmake /var/amavis/.maildir
root #maildirmake -S /var/amavis/.maildir/Bayes
root #maildirmake -s write -f spam /var/amavis/.maildir/Bayes
root #maildirmake -s write -f ham /var/amavis/.maildir/Bayes
root #maildirmake -s write -f redeliver /var/amavis/.maildir/Bayes

Amavisd-new должен иметь возможность читать эти файлы, как и все почтовые пользователи. Поэтому мы добавим всех необходимых пользователей в группу mailuser вместе с amavis.

root #groupadd mailusers
root #usermod -G mailusers spamtrap
root #chown -R amavis:mailusers /var/amavis/.maildir/
root #chown amavis:mailusers /var/amavis/
root #chmod -R 1733 /var/amavis/.maildir/Bayes/
root #chmod g+rx /var/amavis/.maildir/
root #chmod g+rx /var/amavis/.maildir/Bayes/
Предупреждение
Это даст членам группы mailusers доступ к почте amavis.

Это сделает папки spam и ham доступными для записи, но не для чтения. Поэтому пользователи смогут спокойно отправлять свои хорошие письма без боязни, что кто-то еще их прочитает.

Затем запустите следующую команду от пользователя spamtrap:

user $maildirmake --add Bayes=/var/amavis/.maildir/Bayes $HOME/.maildir
Заметка
Нам нужно дать права чтения на группу для каталога Bayes, чтобы почтовый клиент мог видеть подкаталоги, используемые IMAP.

Добавляем задачи cron

Теперь запустите crontab -u amavis -e, чтобы отредактировать crontab пользователя amavis, чтобы разрешить автоматическое обучение фильтра Байеса каждый час.

ФАЙЛ crontabдля пользователя amavis
#Авто обучение
0 * * * *          /usr/bin/sa-learn --spam /var/amavis/.maildir/Bayes/.spam/{cur,new} \
                    > /dev/null 2>&1
0 * * * *          /usr/bin/sa-learn --ham /var/amavis/.maildir/Bayes/.ham/{cur,new} > \
                   /dev/null 2>&1
Заметка
Пользователь amavis должен быть членом группы cron чтобы он имел право запускать задачи.
Заметка
Похоже, что папки maildir с общим доступом приводят к тому, что sa-learn изучает каждое сообщение два раза. Это не является особой проблемой. Судя по сообщениям, вы также увидите, что число сообщений, по которым происходило обучение равно половине, или еще немного меньше, чем число изученных сообщений.

Изменяем amavisd.conf

Теперь измените amavis, чтобы он перенаправлял письма со спамом на аккаунт spamtrap, при этом сохраняя заголовки спама.

ФАЙЛ /etc/amavisd.conf
# (Определить аккаунт, куда нужно посылать вирусную почту со спамом)
$spam_quarantine_to = "spamtrap\@$myhostname";

Очистка

Мы не хотим хранить почту вечно, поэтому будем использовать tmpwatch, чтобы регулярно ее очищать. Установите эту программу командой emerge tmpwatch . Только root может запустить tmpwatch, так что нам нужно отредактировать файл crontab пользователя root.

ФАЙЛ crontabПользователь root
# Очистка
# Хранить письма с вирусами неделю (24*7 часов)
15 0 * * *      /usr/sbin/tmpwatch -c -f -d --quiet 168 /var/amavis/virusmails/
# Удалять письма spam и ham, по которым происходило обучение, через неделю
15 0 * * *      /usr/sbin/tmpwatch -c -f -d --quiet 168 /var/amavis/.maildir/Bayes/

Серые списки

Введение

Серые списки - это одно из новых моделей оружия в арсенале борьбы со спамом. Как видно из имени, метод очень похож на белые списки и черные списки. Каждый раз, когда неизвестный почтовый сервер пытается доставить почту, эта почта отклоняется с сообщением try again later (попробуйте позже). Это означает, что письмо задерживается, но тупые боты, занимающиеся рассылкой спама, которые не полностью реализуют протокол по стандарту RFC, больше не будут пытаться доставить спам, и никогда не будут повторять попыток. Со временем, скорее всего, спам-боты приспособятся к такой защите, но к тому времени появятся другие технологии для определения спама.

Заметка
Если ваш провайдер блокирует входящий трафик на порту 25, и перенаправляет всю почту, которая идет к вам, на свой почтовый сервер, то серые списки не будут работать.

Postfix 2.1 поставляется с простым сервером политик серых списков на Perl, который реализует такую схему. Однако его использование приводит к непредсказуемым результатам, если раздел, на котором находится база данных серых списков, переполняется. Существует улучшенная версия, не страдающая от этой проблемы. Сначала я покажу, как установить встроенную поддержку серых списков, которая поставляется с Postfix, а затем покажу, как настроить улучшенную версию.

Заметка
Существуют и другие сервера политик серых списков для Postfix (такие как Gld, который есть в Portage, или SQLgrey). Некоторые из них поддерживают базы данных в качестве бэкендов, автозанесение в белый список, а также другие приятные возможности.

Простые серые списки

Заметка
Если вы предпочитаете использовать улучшенные серые списки с использованием postgrey, вы можете спокойно пропустить данный раздел.

Нам нужен файл greylist.pl, но ebuild по умолчанию его не устанавливает.

root #cp /usr/portage/distfiles/postfix-your-version-here.tar.gz /root/
root #tar xzf postfix-your-version-here.tar.gz
root #cp postfix-2.1.0/examples/smtpd-policy/greylist.pl /usr/bin/

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

root #mkdir /var/mta
root #chown nobody /var/mta
Предупреждение
Не создавайте каталог базы данных серых списков на разделе, на котором может кончится место. Хотя postfix может восстанавливаться из ситуаций нет-больше-места для почтовых очередей и почтовых ящиков, это не работает с базой данных серых списков. Если этот файл станет поврежден, вы вообще не сможете получать почту, пока вручную не удалите файл.

Настройка серых списков

Теперь, когда все это готово, все что нам остается сделать, это добавить серые списки к конфигурации postfix. Сначала добавим необходимую информацию к master.cf :

КОД Изменяем master.cf для использования серых списков
policy-greylist  unix  -       n       n       -       -       spawn
   user=nobody argv=/usr/bin/perl /usr/bin/greylist.pl

Обычно демон spawn программы postfix убивает своих потомков через 1000 секунд, но это слишком мало для процесса работы с серыми списками, поэтому мы увеличим лимит времени в main.cf :

ФАЙЛ main.cfИспользуем серые списки
policy-greylist_time_limit = 3600
# (Под smtpd_recipient_restrictions добавьте:)
check_sender_access hash:/etc/postfix/sender_access
# (Добавьте попозже:)
restriction_classes = greylist
greylist = check_policy_service unix:private/policy-greylist
Предупреждение
Проверьте, что вы указали check_sender_access ПОСЛЕ reject_unauth_destination, иначе ваша система может стать открытым почтовым ретранслятором.
Заметка
База данных серых списков быстро засоряется ненужными адресами. Может помочь ограничение поисков в серых списках при использовании других ограничивающих методов, которые отбрасывают неизвестных отправителей и/или получателей.

Мы не хотим использовать серые списки для всех доменов, а только для тех, которые часто эксплуатируются спамерами. В конце концов, это будет задерживать доставку почты. Список недавно подделанных доменов MAIL FROM можно найти онлайн . Добавьте домены, с которых вы получаете много спама к /etc/postfix/sender_access :

КОД Формат файла sender_access
aol.com     greylist
hotmail.com greylist
bigfoot.com greylist

Если вы хотите более сложный список:

root #cat sender-domain-validate.in | sort | awk {'print $1 "\t\t greylist"'} > /etc/postfix/sender_access

Теперь осталось только инициализировать базу данных sender_access:

root #postmap /etc/postfix/sender_access

Настройка простых серых списков окончена.

Предупреждение
Я пытался сделать это на компьютере, принимающем тысячи писем в день, и результаты были полным разочарованием. Через четыре дня компьютер перестал работать из-за сотен старых процессов greylist.pl.

Конфигурация улучшенных серых списков с помощью postgrey

Вы можете установить улучшенную политику серых списков с помощью простой команды emerge :

root #emerge postgrey

После установки postgrey нам нужно отредактировать файл main.cf. Изменения почти те же самые, как мы делали при настройке серых списков.

ФАЙЛ main.cfИспользуем серые списки
# (Добавьте под smtpd_recipient_restrictions:)
check_sender_access hash:/etc/postfix/sender_access
# (Добавьте попозже:)
smtpd_restriction_classes = greylist
greylist = check_policy_service inet:127.0.0.1:10030
Заметка
Только SMTPD_POLICY_README программы Postfix использует restriction_classes, однако похоже это не работает.
Заметка
Если вы хотите использовать серые списки везде, добавьте check_policy_service inet:127.0.0.1:10030 .

Наконец, запустите сервер и добавьте его к нужному уровню запуска.

root #/etc/init.d/postgrey start
root #rc-update add postgrey default
Заметка
Некоторые люди хотят получать почту быстро, и тогда серые списки бесполезны. Однако если вы создадите почтовый сервер для хранения почты, вы запросто можете настроить на нем серые списки. Мой ограниченный опыт говорит мне, что это может задержать до трети получаемого спама.

SPF (Sender Policy Framework)

Введение

SPF позволяет доменам определять в своих DNS записях, какие IP адреса могут посылать почту с их домена. Это не дает спамерам подменять Return-Path.

Заметка
Если ваш провайдер блокирует входящий трафик на порту 25, и перенаправляет всю почту, которая идет к вам, на свой почтовый сервер, то SPF не будет работать.

Сначала, владельцы домена должны создать специальную DNS запись TXT. Затем агент передачи почты (MTA) с поддержкой SPF может прочитать ее, и если почта исходит с сервера, который не описан в записи SPF, то почта может быть отклонена. Например, запись может выглядеть так:

КОД Пример записи SPF
example.com.  IN TXT  "v=spf1 a mx ptr -all"

-all означает, что нужно отклонять всю почту по умолчанию, но разрешать почту из записей DNS A( a ), MX( mx ) и PTR( ptr ). Для большего количества информации прочитайте ресурсы, приведенные ниже.

Заметка
Если вы перенаправляете всю исходящую почту через вашего провайдера, вам нужно добавить: include:вашпровайдер.com .

В Spamassassin 3.0 есть поддержка SPF, но она не включена по умолчанию. Кроме того, новый демон политик в Postfix также поддерживает SPF, так что давайте установим поддержку SPF для Postfix.

Заметка
Если вы, вместо этого, хотите использовать SPF вместе со Spamassassin, просто emerge dev-perl/Mail-SPF-Query и перезапустите Amavisd-new.

Приготовления

Сначала установите Postfix 2.1, как было описано выше. Когда вы загрузили исходные коды, возьмите файл spf.pl со следующим содержимым:

root #cp postfix-<version>/examples/smtpd-policy/spf.pl /usr/local/bin/
Заметка
Файл spf.pl, поставляемый с Postfix имеет небольшой баг, поэтому найдите и раскомментируйте следующую строку: push @HANDLERS, "sender_permitted_from"; use Mail::SPF::Query; . Далее, примерно в 199 строке замените comemnt на comment . Либо вы можете скачать версию в разработке.

Этот скрипт на Perl требует некоторых библиотек Perl, которых нет в portage, но их довольно просто установить:

root #emerge Mail-SPF-Query Net-CIDR-Lite Sys-Hostname-Long

Теперь мы все сделали, и все, что нам осталось - это настроить Portage, чтобы он использовал новую политику.

ФАЙЛ master.cfИспользование SPF
policy-spf  unix  -       n       n       -       -       spawn
   user=nobody argv=/usr/bin/perl /usr/local/bin/spf.pl

Теперь добавьте проверку SPF в main.cf . Правильно настроенный SPF не должен повредить, поэтому мы можем проверять SPF для всех доменов:

ФАЙЛ main.cfИспользуем SPF
# (Добавьте под smtpd_recipient_restrictions:)
check_policy_service unix:private/policy-spf
Заметка
Если вы испытываете проблемы с SPF, например, при использовании fetchmail , вы можете разрешить SPF только для некоторых доменов.

Конфигурация amavisd-new для использования MySQL

Настройка MySQL

Заметка
Это не тестировалось на более высоких версиях, чем 2.2. Сообщите о своем опыте.

Для больших доменов, значения по умолчанию, которые вы можете установить в amavisd.conf могут не устроить всех пользователей. Если вы настроите поддержку MySQL для amavisd-new, вы сможете использовать индивидуальные настройки для пользователей или групп пользователей.

user $mysql -u root -p mysql
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 78 to server version: 4.0.18-log
  
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>Создаем базу данных maildb;
mysql>GRANT INSERT,UPDATE,DELETE,SELECT ON maildb.* TO 'mail'@'localhost' IDENTIFIED BY 'very_secret_password';
mysql>use maildb;

Теперь, после создания базы данных, нам нужно создать необходимые таблицы. Вы можете вырезать и вставить следующие команды в поле ввода программы mysql:

КОД Структура таблицы MySQL
CREATE TABLE users (
    id         int unsigned NOT NULL auto_increment,
    priority   int          NOT NULL DEFAULT '7',  -- 0 is low priority
    policy_id  int unsigned NOT NULL DEFAULT '1',
    email      varchar(255) NOT NULL,
    fullname   varchar(255) DEFAULT NULL,    -- not used by amavisd-new
    local      char(1),     -- Y/N  (optional field, see note further down)
    PRIMARY KEY (id),
    KEY email (email)
    );
CREATE UNIQUE INDEX users_idx_email ON users(email);
  
# (any e-mail address, external or local, used as senders in wblist)
CREATE TABLE mailaddr (
   id         int unsigned NOT NULL auto_increment,
   priority   int          NOT NULL DEFAULT '7',  -- 0 is low priority
   email      varchar(255) NOT NULL,
   PRIMARY KEY (id),
   KEY email (email)
   );
CREATE UNIQUE INDEX mailaddr_idx_email ON mailaddr(email);
  
# (-- per-recipient whitelist and/or blacklist,
# -- puts sender and recipient in relation wb)
# (white or blacklisted sender)
CREATE TABLE wblist (
   rid        int unsigned NOT NULL,     -- recipient: users.id
   sid        int unsigned NOT NULL,     -- sender:    mailaddr.id
   wb         char(1) NOT NULL, -- W or Y / B or N / space=neutral
   PRIMARY KEY (rid,sid)
   );
  
CREATE TABLE policy (
   id               int unsigned NOT NULL auto_increment,
   policy_name      varchar(32),     -- not used by amavisd-new
   virus_lover          char(1),     -- Y/N
   spam_lover           char(1),     -- Y/N  (optional field)
   banned_files_lover   char(1),     -- Y/N  (optional field)
   bad_header_lover     char(1),     -- Y/N  (optional field)
   bypass_virus_checks  char(1),     -- Y/N
   bypass_spam_checks   char(1),     -- Y/N
   bypass_banned_checks char(1),     -- Y/N  (optional field)
   bypass_header_checks char(1),     -- Y/N (optional field)
   spam_modifies_subj   char(1),     -- Y/N (optional field)
   spam_quarantine_to   varchar(64) DEFAULT NULL, -- (optional field)
   spam_tag_level  float,  -- higher score inserts spam info headers
   spam_tag2_level float DEFAULT NULL,  -- higher score inserts
               -- 'declared spam' info header fields
   spam_kill_level float,  -- higher score activates evasive actions, e.g.
               -- reject/drop, quarantine, ...
               -- (subject to final_spam_destiny setting)
   PRIMARY KEY (id)
  );
Заметка
Если у вас какие-то проблемы с использованием копирования и вставки, вы можете скопировать куда-нибудь данный текст, и убрать лишние символы.
Заметка
Запросы при попытках найти адрес электронной почты делаются с использованием "сырых" (rfc2821, без кавычек и скобок) адресов в качестве ключа, например: John "Funny" Smith@example.com
Заметка
Поиск осуществляется в следующем порядке: SQL , LDAP , хэш , ACL , регулярное выражение , константа . Как только что-либо вернет определенный ответ (не undef/NULL ), поиск останавливается.

Если вы хотите использовать белые и черные списки, вам нужно добавить отправителя и получателя mailadr, после чего вы можете создать отношение между двумя адресами электронной почты в wblist, и указать, является ли это белым списком ( W ) или черным списком ( B ).

После создания таблиц, давайте заведем тестового пользователя и тестовую политику:

КОД Создаем тестового пользователя и тестовую политику
INSERT INTO users
   SET
      id         =1,
      priority   =9,
      policy_id  =1,
      email      ="johndoe@example.com",
      fullname   ="John Doe",
      local      ="Y";
  
INSERT INTO policy
   SET
      id                     =1,
      policy_name            ="Test policy 1",
      virus_lover            ="N",
      spam_lover             ="N",
      banned_files_lover     ="N",
      bad_header_lover       ="N",
      bypass_virus_checks    ="N",
      bypass_spam_checks     ="N",
      bypass_banned_checks   ="N",
      bypass_header_checks   ="N",
      spam_modifies_subj     ="N",
      spam_quarantine_to     =NULL,
      spam_tag_level         =-50.0,
      spam_tag2_level        =7.0,
      spam_kill_level        =10.0;
Заметка
Скопируйте этот текст куда-нибудь еще, и подправьте его так, чтобы он описывал то, что вам нужно.
Заметка
local нужно установить в Y, иначе почта не будет проверяться на спам.

Данный текст добавляет тестового пользователя и тестовую политику. Измените эти примеры так, как вам необходимо. Более детальное объяснение имен конфигурации можно найти в файла amavisd.conf .

Конфигурация amavisd для использования MySQL

Теперь, когда мы настроили MySQL, нужно сообщить Amavis, что его нужно использовать:

ФАЙЛ amavisd.confОбновление для использования MySQL
@lookup_sql_dsn =
   ( ['DBI:mysql:maildb:host1', 'mail', 'very_secret_password']  );
  
# (Для ясности раскомментируйте значение по умолчанию)
$sql_select_policy = 'SELECT *,users.id FROM users,policy'.
   ' WHERE (users.policy_id=policy.id) AND (users.email IN (%k))'.
   ' ORDER BY users.priority DESC';
  
# (Если вы хотите белые/черные списки для отправителей)
   $sql_select_white_black_list = 'SELECT wb FROM wblist,mailaddr'.
     ' WHERE (wblist.rid=?) AND (wblist.sid=mailaddr.id)'.
     '   AND (mailaddr.email IN (%k))'.
     ' ORDER BY mailaddr.priority DESC';

Конфигурация Spamassassin для использования MySQL

Начиная с версии 3.0, Spamassassin может сохранять данные Байеса и AWL в базе данных MySQL. Мы будем использовать MySQL как бэкенд, так как он обычно работает быстрее остальных баз данных. Кроме того, использование MySQL для обоих наборов данных делает работу с системой гораздо быстрее. Я покажу, как быстро этого достичь:

Сначала создайте нового пользователя MySQL, затем создайте необходимые таблицы.

root #mysql -u root -p mysql
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 78 to server version: 4.0.18-log
  
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>Создаем базу данных dbname;
mysql>GRANT INSERT,UPDATE,DELETE,SELECT ON dbname.* TO 'dbuser'@'localhost' IDENTIFIED BY 'another_very_secret_password';
mysql>use dbname;

Теперь, после создания базы данных, создадим необходимые таблицы. Вы можете вырезать и вставить следующие команды в поле ввода программы mysql:

КОД Структура таблиц MySQL
CREATE TABLE bayes_expire (
          id                    int(11)         NOT NULL default '0',
          runtime               int(11)         NOT NULL default '0',
          KEY bayes_expire_idx1 (id)
          ) TYPE=MyISAM;
  
      CREATE TABLE bayes_global_vars (
          variable              varchar(30)     NOT NULL default '',
          value                 varchar(200)    NOT NULL default '',
          PRIMARY KEY           (variable)
          ) TYPE=MyISAM;
  
      INSERT INTO bayes_global_vars VALUES ('VERSION','3');
  
      CREATE TABLE bayes_seen (
          id                    int(11)         NOT NULL default '0',
          msgid                 varchar(200) binary NOT NULL default '',
          flag                  char(1)         NOT NULL default '',
          PRIMARY KEY           (id,msgid)
          ) TYPE=MyISAM;
  
      CREATE TABLE bayes_token (
          id                    int(11)         NOT NULL default '0',
          token                 char(5)         NOT NULL default '',
          spam_count            int(11)         NOT NULL default '0',
          ham_count             int(11)         NOT NULL default '0',
          atime                 int(11)         NOT NULL default '0',
          PRIMARY KEY           (id, token),
          INDEX (id, atime)
          ) TYPE=MyISAM;
  
      CREATE TABLE bayes_vars (
          id                    int(11)         NOT NULL AUTO_INCREMENT,
          username              varchar(200)    NOT NULL default '',
          spam_count            int(11)         NOT NULL default '0',
          ham_count             int(11)         NOT NULL default '0',
          token_count           int(11)         NOT NULL default '0',
          last_expire           int(11)         NOT NULL default '0',
          last_atime_delta      int(11)         NOT NULL default '0',
          last_expire_reduce    int(11)         NOT NULL default '0',
          oldest_token_age      int(11)         NOT NULL default '2147483647',
          newest_token_age      int(11)         NOT NULL default '0',
          PRIMARY KEY           (id),
          UNIQUE bayes_vars_idx1 (username)
          ) TYPE=MyISAM;
  
      CREATE TABLE awl (
          username              varchar(100)    NOT NULL default '',
          email                 varchar(200)    NOT NULL default '',
          ip                    varchar(10)     NOT NULL default '',
          count                 int(11)         default '0',
          totscore              float           default '0',
          PRIMARY KEY           (username,email,ip)
          ) TYPE=MyISAM;
Важно
Строка INSERT необходима, иначе Spamassassin не будет работать.
Заметка
Этот код также есть в архиве исходного кода, в файлах awl_mysql.sql и bayes_mysql.sql .

Конфигурация Spamassassin для использования MySQL

Если у вас старая база данных Байеса в базе данных DBM, и вы хотите ее сохранить, то следуйте следующим инструкциям:

root #su - amavis
user $sa-learn --sync
user $sa-learn --backup > backup.txt
user $sa-learn --restore backup.txt
Заметка
Заметьте, что последний шаг должен быть выполнен только после того, как база данных MySQL и файл secrets.cf были обновлены.

Теперь дадим Spamassassin требуемую информацию:

ФАЙЛ /etc/mail/spamassassin/secrets.cf
# (Скажем Spamassassin использовать MySQL для данных Байеса)
bayes_store_module              Mail::SpamAssassin::BayesStore::SQL
bayes_sql_dsn                   DBI:mysql:sa_bayes:localhost:3306
bayes_sql_username              db_name
bayes_sql_password              another_very_secret_password
  
# (Скажем Spamassassin использовать MySQL для данных AWL)
auto_whitelist_factory          Mail::SpamAssassin::SQLBasedAddrList
user_awl_dsn                    DBI:mysql:sa_bayes:localhost:3306
user_awl_sql_username           db_name
user_awl_sql_password           another_very_secret_password

Далее измените разрешения для необходимой безопасности:

root #chmod 400 /etc/mail/spamassassin/secrets.cf
Заметка
Чтобы создать очень секретный пароль, используйте emerge app-admin/makepasswd и makepasswd -chars=8

Теперь, все что вам осталось сделать, это /etc/init.d/amavisd restart .

Устранение проблем

Amavisd-new

Чтобы разобраться с проблемами Amavisd-new, начните с его остановки командой /etc/init.d/amavisd stop, а затем запустите его вручную на переднем плане с помощью amavisd debug, и посмотрите на какие-либо аномалии в выводе.

Spamassassin

Чтобы разобраться с проблемами Spamassassin вы можете отфильтровать почтовое сообщение с помощью spamassassin -D < mail. Чтобы удостовериться, что заголовки не повреждены, вы можете перенести его с другой машины по IMAP.

Заметка
Если вам нужно решить проблемы, вам нужно разрешить вход в систему пользователю amavis, изменив оболочку для входа в файле /etc/passwd на /bin/bash.

Если хотите, вы можете получить ту же самую информацию (и даже больше) с помощью Amavisd-new, используя amavisd debug-sa .

Повторяющиеся действия после установки

Некоторые из действий, описанных в данной статье нужно повторять после обновлений. Например, команду chown -R amavis:mailusers из раздела #doc_chap6 нужно повторять после каждого обновления amavisd-new.

К счастью, Gentoo дает вам способ сделать это автоматически. В главе вмешиваемся в процесс установки , настольная книга Gentoo объясняет, как выполнять задачи после установки конкретного пакета, вроде такого:

КОД Пример bashrc для запуска вышеописанного chown
if [ "${PN}" == "amavisd-new" ] &&
   [ "${EBUILD_PHASE}" == "postinst" ]; 
then
  chown -R amavis:mailusers /var/amavis/.maildir
fi

Получение помощи

Если вам нужна помощь, то можете зайти в список рассылки amavis-user. Перед тем, как вы зададите вопрос, попробуйте поискать в архиве списка рассылки Amavis User . Если вы не найдете там ответа, вы можете подписаться на список рассылки Amavis User

Если ваш вопрос конкретно относится к SpamAssassin, DCC, Razor или Postfix, зайдите на их домашние страницы, описанные ниже.

Ссылки

Для более детальной информации

Основные ссылки


This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Sune Kloppenborg Jeppesen, Jens Hilligs, Joshua Saddler
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.