メール関係の技術で、「SPF (Sender Policy Framework)」というのがあります。これは、「あるドメインからメールを出すはずのIPアドレスを、ドメイン管理者が設定する。メール受信側では、その設定を見て、なりすましかそうでないかの判断材料にする」という仕組みです。
今回、sendmail環境でSPFを使用する「spfmilter」というソフトを入れてみました。FreeBSD (9.3-RELEASE) で行っています。
(1/20) configureの引数を追加しました(manがインストールされるディレクトリの修正)。
(1/20) spfmilter_flagsの記述を追加しました(root権限でなくても動作することを確認)。
「spfmilter」は、thttpd等でおなじみのAcme Labsが作成しているソフトです。使用するには、「libspf」か「libspf2」のいずれかが必要になります。FreeBSDではどちらもpkgになっているので、今回はlibspf2をあらかじめinstallしておきました。
インストール方法は、とても簡単です。
- 配布ページの「fetch the software」から、tarballを取得する。
- tarballを展開する。
- ‘./configure –mandir=/usr/local/man; make’ する。
- (以下root権限)
- /etc/mail/$(hostname).mcファイルに、「INPUT_MAIL_FILTER(`spfmilter’,`S=unix:/var/run/spfmilter.sock’)」を追加する。
- /etc/mail で「make ; make install」する。
- 「spfmilter unix:/var/run/spfmilter.sock」で、spfmilterを起動する。
- /etc/mail で「make restart」する。
- /var/log/maillog を確認し、spfmilterが起動していることを確認する。
いくつかメールを受信してみて、ヘッダ(後述)が正常に付いているようであれば、設定を永続化してしまいましょう。
- tarballの中の rc_scripts/freebsd を、/usr/local/etc/rc.d/spfmilter としてコピーする。
- /etc/rc.conf に、「spfmilter_enable=”YES”」「spfmilter_flags=”-u nobody”」を追加する。
spfmilterが起動しているときにsendmailがメールを受信すると、メールに以下のようなヘッダが追加されます。
まず、メールを送ってきたIPアドレスが、ドメイン管理者によって「pass」と登録されていた場合。(長いので折り返しますが、実際は1行です)
Received-SPF: pass (hoge.example.com: domain of ******@gmail.com designates 2a00:1450:4010:c07::236 as permitted sender) receiver=hoge.example.com; client-ip=2a00:1450:4010:c07::236; helo=mail-lf0-x236.google.com; envelope-from=***@gmail.com; x-software=spfmilter 2.001 http://www.acme.com/software/spfmilter/ with libspf2-1.2.10;
次に、メールを送ってきたIPアドレスが、「softfail」と登録されていた場合(大抵のドメインでは、passでなければsoftfailになります)
Received-SPF: softfail (hoge.example.com: domain of transitioning ****@mail.t-rrack.biz does not designate *.*.*.* as permitted sender) receiver=hoge.example.com; client-ip=*.*.*.*; helo=emily.t-rrack.biz; envelope-from=****@mail.t-rrack.biz; x-software=spfmilter 2.001 http://www.acme.com/software/spfmilter/ with libspf2-1.2.10;
なお、メールを送ってきたIPアドレスが「fail」と登録されていた場合は、メールを受け取らずに拒否します。
さて、この情報ですが、以下のように使えると思います。
- passの場合は、なりすましの可能性は低い。
- それ以外の場合は、なりすましの可能性は比較的高い。
例えば、From:行だけを偽っているような場合、From:行のドメイン管理者がSPFレコードを正しく登録していれば、passであるIPアドレス以外から発信されるメールは、passではないはずです。
ただ、メーリングリストの配信などはどうなる? という疑問もあり、この情報だけで判断するのは危険ですが、一つの指標にはなると思います。
ヘッダを付けておけば、bsfilterなどで判断材料にすることが出来るので、ご活用下さい。