Довольно спорный, но достаточно эффективный инструмент для борьбы со спамом – грейлистинг. Суть проста, не принимать почту от новых источников, отклонив письмо на несколько минут со словами "зайдите завтра". Добропорядочный почтовый сервер обязательно зайдет. Типичный бот-спаммер – нет. Так и живём.
1. Установка Postgrey для Postfix на платформе Debian
Пакет Postgrey уже имеется в репозиториях Debian, поэтому сразу приступим к его установке:
root@mail:/# apt-get install postgrey Warning: The home dir /var/lib/postgrey you specified can't be accessed: No such file or directory Adding system user `postgrey' (UID 111) ... Adding new group `postgrey' (GID 112) ... Adding new user `postgrey' (UID 111) with group `postgrey' ... Not creating home directory `/var/lib/postgrey'. Creating config file /etc/postgrey/whitelist_clients with new version Creating config file /etc/postgrey/whitelist_recipients with new version Creating config file /etc/default/postgrey with new version [ ok ] Starting postfix greylisting daemon: postgrey.
Фактически, сразу после установки – всё готово к употреблению. Взгялнув на файл конфигурации /etc/default/postgrey, либо посмотрев через netstat, определяем порт 10023, на котором работает эта служба. Здесь же видно, что письма "откладываются" на 300 секунд и прошедшие проверку отправители запоминаются на 35 дней.
По умолчанию, Postgrey отклоняет новые сообщения на 5 минут (300 секунд), но как показывает практика имеет смысл сократить этот промежуток до одной минуты, используя опцию --delay. В дальнейшем, проанализировав лог Вы можете изменить это значение в любую сторону, по Вашему желанию.
root@mail:/# vim /etc/default/postgrey POSTGREY_OPTS="--inet=10023 --delay=60"
Также, как видно по логу установки, создано два белых списка для перечисления доменов-отправителей и клиентов-получателей, от которых почта будет проходить без задержки. Действительно может быть логичным "отбелить" прохождение почты на ящики вида postmaster@ или abuse@ (иначе рейтинг Вашего почтового сервера может пострадать) или с почтовых серверов Gmail.
Дело осталось за малым, добавить наш инструмент в цепочку smtpd_recipient_restrictions, вот таким способом:
smtpd_recipient_restrictions = permit_mynetworks ... reject_unauth_destination # реализуем greylisting через postgrey check_policy_service inet:localhost:10023
Перезапускаем Postfix и служба начинает нести бессменную вахту на страже нашего почтового сервера.
root@mail:/# service postgrey start root@mail:/# service postfix reload
Также добавим службу Postgrey в автозагрузку:
root@mail:/# chkconfig postgrey --level=345 on
Пример успешной работы службы можно посмотреть на примере этого кусочка лог-файла:
May 16 09:03:25 mail postfix/smtpd[1535]: connect from verifier.port25.com[96.244.219.19] May 16 09:03:25 mail postgrey[1280]: action=greylist, reason=new, client_name=verifier.port25.com, client_address=96.244.219.19, sender=auth-results@verifier.port25.com, recipient=admin@example.com May 16 09:03:25 mail postfix/smtpd[1535]: NOQUEUE: reject: RCPT from verifier.port25.com[96.244.219.19]: 450 4.2.0 <admin@example.com>: Recipient address rejected: Greylisted, see http://postgrey.schweikert.ch/help/example.com.html; from=<auth-results@verifier.port25.com> to=<admin@example.com> proto=ESMTP helo=<verifier.port25.com> May 16 09:03:25 mail postfix/smtpd[1535]: disconnect from verifier.port25.com[96.244.219.19] ... ... May 16 09:13:26 mail postfix/smtpd[1544]: connect from verifier.port25.com[96.244.219.19] May 16 09:13:26 mail postgrey[1280]: action=pass, reason=triplet found, delay=601, client_name=verifier.port25.com, client_address=96.244.219.19, sender=auth-results@verifier.port25.com, recipient=admin@example.com ...
2. Отчеты Postgreyreport
Одновременно с установкой Postgrey, устанавливается замечательный инструмент для генерации отчётов postgreyreport. Сий инструмент парсит Ваш почтовый лог-файл и сравнивает со своей базой, выводя хосты/отправителей/получателей, так и не повторивших посылку в течении заданного времени.
Типичный пример:
root@mail:/# cat /var/log/mail.info | /usr/bin/postgreyreport --delay=300
В зависимости от нагрузки на Ваш почтовый сервер, Вы можете получить огромное число записей на выходе. В таком случае, например, для отображения последних 20-ти популярных IP-адресов отправителей и количества застрявших писем, используйте команду:
root@mail:/# cat /var/log/mail.info | postgreyreport | awk '{print $1}' | sort | uniq -c | sort -nr | head -n20
Чтобы получить список 20 популярных клиентов-получателей с указанием числа "застрявших" (неподтверждённых) сообщений, используйте:
root@mail:/# cat /var/log/mail.info | postgreyreport | awk '{print $4}' | sort | uniq -c | sort -nr | head -n20
Впечатляет, неправда-ли? И вообще, почитайте справку и будет Вам щастье:
root@mail:/# postgreyreport -h
Комментарии 2
- 1
Иван — Dec 03, 2017 at 12:28 PM
Спасибо мил человек. После прикручивания этого инструмента до меня долетает меньше 1% спама.
Мощно!
Василь — Feb 01, 2016 at 04:54 PM
Как насчёт статьи про перевод базы postgrey на mysql? Статья что я нашёл, очень старые и работать на последних версиях postgrey не будут.