Фильтрация спама при помощи exim и greylistd


Введение

Большая часть спама рассылается при помощи бот-сетей (сетей организованных из зараженных вирусом компьютеров). Поскольку рассылку спама выполняет не полноценный почтовый сервер, то найдя особенности, отличающие его от такового мы можем отличить спам от обычных писем. Что делает почтовый сервер в случае если он по какой-то причине не может сразу доставить почту? Правильно, делает повторы с увеличивающимися таймаутами. Вирус на подобные действия не имеет ни времени, ни ресурсов, поэтому если имитировать ошибку доставки письма, то обычной почте это не повредит, а спам-письмо скорее всего доставлено не будет.

Такой способ называется фильтрацией писем на основе серых листов. При коннекте к почтовому серверу, проверяется IP отправителя, адреса From, To на наличие их в списке сервера. Если таковые адреса в списке сервера уже имеются, то почта принимается. В противном случае сервер отвечает отказом сессии и отправитель вынужден сделать повтор спустя какой-то промежуток времени. Адрес отправителя при отказе принять от него письмо заносится в так называемый серый список. При повторном соединении от этого отправителя его адрес будет перемещен на некоторое (обычно этот интервал в диапазоне нескольких недель) в так называемый белый список и прием с этого адреса будет разрешен в течение всего этого времени.

Что есть в Debian на эту тему?

В дебиан для использования фильтрации на основе серых листов необходимо просто установить пакет greylistd:

apt-get install greylistd

Далее, как обычно в Debian, все просто. Просматриваем два конфига только что установленного демона.

/etc/greylistd/config

Этот конфиг после установки уже довольно оптимально настроен, поэтому в большинстве случаев его достаточно просто просмотреть. Наиболее интересные параметры в данном конфиге следующие:

retryMin     = 600

Это интервал в течение которого повторы сделанные клиентом рассматриваться не будут. Тут задается время в секундах. Типовое значение 10 минут. Некоторые пользователи пытаются уменьшить это время, пытаясь таким образом уменьшить паузу на доставку писем. Ставить слишком маленькие значения не имеет смысла, потому что

retryMax     = 28800

Интервал "жизни" записи в сером списке. Если в течение этого интервала сервер сделает повторную передачу, то адрес передающего сервера попадет в белый список.

expire       = 5184000

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

/etc/greylistd/whitelist-hosts

В этот список можно поместить адреса (или домены) заведомо неспам-серверов. Обычно заполнение данного конфига не требуется, однако имеет смысл сюда прописать IP-адреса Ваших резервных MX.

А теперь попробуем со всем этим взлететь

После того как конфиг-файлы были отредактированы (или просмотрены), нужно (пере)запустить сервер greylistd:

/etc/init.d/greylistd restart

Теперь надо сделать так, чтобы наш почтовый сервер мог использовать greylistd, для этого запустим скрипт, идущий в составе пакета greylistd:

greylistd-setup-exim4 add

Данная команда установит в каталог /etc/exim4/conf.d два файла с acl-инструкциями. Теперь нужно дать знать exim-серверу, чтобы он перечитал конфиги:

/etc/init.d/exim4 restart

Все система работает.

Работа

Для контроля состояния и работы демона есть утилита greylist. Демон ведет некоторую статистику, посмотреть которую можно командой greylist stats, например:

# greylist stats
Statistics since Thu May 15 15:13:49 2008 (9 days and 4 hours ago)
------------------------------------------------------------------
235 items, matching 5224 requests, are currently whitelisted
  0 items, matching    0 requests, are currently blacklisted
945 items, matching  982 requests, are currently greylisted

Of 27417 items that were initially greylisted:
 -   235 (  0.9%) became whitelisted
 - 27182 ( 99.1%) expired from the greylist

В приведенном примере мы видим статистику работы демона за последние 9 дней. Демон установлен на не особо нагруженном (домашнем) сервере, однако из статистики видно, что данный метод позволил отфильтровать более 99% спама. Более 27000 писем просто не дошли до spamassassin-а!

с помощью данной команды можно посмотреть содержимое белого и серого списков:

#greylist list

После длительного периода работы данные списки довольно объемны, поэтому для нахождения в них нужного адреса применяйте утилиту grep. Учтите, что команда greylist list выводит оба списка сразу, поэтому в сочетании с grep используйте опции --white или --grey:

#greylist list --white

Покажет Вам содержимое белого списка, а

#greylist list --grey

Покажет содержимое серого списка.

Примечания