Я хотел бы принимать всех клиентов, которые проходят проверки 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
Я не знаю, что я могу вставить вместо
???
A: 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
.
Но это означает дополнительные, постоянные , обслуживание, чтобы быть в курсе; исправление исходного кода по мере появления новых выпусков. Так что я не ожидаю, что кто-то пойдет этим путем.
Вместо этого вы захотите использовать проверку внешней политики, как это сделала для вас программа белый список
.
Это означает, что вы можете использовать здесь check_policy_service
, вам просто нужен правильный инструмент / программа для взаимодействия.
(Между прочим, неплохо было бы подумать об обновлении с этого, поскольку была причина его отбрасывания . Он не проходит проверку ни на одном IPv6-адресе.)
Проверка альтернатив этому, есть (что Я знаю, что в репозиториях debian)
все они являются реализациями Python, поэтому, хотя они могут не делать то, что вы хотите прямо из коробки (я не проверял), они должны быть довольно легко адаптируемыми.
Другие:
и, возможно, еще тонна. Вы даже можете написать свой собственный, основанный на множестве доступных SPF-библиотек.
Документация по check_policy_service
немного проста, только пример кода объясняет, какие значения check_policy_service
ожидает:
Результатом может быть любое действие, разрешенное в карте доступа Postfix (5).
Итак, access - следующая остановка, которая (возможно) объясняет, что изменение 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 и заданную реконфигурацию. Тестирую прямо сейчас...