Почтовый шлюз с фильтрацией
Данная статья покажет пошаговые инструкция по установке технологий по борьбе со спамом для 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
для следующего пункта назначения.
(Создайте запись 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
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 знал, куда направлять почту.
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. Направьте почту на домен в левой части, и она будет перенаправлена в пункт назначения в правой части.
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
# (Вставьте какой домен проверять)
$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
# (Детальные логи с использованием 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
обновлять вирусные сигнатуры каждые два часа.
# (Логи с использованием Syslog)
LogSyslog
# (Детальные логи)
LogVerbose
# (Явно уберем привилегии root)
DatabaseOwner clamav
# (Проверять обновления каждые 2 часа. Это официальная рекомендация)
Checks 12
# (Используйте зеркало, которое ближе всего к вам. Замените XY на код вашей страны)
DatabaseMirror db.XY.clamav.net
Запустите clamd
м freshclam
, используя инициализационные скрипты, изменив /etc/conf.d/clamd .
START_CLAMD=yes
START_FRESHCLAM=yes
CLAMD_NICELEVEL=3
FRESHCLAM_NICELEVEL=19
IONICE_LEVEL=2
В конце, укажите в файле 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 .
# Включить систему Байеса
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.
read_hash("/var/amavis/sender_scores_sitewide"),
В файле sender_scores_sitewide вы помещаете полные адреса электронной почты, либо только их доменные части, а затем указываете положительное/отрицательное количество очков, которое нужно добавить к очкам спама.
# (Занести в белый список все письма с конкретного адреса электронной почты)
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
.
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
#Некоторые переменные по умолчанию
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
для доставки почты.
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, чтобы разрешить автоматическое обучение фильтра Байеса каждый час.
#Авто обучение
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
, при этом сохраняя заголовки спама.
# (Определить аккаунт, куда нужно посылать вирусную почту со спамом)
$spam_quarantine_to = "spamtrap\@$myhostname";
Очистка
Мы не хотим хранить почту вечно, поэтому будем использовать tmpwatch
, чтобы регулярно ее очищать. Установите эту программу командой emerge tmpwatch
. Только root
может запустить tmpwatch
, так что нам нужно отредактировать файл 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 :
policy-greylist unix - n n - - spawn
user=nobody argv=/usr/bin/perl /usr/bin/greylist.pl
Обычно демон spawn программы postfix убивает своих потомков через 1000 секунд, но это слишком мало для процесса работы с серыми списками, поэтому мы увеличим лимит времени в 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 :
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. Изменения почти те же самые, как мы делали при настройке серых списков.
# (Добавьте под 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, то почта может быть отклонена. Например, запись может выглядеть так:
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, чтобы он использовал новую политику.
policy-spf unix - n n - - spawn
user=nobody argv=/usr/bin/perl /usr/local/bin/spf.pl
Теперь добавьте проверку SPF в main.cf . Правильно настроенный SPF не должен повредить, поэтому мы можем проверять 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:
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, что его нужно использовать:
@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:
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 требуемую информацию:
# (Скажем 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 объясняет, как выполнять задачи после установки конкретного пакета, вроде такого:
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, зайдите на их домашние страницы, описанные ниже.
Ссылки
Для более детальной информации
- Установка Amavisd-new
- Документация по использованию Amavisd-new с Postfix
- Документация по банку политик Amavisd-new
- Документация по SQL в Spamassassin
- Серые списки
- Политики SMTPD для Postfix
- Блокирование спамеров с помощью контроля HELO Postfix
- Обзор
- Подсказки от Jim Seymour по поводу Postfix Anti-UCE
Основные ссылки
- Spamassassin
- Amavisd-new
- Кусочки документации по Amavisd-new
- Vipuls's Razor
- Pyzor
- Distributed Checksum Clearinghouse
- Maia Mailguard
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.