web-dev-qa-db-ja.com

Postfix:RBLおよびSPFチェックに合格した場合はACCEPT、そうでない場合はDUNNO / greylist。どうやってするの?

RBLおよびSPFチェックに合格したすべてのクライアント(およびいくつかのチェックも可能ですが、これらは私の最小要件です)を受け入れ、不合格のクライアントをグレーリストに入れたいと思います。クライアントがSPFチェックに合格すると(SPFレコードが存在し、失敗せず、ソフト失敗もありません)、ボットネットゾンビではなく、配信を再試行するMTAであることを確認できます。

これまでのところ、このルールを実装できる Whitelister を使用していますが、このルールは過去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
michau

???の代わりに何を置けばいいのかわかりません

A:check_policy_service


長い答え:

Postfixソースはreject_rbl_clientsmtpd/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 {

reject_rbl_clientの代わりに、postfixの設定で使用できます。

しかし、これは更新を維持するための追加の継続的なメンテナンスを意味します。新しいリリースが発生したときにソースにパッチを適用します。だから私は誰もその道を行くとは思わない。

その代わりに、whitelisterプログラムと同じように、外部ポリシーチェックを使用することをお勧めします。つまり、ここでcheck_policy_serviceを使用できます。適切なツール/プログラムが必要です。 (ところで、 ドロップされた理由があった ので、それからアップグレードすることを考えるのは良いことです。それはIPv6アドレスのチェックに失敗します。)

それに代わるものをチェックしている、(私が知っている、debian reposに)

それらのすべてPython実装-したがって、そのままでは望みどおりに動作しない可能性がありますが(私はチェックしていません)、かなり簡単に適応できるはずです。

さらなるものは

  • postfix-policyd-spf-Perl、
  • mtpolicyd (Perl)、
  • より複雑でモジュール化された " PolicyD "(Perl)

そしておそらくもっとたくさん。利用可能な多くのSPFライブラリに基づいて、独自に作成することもできます。

check_policy_service に関するドキュメントは少し軽いですが、 サンプルコードblurb のみがどのような値を説明しているかcheck_policy_service期待する:

結果は、Postfix access(5)マップで許可されている任意のアクションになります。

したがって、 access が次のストップです。DUNNOOKに変更すると、「多分合格、最初にさらにチェックを実行 "(>グレイリスト)ロジックを「メールに合格、ここでルール処理を停止 "。

これで、箱から出していない場合でも、ポリシーサーバーをホワイトリストシステムに変換する方法を理解できました。


補遺: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
nyov