ホワイトリストを使用して SPF ポリシーを上書きできますか? 方法は?

ホワイトリストを使用して SPF ポリシーを上書きできますか? 方法は?

私はLinode上でpostfixを実行しています。

Linux redacted 5.3.11-x86_64-linode131 #1 SMP PREEMPT Wed Nov 13 18:51:32 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
amavisd-new-postfix/xenial,xenial,now 1:2.10.1-2ubuntu1 all [installed]
postfix/xenial-updates,now 3.1.0-3ubuntu0.3 amd64 [installed]
postfix-mysql/xenial-updates,now 3.1.0-3ubuntu0.3 amd64 [installed]
postfix-pcre/xenial-updates,now 3.1.0-3ubuntu0.3 amd64 [installed]
postfix-policyd-spf-python/xenial,xenial,now 1.3.2-1 all [installed,automatic]

検疫をいじる代わりに、RBL および SPFFAIL の電子メールを拒否するように Postfix インストールを構成しました。残念ながら、私が電子メールを受信する必要がある会社があり、その会社の SPF レコードは長い間不正確でした。そのため、電子メールの代わりに、次のようなわかりやすいログが届きます。

4月1日 10:41:42 編集済み postfix/smtpd[18833]: NOQUEUE: 拒否: us-smtp-delivery-134.mimecast.com[216.205.24.134] からの RCPT: 550 5.7.1: 受信者アドレスが拒否されました: メッセージは SPF 失敗のため拒否されました - 承認されていません。http://www.openspf.net/Why?s=mfrom;id=redacted;ip=216.205.24.134;r=r​​edacted; from=< 編集済み> to=< 編集済み> proto=ESMTP helo=< us-smtp-delivery-134.mimecast.com>

当該企業には、自社の Web サイトや WHOIS 情報にこの問題を修正できそうな連絡先がありません (登録者 @dnstinations.com [サードパーティ ベンダー] は、DNS の設定が間違っているというサードパーティからの電子メールを無視すると思われます)。

初めてこのログを電子メールではなく受け取ったとき、*.mimecast.com をホワイトリストに登録しようとしましたが、何も変わりませんでした。そこで今日、main.cf を確認しました。SPF 設定がホワイトリストとは別の行にあることがわかったので、spf 固有のホワイトリストを別途作成できるのではないかと思いました。以前の main.cf は次のようになっています。

smtpd_client_restrictions = permit_sasl_authenticated, permit_mynetworks, check_client_access regexp:/etc/postfix/rbl_client_regex, check_client_access hash:/etc/postfix/rbl_client_override, reject_rbl_client zen.spamhaus.org, reject_rbl_client bl.spamcop.net, reject_rbl_client dnsbl.sorbs.net

smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, check_policy_service unix:private/policy-spf

smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, check_sender_access hash:/etc/postfix/access, reject_unknown_sender_domain

現在の状態は以下のとおりです:

smtpd_client_restrictions = permit_sasl_authenticated, permit_mynetworks, check_client_access regexp:/etc/postfix/rbl_client_regex, check_client_access hash:/etc/postfix/rbl_client_override, reject_rbl_client zen.spamhaus.org, reject_rbl_client bl.spamcop.net, reject_rbl_client dnsbl.sorbs.net

smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, regexp:/etc/postfix/spf_client_regex, check_policy_service unix:private/policy-spf

smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, check_sender_access hash:/etc/postfix/access, reject_unknown_sender_domain

基本的に、main.cfに「正規表現:/etc/postfix/spf_client_regex、" 前に "check_policy_service unix:private/policy-spf" の中に "smtpd_受信者制限" セクション。

また、次のエントリを含む /etc/postfix/spf_client_regex も作成しました (mimecast はスパム対策ベンダーなので、これは十分安全と思われます)。

/.*\.mimecast\.com$/    OK

postmap -q でテストしたところ、予想どおりの「OK」結果が得られ、「postmap /etc/postfix/spf_client_regex」を実行して更新内容を更新し、postfix をリロードしました。残念ながら、この送信者からのメールは SPF の失敗により引き続きブロックされます。

したがって、上記の手順は、reject_rbl_client ルールを無視する smtpd_client_restrictions セクションのホワイトリスト ルールに対して実行される手順と基本的に同じであることを考えると正しいと予想しましたが、機能しません。したがって、この投稿のタイトルに記載されているように、「ホワイトリストを使用して SPF ポリシーを上書きできますか? 方法は?」

答え1

OK、コメントを受けてマニュアルを少し読んでみましたクリフ・アームストロング、そして私は解決策を見つけたと思います。まず、smtpd_client_restrictionsとsmtpd_sender_restrictionsはどちらもテーブルの解析を許可していますが、どちらもポリシーの処理を許可していないことがわかりました。次に、カスタムポリシー作成できますが、これを解決するためにプログラミング言語を学ぶ必要はないように思えたので、検索してこの郵便受け特定の SPF ポリシー デリゲートに関するいくつかの妥当な不満と、現在利用可能な両方の SPF ポリシー デリゲートでホワイトリストに登録する方法についての説明。

幸運なことに、すでに「より良い」ポリシーデリゲートがインストールされていたので、それを変更する必要はありませんでした。

~$ apt list | grep policyd-spf

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

postfix-policyd-spf-perl/xenial,xenial 2.010-2 all
postfix-policyd-spf-python/xenial,xenial,now 1.3.2-1 all [installed,automatic]

次に、コメントされたファイルを確認しました (私の場合は gzip で圧縮されていたので、gunzip にコピーし、作業が終わったらそのコピーを削除しました)。すると、次のような関連するコメントが見つかりました。

#  Whitelist: CIDR Notation list of IP addresses not to check SPF for.
#  Example (default is no whitelist):
#  Whitelist = 192.168.0.0/31,192.168.1.12

#  Domain_Whitelist: List of domains whose sending IPs (defined by passing
#  their SPF check should be whitelisted from SPF.
#  Example (default is no domain whitelist):
#  Domain_Whitelist = pobox.com,trustedforwarder.org

それを踏まえると、ドメインホワイトリストコメントに「SPFチェックに合格したドメインはSPFからホワイトリストに登録される必要がある」とあるので、私には機能しません。これは奇妙に思えます(送信者がドメインのSPFチェックに合格した場合、ホワイトリストに登録する必要はありません)が、私はまだホワイトリストオプションを見つけたのでmimecast spf ドキュメント次に、nslookup を使用して IP を収集しました。

~$ nslookup
> set type=txt
> us._extnetblocks.mimecast.com
;; Truncated, retrying in TCP mode.
Server:         50.116.58.5
Address:        50.116.58.5#53

Non-authoritative answer:
us._extnetblocks.mimecast.com   text = "v=spf1 ip4:207.211.30.40 ip4:207.211.30.41 ip4:207.211.30.42 ip4:207.211.30.43 ip4:207.211.30.44 ip4:207.211.30.45 ip4:207.211.30.46 ip4:207.211.30.47 ip4:207.211.30.48 ip4:207.211.30.49 ip4:205.139.111.40 ip4:205.139.111.41 ip4:205.139.111.42 " "ip4:205.139.111.43 ip4:205.139.111.44 ip4:205.139.111.45 ip4:205.139.111.46 ip4:205.139.111.47 ip4:205.139.111.48 ip4:205.139.111.49 ~all"

Authoritative answers can be found from:
mimecast.com    nameserver = dns02.mimecast.net.
mimecast.com    nameserver = dns03.mimecast.net.
mimecast.com    nameserver = dns04.mimecast.net.
mimecast.com    nameserver = dns01.mimecast.net.

次に、その結​​果を取得して構成ファイルにドロップしました。

Whitelist = 207.211.30.40, 207.211.30.41, 207.211.30.42, 207.211.30.43, 207.211.30.44, 207.211.30.45, 207.211.30.46, 207.211.30.47, 207.211.30.48, 207.211.30.49, 205.139.111.40, 205.139.111.41, 205.139.111.42, 205.139.111.43, 205.139.111.44, 205.139.111.45, 205.139.111.46, 205.139.111.47, 205.139.111.48, 205.139.111.49

これは、これらの IP が他のドメインから送信することを自動的に許可し、IP が変更になる可能性があるため理想的ではありませんが、私のプライベート実装には十分です。そのため、独自のデリゲートを作成する方法を学習したり、誰かを雇ってデリゲートを作成したりするつもりはありません。これらの変更にもかかわらず、同様の NOQUEUE 結果が再び発生した場合は、この回答にメモを追加します。

関連情報