OpenBSD、OpenSMTPD、spamd
、およびpf
を使用してメールサーバーをセットアップしようとしています。私が遭遇した最初の問題は、Gmailのような多くの大規模なウェブメールプロバイダーが、異なるIPアドレスを持つ異なるサーバーからの配信を再試行し、グレーリストをホワイトリストに渡すのを困難にすることです。 GRAYタプルのIPでPTRリクエストを実行し、結果のドメインを手動で管理されている信頼できるドメインのリストと比較することで役立つと思われるスクリプトを作成しました。
spamdb -a X.X.X.X
でホワイトリストに登録した後、spamdb
から消えて、WHITEレコードとして表示されないのはなぜですか。それらがホワイトリストに登録されると、それはIP全体に適用されるはずであり、その時点でGRAYタプルは廃止されていると思います。これらのspamdb
タプルの典型的なライフサイクルは何ですか?いくつかが消えたり、いくつかが複製されたり(GREY、WHITE)などが見られました。pf
テーブルとしてロードして、これらの信頼できるドメインからの接続を直接smtpd
に渡す必要がありますか?つまり、spamd
を通過してこれらのIPをspamdb -a
でホワイトリストに登録し、それを<spamd-white>
pfテーブルに追加するのではなく、spamdb
をバイパスしてそのままにします。それらはグレーリストに登録されており、いくつかのpfホワイトリストテーブルに直接移動します。定期的に実行して、検出されグレーリストに登録された信頼済みドメインを自動的にホワイトリストに登録するために作成したドラフトスクリプトを次に示します。
#!/bin/sh
set -A whitelist \
Amazon.com \
google.com
spamdb | while read line
do
IFS="|"
set -A fields $line
status=${fields[0]}
if [[ $status = "GREY" ]]
then
ip=${fields[1]}
ptr=`Host ${ip}`
IFS="."
set -A tokens $ptr
size=${#tokens[*]}
domain="${tokens[size-2]}.${tokens[size-1]}"
found=false
IFS=" "
for whitelisted in ${whitelist[@]}
do
if [[ $domain = $whitelisted ]]
then
found=true
fi
done
if (($found))
then
echo "+ $ip ($domain) has been whitelisted"
spamdb -a "$ip"
else
echo "- $ip ($domain) is unrecognized"
fi
fi
done
exit 0
それは異なります™:
PTR
レコードがfalseになる可能性があることに注意してください-PTR
の一部として.google.com
を取得したからといって、でIPアドレスを制御しているのがGoogleであるとは限りません。質問。確かに、アクションを実行する前に前方解決を行うこともできます(ただし、公平を期すために、PTR
を変更できる人は誰でもそうなる可能性があるため、グレーリストの場合の影響は非常に限られています。そもそもグレーリストをうまくバイパスすることができます)。sh
からのインターネット入力を処理することは最善のアプローチではないかもしれません。http://BXR.SU/OpenBSD/usr.sbin/spamdb/spamdb.c#dbupdate をご覧ください。ただし、コードは読みやすくなるように記述されているようには見えません。
どちらのアプローチでも問題ないと思います。 spamdb
を使用してこの自動化されたホワイトリストを維持する方が、メンテナンス、有効期限、および少しの統計を処理するため、おそらく簡単です。ただし、独自のリストを維持している場合は、ネットワーク全体のホワイトリストを作成するという追加の利点があります。
また、これをGoogle、Amazon、および正しいSPFレコードを保持するその他のプロバイダーだけに限定したい場合は、自動化された手段を使用しても、すべてのIPアドレスを一度に取得することでゲームを直接進めることができると考えてください(たとえば、SPFの助けを借りて)。 https://support.google.com/a/answer/60764 を参照してください。ほとんどの場合、既存のSPFライブラリを使用して、これらすべてのIPアドレスのリストを取得できます。