メールサーバ(Postfix)にSPFをチェックさせてみます

この記事は約13分で読めます。

こんにちは

今日は、サーバネタです。

長くなるので先に目的を書いておきます。SPFの設定はしていますが、受信側としてはチェックをしていないので、SPFチェックを追加しようと思います。

 

このブログが有るサーバもメールサーバが起動してまして、独自ドメインメールの送受信をしています。

ご存知な方も多いかと思いますが、日頃使っているメールのサーバ間の送受信って、SMTP(Simple Mail Transfer Protocol)と言う取り決めで行われています。
このメールの送受信と言うか、インターネットの生い立ち、アメリカの大学と研究機関で作られた事もあり、手順自体が性善説でできており、悪用する事は基本考えられていません。
この事もあり、送信者を偽るなんて少し知ってれば簡単にできてしまいます。

本来であれば、手続き(プロトコル)自体で排除すれば良いのですが、悪用が問題になる前に広がってしまって、変更ができなかったのかなと思ってます。なので、悪用を排除する仕組みはうわっかぶせと言うか、追加される形で実装されててきていまして、基本的な所で性善説なのは余り変わっていません。(^_^;

毎日来る、SPAMメールに辟易している人も多いんじゃないでしょうか?

メールも世の中の基盤的な意味を持つ様になり、騙し放題と言う訳にも行きませんので、メールのベースに追加する形で、色々な対策(機能?)が追加されてきています。

ざっくり言うと、自分を証明する事を送信側で行い、受信側でそれを使うかどうかを判断する感じです。すべての送信元が高度な証明をしているわけじゃないので、正しいメールをすべて受信するためには、相手先が証明してないからと言って排除して良いのかが非常に難しいです。
このぐらい対応できてない相手からのメールは、悪意が無くても捨てる!と言う判断が必要になります。
不特定多数が利用するメールサーバ等では、一概に切り捨てる事もできないので、迷惑メールにタグを付けるなどして、受信して利用するユーザで判断すると言う形が一般的かなと思います。

自分の管理するメールサーバでもチェックはしていても拒否はしていません。とりあえず受信しています。対応していない相手が悪い!と破棄するのはなかなか難しいです。
ただ、個人サーバであれば、バッサリ切り捨てる!という判断も可能ですよね。

 

大分昔になりますが、携帯電話のメール(MMS)で各キャリアがSPF認証に対応していないメールは基本受信しない!との対応が発表され、私の管理するメールサーバでも送信者証明と言う形で、設定しました。

と言う事で、それなりに対応していますが、もうちょっと対応を追加しようかなと思います。

 

メールの(サーバで設定する)SPAM対策って、主流な所で以下の物があるかなと思います。ざっくり書いてみます。(辞書使用なので、中身を見て判定するものは別とします)

SPF:ドメイン(メアドの@の後ろ)が送信するメールサーバを送信先が公表します。
実際にメールが送信されたサーバが、相違する場合は偽物かも?

DKIM:メール送信時にメールに電子署名をする事で、メール自体のなりすましや改ざんを検知

DMARC:SPF,DKIMを補完します。NGとなった際に受信側でどうして欲しいかを指定できます。
また、NGとした際に、レポートを送信する事ができます。レポートは送信側で対応してれば来ます
※個人的にはgmail以外から来た事がありません。

 

設定しておくと、送信した先で、迷惑メールと判断される可能性が下がると思います。と言う意味で設定しています。

私の管理するサーバでは、SPF,DKIM,DMARCを送信元として設定しています。

私の管理するサーバからgmailにメールを送ってみます。

gmail側でメールヘッダを見ると、dkim,spf,dmarcのチェックがpassとなっています

Received-SPF: pass (google.com: domain of info@kingyo.info designates 160.16.211.103 as permitted sender) client-ip=160.16.211.103;
Authentication-Results: mx.google.com;
dkim=pass header.i=@kingyo.info header.s=200310 header.b=mt2KtJEi;
spf=pass (google.com: domain of info@kingyo.info designates 160.16.211.103 as permitted sender) smtp.mailfrom=info@kingyo.info;
dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kingyo.info/* Your code... */

gmailから私の管理するメールサーバへ送信してメールヘッダを見てみます。dkimだけチェックしてメールヘッダに追加されています。
SPFと、DMARCは送信側の設定のみで、受信処理時には意識してないんですよね。
他のメールを見てみましたが、DKIMの設定は大手の企業さんは対応していますが、全体的に見て未設定の企業が多い様に見えます。DKIMで認証できないメールを破棄すると必要なメールの多くが破棄されてしまいますので、DKIMをみてSPAMの排除はまだ早そうです。

Authentication-Results: mail.kingyo.info; 
    dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="B1lPFbTS"

SPFはかなり昔(iMode全盛の時代)から有るものなので、結構浸透しているんじゃないかと思います。 メールヘッダへのチェック結果を設定するようにして、様子を見て必要なメールの殆どが届きそうなら、破棄またはメールクライアント側でSPAMボックスに移動する様にしたいなと思います。 めちゃくちゃ前置きが長かったですが、SPFのチェック結果をメールヘッダに追加してみます。(※後で気づきましたが、SPFがNGな物は導入したツールで破棄されていて、メールヘッダにSPFチェックの結果を追加するだけのツールじゃなかったです

以下のページを参考に導入してみようと思います。

→ SPF対応/griffonworks.net

ツールをダウンロードします。

[root@sak-tk2 ~]# cd /usr/local/src/
[root@sak-tk2 src]# wget https://launchpad.net/postfix-policyd-spf-perl/trunk/2.011/+download/postfix-policyd-spf-perl-2.011.tar.gz 
--2021-03-09 17:51:33-- https://launchpad.net/postfix-policyd-spf-perl/trunk/2.011/+download/postfix-policyd-spf-perl-2.011.tar.gz
launchpad.net (launchpad.net) をDNSに問いあわせています... 91.189.89.223, 91.189.89.222, 2001:67c:1560:8003::8004, ...
launchpad.net (launchpad.net)|91.189.89.223|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 303 See Other
場所: https://launchpadlibrarian.net/380695266/postfix-policyd-spf-perl-2.011.tar.gz [続く]
--2021-03-09 17:51:35-- https://launchpadlibrarian.net/380695266/postfix-policyd-spf-perl-2.011.tar.gz
launchpadlibrarian.net (launchpadlibrarian.net) をDNSに問いあわせています... 91.189.89.229, 91.189.89.228, 2001:67c:1560:8003::8008, ...
launchpadlibrarian.net (launchpadlibrarian.net)|91.189.89.229|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 15562 (15K) [application/x-tar]
`postfix-policyd-spf-perl-2.011.tar.gz' に保存中
100%[====================================================================================>] 15,562 72.8KB/s 時間 0.2s
2021-03-09 17:51:37 (72.8 KB/s) - `postfix-policyd-spf-perl-2.011.tar.gz' へ保存完了 [15562/15562]

ツールをインストールします。場所は悩みましたが、/usr/local/binにインストールしました。

[root@sak-tk2 bin]# cd /tmp
[root@sak-tk2 tmp]# mkdir inst
[root@sak-tk2 tmp]# cd ./inst
[root@sak-tk2 inst]# tar -zxvf /usr/local/src/postfix-policyd-spf-perl-2.011.tar.gz
postfix-policyd-spf-perl-2.011/
postfix-policyd-spf-perl-2.011/README
postfix-policyd-spf-perl-2.011/config.sh
postfix-policyd-spf-perl-2.011/postfix-policyd-spf-perl
postfix-policyd-spf-perl-2.011/
postfix-policyd-spf-perl.in 
postfix-policyd-spf-perl-2.011/INSTALL 
postfix-policyd-spf-perl-2.011/CHANGES 
postfix-policyd-spf-perl-2.011/LICENSE
[root@sak-tk2 inst]# mv ./postfix-policyd-spf-perl-2.011/postfix-policyd-spf-perl* /usr/local/bin/ 
[root@sak-tk2 inst]# cd .. 
[root@sak-tk2 tmp]# rm -rf ./inst/

パッケージが足りなかったので以下の4つをインストールしました。

version.pm
Sys/Syslog.pm
Mail/SPF.pm
Sys/Hostname/Long.pm

/etc/postfix/master.cfに以下の内容を追加

#
# SPF
#
policy unix - n n - - spawn
 user=nobody argv=/usr/bin/perl /usr/local/bin/postfix-policyd-spf-perl
/etc/postfix/main.cfに”check_policy_service unix:private/policy,”を追加
"reject_unauth_destination,"より下が必須だそうです。
smtpd_recipient_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_unauth_destination,
        check_policy_service unix:private/policy,
        reject_non_fqdn_recipient,
        permit

メールサーバ(postfix)の設定を読み込みます。

postfix reload

メールを受信してみてメールサーバのログに出力される事を確認できました。

Mar 9 18:10:56 sak-tk2 postfix/policy-spf[17164]: Policy action=PREPEND 
Received-SPF: pass (gmail.com ... _spf.google.com: Sender is authorized to use 
'xxxx@gmail.com' in 'mfrom' identity (mechanism 'include:_netblocks.google.com' matched)) 
receiver=sak-tk2.kingyo.info; identity=mailfrom; 
envelope-from="xxxx@gmail.com"; helo=mail-lf1-f54.google.com; client-ip=209.xx.xxx.xxx

受信したメールヘッダにも追加されてました。

Received-SPF: pass (gmail.com ... _spf.google.com: Sender is authorized to use 
'xxxx@gmail.com' in 'mfrom' identity (mechanism 'include:_netblocks.google.com' matched)) 
receiver=sak-tk2.kingyo.info; identity=mailfrom; 
envelope-from="xxxx@gmail.com"; helo=mail-lf1-f54.google.com; client-ip=209.xx.xxx.xxx

暫く様子を見て破棄するか検討してみます。

その後。。

真面目?に送ってきてるSPAMメールの殆どがSPF対応してました。(^_^;
SPFチェックで弾くべきメールが来ないじゃん!と思ったら、SPFチェックがFail(NG)なメールはREJECT(DROPかも?)されてました。来ないわけです(^_^;
ここの所で立て続けにRBL(メールサーバのブラックリスト)でメールの不達を経験してるので、一旦RBLを外しました。
RBLチェックを外しても来るSPAMメールの数は変わらないか、少し減ってる感じです。
SPFチェックだけでかなり弾けてそうです。

余談ですが、この記事を書きながらGmailから自分のサーバにメールを送ったら来ないので、何れ?と調べたらRBLにgmailのサーバが登録されていました。マジ!?RBLはちょっと危ないなと思いました。10年以上使ってきて今更?(笑)

とりあえず、ドメインの終わりが.cyouから大量にSPFに対応してるSPAMが来てて面倒なので、.cyouで終わるドメインを全拒否してみました(^_^;
cyouって何か?と思ったら、see youらしいです。全てのSPAMでドメインの綴が微妙に違うのですが、ドメインの登録料安いの?とお名前.comで見たら初年度160円でした。なるほど。。(^_^;

SPFチェックだけで、詐欺メールが来なくなった感がものすごくします。
詐欺メールとかウィルスメールって、メールの内容を信用させるのに、送信元を詐称してるから。。SPFチェックで弾けていると思われます。
SPF設定って、自分のドメインをSPAM判定されづらい様に設定しているつもりでしたが、自分のドメインからのメアドを詐称された際に、受信側で詐称を判断できる材料でも有るんだなと再認識ました。

メールを見てましたが、殆どのメールのSPFチェック結果がPASSになってて、none(未設定)になるのは、ほんと一部でした。noneのメールを排除しても良いかも?と思えます。
どことは言いませが、宣伝メールを送るのを事業にしてる企業で、メールアドレスをサブドメイン化してサブドメインに対して、設定を忘れてるんだと思われます。(^_^;

コメント