Грейлистинг - это достаточно популярная технология противодействия спаму на почтовых серверах. Суть её заключается в том, что письмо от неизвестного хоста-отправителя принимается только со второго раза, а при первом соединении сообщается о временной ошибке. Спецификация SMTP протокола прямо обязывает серверы-отправители пытаться доставить письмо более одного раза, если возникли некритичные ошибки, так что никакие важные письма не потеряются. Однако спамеры зачастую не могут себе позволить такую роскошь, как повторная отправка, так что очень много спама через грейлист-фильтр не пройдёт. Подробнее про этот механизм можно почитать на Википедии.

В этой статье описывается установка и настройка грейлист-фильтра postgrey, предназначенного для работы с почтовым сервером Postfix.

Установка

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

sudo apt-get install postgrey

После установки программа сразу же готова к работе и больше ничего делать не надо.

Интеграция postgrey в postfix

Для интеграции postgrey в postfix необходимо добавить всего лишь одну строчку в конфигурационный файл последнего - проверку письма с помощью postgrey. Эта строчка добавляется в один из smtpd_*_restrictions параметров, чаще всего - в smtpd_recipient_restrictions. Строчка эта выглядит так:

check_policy_service inet:localhost:10023
В старых версиях Ubuntu postgrey использовал порт 60000, а не 10023. Посмотреть, какой порт использует postgrey в вашей системе, можно в его конфигурационном файле /etc/default/postgrey.

Выглядеть это должно примерно так:

smtpd_recipient_restrictions =
  ...
  # Greylisting с помощью postgrey
  check_policy_service inet:localhost:10023
  ...

Подробней про smtpd_*_restrictions параметры Postfix можно почитать в основной статье про Postfix, а так же в статье про фильтрацию спама на уровне SMTP протокола.

Настройка postgrey

postgrey представляет собой автономный демон, слушающий некоторый локальный порт, по умолчанию - 10023. Поменять опции запуска postgrey (например, изменить порт, который будет слушать демон), можно в файле /etc/default/postgrey. Узнать доступные опции можно выполнив

man postgrey

Кроме того, postgrey позволяет вручную отключать грейлистинг для определённых получателей и определённых отправителей. Делается это с помощью указания нужных шаблонов в соответствующих файлах белых списков, которые находятся в папке /etc/postgrey/. Вы можете использовать в этих файлах обычные Perl Regexp (регулярные выражения в стиле Perl), или же просто перечислить нужные адреса в столбик.

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

sudo /etc/init.d/postgrey reload