Постфикс: ACCEPT, если проверки RBL и SPF проходят, DUNNO / greylist в противном случае. Как это сделать?

Я хотел бы принимать всех клиентов, которые проходят проверки 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
4
задан 25 August 2019 в 13:46
2 ответа

Я не знаю, что я могу вставить вместо ???

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, поэтому, хотя они могут не делать то, что вы хотите прямо из коробки (я не проверял), они должны быть довольно легко адаптируемыми.

Другие:

  • postfix-policyd-spf-perl,
  • mtpolicyd (Perl),
  • более сложный и модульный " PolicyD " (Perl)

и, возможно, еще тонна. Вы даже можете написать свой собственный, основанный на множестве доступных 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.
2
ответ дан 3 December 2019 в 03:53

Теория. Если вы добавите проверку политики 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 и заданную реконфигурацию. Тестирую прямо сейчас...

0
ответ дан 27 August 2020 в 16:23

Теги

Похожие вопросы