Настройка серых списков (Greylisting) в Zimbra при помощи Policyd

Серые списки (англ. Greylisting) - способ автоматической блокировки спама, основанный на том, что если почтовый сервер получателя отказывается принять письмо и сообщает о «временной ошибке», сервер отправителя обязан позже повторить попытку. Спамерское программное обеспечение в таких случаях, обычно, не пытается этого делать. (с) Wikipedia.

В Zimbra управление серыми списками возможно через плагин Pilicyd. Как установить плагин с web-интерфейсом можно прочитать в статье Установка плагина Policyd с web-интерфейсом в Zimbra.

После установки плагина доступ к управлению можно получить по ссылке http://mail.example.org:7780/webui/index.php.

Для начала заполним группы internal_ips и internal_domains, которые создаются после установки (Policies - Groups). Добавьте локальные подсети и домены, которые обслуживает ваш почтовый сервер соответственно.

groups

По умолчанию помимо прочих создаётся политика Default Inbound, в нее попадают письма, отправленные извне, и предназначенные для нашего сервера:

policy

Создание правила Greylisting

Создадим правило проверки серых списков (Greylisting - Configure - Action: Add) для политики Default Inbound (параметр Link to policy):

greylist

Логика работы Greylisting заключается в том, что при первоначальной попытке доставить письмо в вашу систему, сервер-получатель обрывает соединение, а серверу отправителю выдаётся сообщение о временной недоступности вашего сервера.

Данные об отправителе попадают в базу данных Policyd, такая запись называется «триплет» (triplet), данные могут заноситься на основе ip-адреса отправителя или его подсети (за это отвечает параметр Track).

Если через оговоренный промежуток времени (Greylist Period) или позднее отправитель снова попытается отправить письмо, то Policyd в случае наличия триплета, доставит данное письмо получателю, отметив триплет как успешный. Следующие сообщения от отправителя будут приниматься без задержек (при наличии успешного триплета).

После того как количество удачных триплетов от отправителя станет больше определенного значения (AWL After Count) его адрес добавится в белый список, где будет храниться определенное количество секунд (AWL For Period).

Аналогичная ситуация с черным списком (Auto-Blacklisting).

Обязательно убедитесь, что везде Disabled: no (группы, политики, правила и т.д.)

Включим использование Greylisting в Zimbra:

$ zmprov mcf zimbraCBPolicydGreylistingEnabled TRUE

Перезапускаем плагин Policyd

# su - zimbra -c "zmcbpolicydctl restart"

Как посмотреть результат работы Policyd Greylisting

Посмотреть результат работы Greylisting можно по логам:

# cat /opt/zimbra/log/cbpolicyd.log | grep "module=Greylisting"
[2017/01/27-11:21:38 - 19099] [CORE] INFO: module=Greylisting, action=defer, host=94.58.111.82, helo=mx.itzx.ru, from=info@itzx.ru, to=test@example.org, reason=greylisted
[2017/01/27-11:28:01 - 21325] [CORE] INFO: module=Greylisting, action=pass, host=94.58.111.82, helo=mx.itzx.ru, from=info@itzx.ru, to=test@example.org, reason=authenticated
[2017/01/27-11:28:10 - 19681] [CORE] INFO: module=Greylisting, action=pass, host=94.58.111.82, helo=mx.itzx.ru, from=info@itzx.ru, to=test@example.org, reason=authenticated

Как видно сначала письмо откинуто (action=defer) по причине занесения в серый список (reason=greylisted), затем спустя несколько минут уже принято (action=pass), все последующие письма от info@itzx.ru с адреса 94.58.111.82 будут приняты сразу.

Теперь посмотрим, что добавилось в базу данных:

# su - zimbra $ sqlite3 /opt/zimbra/data/cbpolicyd/db/cbpolicyd.sqlitedb
sqlite> select * from greylisting_tracking;
SenderIP:94.58.111.82/32|info@itzx.ru|test@example.org|1485501698|1485515309|1|2

Оптимизация работы Policyd

Параметры сервера

Чтобы оптимизировать работу плагина для ваших нужд установите параметры в соответствии с рекомендациями:

Small mailserver: 2, 2, 4, 10, 1000 Medium mailserver: 4, 4, 12, 25, 1000 Large mailserver: 8, 8, 16, 64, 1000

Например для Small mailserver:

zmprov mcf zimbraCBPolicydMinServers 2 zmprov mcf zimbraCBPolicydMinSpareServers 2 zmprov mcf zimbraCBPolicydMaxSpareServers 4 zmprov mcf zimbraCBPolicydMaxServers 10 zmprov mcf zimbraCBPolicydMaxRequests 1000 zmcbpolicydctl restart

Описание параметров можно найти в файле /opt/zimbra/conf/cbpolicyd.conf.in.

Периодическая очистка базы данных

Для версий ZCS 8.6 и ниже, необходимо также периодически очищать базу данных Policyd специальной утилитой.

Для автоматической очистки базы добавьте в crontab задание:

35 3 * * * /opt/zimbra/cbpolicyd/bin/cbpadmin --config=/opt/zimbra/conf/cbpolicyd.conf  --cleanup >/dev/null

Скрипт для очистки таблицы session_tracking

При большой активности сервера таблица session_tracking может сильно разрастись и ее придётся периодически чистить, например раз в день.

Для этого создайте скрипт:

# mcedit /opt/zimbra/log/scripts/purge_cbpolicyd_daily.sql
delete from session_tracking where ((strftime('%s','now') - UnixTimestamp) > 86400);
vacuum;

Добавьте задание в zimbra.crontab:

su - zimbra $ crontab -e

после строки:

# ZIMBRAEND -- DO NOT EDIT ANYTHING BETWEEN THIS LINE AND ZIMBRASTART

вставьте:

0 * * * * cat /opt/zimbra/log/scripts/clean_cbpolicyd_daily.sql sqlite3 /opt/zimbra/data/cbpolicyd/db/cbpolicyd.sqlitedb

Добавить комментарий


Защитный код
Обновить