迷惑メール対策としてSPFという仕組みが導入されています。
このSPFとはなんでしょうか?
財団法人インターネット協会の迷惑メール対策委員会のページによると、
送信側は、あらかじめ自ドメインの権威DNSサーバ上に自ドメインの送信者がメールを外部に向けて送出する可能性のあるメールサーバのIPアドレスの一覧を記述(公開)する。この宣言を行うDNSリソースレコード(RR)が「SPFレコード」である。受信者はメールの受信時、送信者として指定されたメールアドレスのドメイン部分に示されるドメインのSPFレコードをDNSより取得して、SMTP接続先のIPアドレスが取得したSPFレコードと一致するか確認することで、送信ドメインの認証を実施する。
つまり、自サーバに接続してきたSMTPプロトコルの発信元のIPアドレスと、メールのFromのドメイン名をDNSで調べて得たSPFレコードを突き合わせて正しい送信元か判断する、ということになります。
では、これをqmailに導入することにしましょう。
目的は、qmailでSFPのヘッダを付けて、spamassassinでスコアを減らしたいということです。
では、実際に組み込んでみましょう。
パッチをあて、インストール
SPF implementation for qmail
ここからパッチをダウンロードしてあてることになるのですが、うまくいきません。
SMTP Authのパッチと競合するようです。
それで、SPFのパッチを当ててから、他のすべてのパッチをあて、そして最後にSMTP Authのパッチをあてます。
そうすると、Makefileとqmail-smtpd.cだけ、拡張子rejのファイルが出来ますので、それの中身を見ながら手作業で適用します。
かなり面倒なので、パッチ適用済みのtarボールを置いておきます。
qmailを止め、make setup check して、完了です。
Received-SPF: pass (0: SPF record at example.jp designates 10.0.0.10 as permitted sender)
上記のようなヘッダーが埋め込まれているはずです。
2015/06/24追記
どうもスパムでもSPFをpassするものがあるなー、と思っていたら、同様のことを考えておられる方がいました。
もっと早く見ていれば良かった・・・
SPF (Sender Policy Framework) チェックをパスしてしまう迷惑 (スパム) メールが増えている
DNSのtxtレコードに
"v=spf1 ip4:10.232.64.0/19 +all"
などと書かれていて、結局全部OKじゃん!みたいな(笑)
もしかしたら設定をミスしていて、それを見つけたスパム業者が、そのドメインを使っているだけかもしれないんですけどね・・・
ともかく、このような場合は、「neutral」にしてくれるパッチを上記サイトで入手できます。
当サイトバックアップ
パッチ済みtarボール
設定
■ /var/qmail/control/spfbehaviorを作る
0: Never do SPF lookups, don’t create Received-SPF headers
1: Only create Received-SPF headers, never block
2: Use temporary errors when you have DNS lookup problems
3: Reject mails when SPF resolves to fail (deny)
4: Reject mails when SPF resolves to softfail
5: Reject mails when SPF resolves to neutral
6: Reject mails when SPF does not resolve to pass
ということなので、1のヘッダーを作るだけにします。
ただファイルに「 1 」と入れるだけです。
qmailをリスタートします。
service qmail stop; service qmail start
■ /etc/mail/spamassassin/private_prefsを作る
SPFヘッダがpassだった時スコアを下げます。ただ運用して分かったのは、RayBanの宣伝メールはSPFヘッダがpassになるものが多いということです。DKIMまで付けてくる始末です。一緒に拒否しましょう。
# SPF header HEADER_SPF_CHECK ALL =~ /Received-SPF: pass/ describe HEADER_SPF_CHECK header contains SPF-pass score HEADER_SPF_CHECK -10 # RayBan header HEADER_RAY_BAN ALL =~ /rayban/i describe HEADER_RAY_BAN Header contains rayban score HEADER_RAY_BAN 30
SPFヘッダがpassならスコアを-10します。raybanが含まれていれば、30足します。
リスタートします。
service spamassassin restart
■ /home/vpopmail/domains/example.jp/user/.qmailに設定
spamassassinを使っている人なら、
|spamc | tomaildir ./Maildir
となっているはずです。
このままで大丈夫です。
これで、SPFヘッダーがある場合は、スパムから除外されやすくなります。
それでも、広告メールなんかは、スパムと判断されますね。
まあ、広告ですから仕方がないですね。