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
???
の代わりに何を置けばいいのかわかりません
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 {
reject_rbl_client
の代わりに、postfixの設定で使用できます。
しかし、これは更新を維持するための追加の継続的なメンテナンスを意味します。新しいリリースが発生したときにソースにパッチを適用します。だから私は誰もその道を行くとは思わない。
その代わりに、whitelister
プログラムと同じように、外部ポリシーチェックを使用することをお勧めします。つまり、ここでcheck_policy_service
を使用できます。適切なツール/プログラムが必要です。 (ところで、 ドロップされた理由があった ので、それからアップグレードすることを考えるのは良いことです。それはIPv6アドレスのチェックに失敗します。)
それに代わるものをチェックしている、(私が知っている、debian reposに)
それらのすべてPython実装-したがって、そのままでは望みどおりに動作しない可能性がありますが(私はチェックしていません)、かなり簡単に適応できるはずです。
さらなるものは
そしておそらくもっとたくさん。利用可能な多くのSPFライブラリに基づいて、独自に作成することもできます。
check_policy_service
に関するドキュメントは少し軽いですが、 サンプルコードblurb のみがどのような値を説明しているかcheck_policy_service
期待する:
結果は、Postfix access(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.