Я хотел бы принимать всех клиентов, которые проходят проверки RBL и SPF (и, возможно, некоторые проверки, но это минимальные требования для меня), и заносить в серый список тех, кто этого не делает. Когда клиент проходит проверку SPF (запись SPF существует, нет сбоев, нет мягких сбоев), мы можем быть уверены, что это не зомби ботнета, а MTA, который попытается повторить доставку, поэтому нет особого смысла в серых списках таких клиентов.
До сих пор я использовал Белый список, который может реализовать это правило, но он не поддерживался последние 10 лет или около того и недоступен в современных дистрибутивах, поэтому я ищу альтернативы. Насколько я понимаю, Postfix может отклонять только тех клиентов, которые находятся в RBL, но не может использовать RBL как части более сложных условий, поэтому я не вижу способа использовать reject_rbl_client
Вот. Есть ли демон политики, который может выполнять такие проверки?
Мои ограничения на получателей в main.cf следующие. Я не знаю, что я могу заменить ???
:
smtpd_recipient_restrictions =
check_sender_access regexp:/etc/postfix/sender_access_regexp,
permit_mynetworks,
permit_sasl_authenticated,
reject_unknown_sender_domain,
reject_unauth_destination,
???,
check_policy_service unix:postgrey/postgrey.sock
Я не знаю, что я могу заменить
???
А: check_policy_service
Длинный ответ:
Исходный код postfix реализует reject_rbl_client
в smtpd/smtpd_check.c
Я ожидаю, что он должен сработать, чтобы добавить туда еще одну функцию, которая реализует копию reject_rbl_addr
функция с обратной логикой - без ответа DUNNO
но OK
для успешной проверки.
--- a/postfix/src/smtpd/smtpd_check.c
+++ b/postfix/src/smtpd/smtpd_check.c
rbl = find_dnsxl_addr(state, rbl_domain, addr);
if (!SMTPD_DNSXL_STAT_OK(rbl)) {
- return (SMTPD_CHECK_DUNNO);
+ return (SMTPD_CHECK_OK);
} else {
Который затем можно было бы использовать в конфигурации postfix вместо reject_rbl_client
.
Но это означает дополнительное постоянное обслуживание, которое необходимо обновлять; исправление исходного кода по мере появления новых выпусков. Так что я не ожидаю, что кто-то пойдет по этому пути.
Вместо этого вы захотите использовать проверку внешней политики, поскольку whitelister
программа сделала за вас. Это означает, что вы можете использовать check_policy_service
здесь вам просто нужен правильный инструмент / программа для взаимодействия. (Между прочим, неплохо было бы подумать об обновлении с этого, поскольку причина его отказа. Он не проходит проверку ни на одном IPv6-адресе.)
Проверяя альтернативы этому, есть (о которых я знаю, в репозиториях debian)
все они являются реализациями Python, поэтому, хотя они могут не делать то, что вы хотите из коробки (я не проверял), они должны быть довольно легко адаптируемыми.
Остальные
и, возможно, еще тонну. Вы даже можете написать свой собственный, основанный на многих доступных библиотеках SPF.
Документация о check_policy_service
немного светлее, только пример рекламного кода объясняет, какие ценности check_policy_service
надеется:
Результатом может быть любое действие, разрешенное в карте доступа Postfix (5).
Так доступ следующая остановка, которая (возможно) объясняет, что изменение DUNNO
для OK
превратится "возможно-пройти, сначала выполните дальнейшие проверки"(> серый список) логику в"почта прошла, остановите обработку правил здесь".
Итак, теперь вы знаете, как превратить любой сервер политики в систему белых списков, даже если он не делает этого из коробки.
Приложение: Как настроить сервер политик из policyd-spf
README (хотя я думаю, вы знаете об этом, основываясь на белом списке на postgrey).
Installing
----------
1. Add the following to /etc/postfix/master.cf:
policyd-spf unix - n n - 0 spawn
user=policyd-spf argv=/usr/bin/policyd-spf
2. Configure the Postfix policy service in /etc/postfix/main.cf:
smtpd_recipient_restrictions =
...
reject_unauth_destination
check_policy_service unix:private/policyd-spf
...
policyd-spf_time_limit = 3600
NOTE: Specify check_policy_service AFTER reject_unauth_destination or
else your system can become an open relay.
3. Reload Postfix.
Теория: если вы добавляете проверку политики SPF перед проверкой серого списка и она возвращает разрешение для результатов прохождения SPF, оценка ограничений должна остановиться на этом.
В main.cf:
smtpd_recipient_restrictions =
check_sender_access regexp:/etc/postfix/sender_access_regexp,
permit_mynetworks,
permit_sasl_authenticated,
reject_unknown_sender_domain,
reject_unauth_destination,
check_policy_service unix:private/policy-spf,
check_policy_service unix:postgrey/postgrey.sock
в /etc/postfix-policyd-spf-python/policyd-spf.conf:
Mail_From_pass_restriction = permit
Если теория верна, следует установить уже упомянутый postfix-policyd-spf-python и данная реконфигурация. Тестирую прямо сейчас ...