Postgrey

From SysadminWiki.ru
Jump to: navigation, search

Postgrey - средство для борьбы со спамом, использует механизм серых списков (grey listing). Принцип его работы - временный отказ в принятии почты в надежде, что спамеры не будут повторять отправку. Не очень хороший способ, поскольку замедляет доставку почты и увеличивает трафик самого Интернета, так как почтовые сервера вынуждены отправлять одно сообщение несколько раз, но трафик от провайдера уменьшиться на величину объёма отказанных писем. Пока этот способ довольно действенен.

Postgrey включен во многие дистрибутивы линуксов. Рассмотрим как его установить и настроить в Alt Linux и Debian. После этого рассмотрим как устанавливать, если брать исходники с сайта.

Настройка для Zimbra описана на http://wiki.zimbra.com/wiki/Improving_Anti-spam_system#Greylisting


Устанавливаем Postgrey из пакетов

Итак, устанавливаем в Alt Linux и Debian следующей командой:

# apt-get install postgrey

Где лежит документация по настройке узнаём из списка установленных файлов пакета:

# rpm -ql postgrey

в Alt Linux или для Debian:

# dpkg -L postgrey

Добавляем в /etc/postfix/main.cf ещё одну строку к параметру smtpd_recipient_restrictions:

smtpd_recipient_restrictions =
...
reject_unauth_destination check_policy_service inet:127.0.0.1:10023

127.0.0.1:10023 - адрес по которому слушает postgrey, в некоторых дистрибутивах используется порт 60000. Белые списки находятся в /etc/postgrey создаём здесь дополнительно свой список с доверяемыми доменами вида *.local, например whitelist_of_our_own.local:

# our domains
mydomain.ru
my.domain.net

# we trust the following domains
mail.ru
list.ru

На этом настройка закончена. Запускаем демон postgrey, перегружаем postfix и добавляем postgrey в автозапуск:

# /etc/init.d/postgrey start
# /etc/init.d/postfix restart
# chkconfig postgrey on
# chkconfig --list postgrey
postgrey        0:off   1:off   2:on    3:on    4:on    5:on    6:off

Устанавливаем Postgrey из исходников

б) Теперь рассмотрим случай установки Postgrey вручную, а не с помощью менеджера пакетов. Берём свежий дистрибутив с официального сайта http://postgrey.schweikert.ch. Доустанавливаем необходимые для него модули Net::Server, IO::Multiplex. Как это сделать можно узнать в статье Perl. Также понадобятся BerkeleyDB (Perl module) и Berkeley DB (Library, version ≥ 4.1), поэтому установим (названия пакетов для Debian):

# apt-get install libberkeleydb-perl

- Создаём пользователя postgrey:

# useradd postgrey

- Чтобы этим пользователем не смогли зайти в систему меняем в /etc/passwd командный интерпритатор на /dev/null:

postgrey:x:505:506::/home/postgrey:/dev/null

теперь при попытке зайти этим пользователем получим сообщение: Access denied

- Создаём каталог для базы данных. Там же он будет создавать свой lock файл. Даём права для доступа для пользователя postgrey:

# mkdir /var/spool/postfix/postgrey
# chown postgrey.postgrey /var/spool/postfix/postgrey

если система не создала группу postgrey, то можно указать группу к которой принадлежит postfix:

# id postfix
uid=107(postfix) gid=108(postfix) groups=108(postfix)
# chown postgrey.postfix /var/spool/postfix/postgrey

- Копируем файлы postgrey_whitelist_clients и postgrey_whitelist_recipients и сам postgrey в /etc/postfix. В первом файле перечисляем все почтовые домены, в которых мы уверены, что там спамеров нет. Также сюда занесём тех, кто имеют проблемы с технологией серых списков. Ряд таких доменов уже занесён автором проекта в этот список. Во втором файле указываем пользователей, которые не желают пользоваться услугами отсева спама. Здесь как минимум нужно указать одну запись - postmaster, чтобы с нами могли связаться коллеги сисадмины в случае проблем.

- Добавляем в /etc/main.cf правило check_policy_service:

smtpd_recipient_restrictions =
permit_mynetworks
...
reject_unauth_destination check_policy_service inet:127.0.0.1:10023

- Проверяем как запускается:

# /etc/postfix/postgrey --inet=10023 -d

На этом шаге нам будет понятно все ли требуемые модули у нас установлены. Если запуск произошёл без ошибок и демон остался в памяти, то всё установлено, подготовлено и можно смотреть как это работает

# ps ax | grep postgrey
6250 ?        Ss     0:00 /etc/postfix/postgrey --inet=10023 -d

- Демон postgrey в памяти. Обновляем конфигурацию postfix:

# /etc/init.d/postfix reload

- Проблем не должно возникнуть. Добавляем запуск postgrey при старте ОС, т.е. добавляем в /etc/rc.d/rc.local:

/etc/postfix/postgrey.pl --inet=10023 -d