カテゴリー
FreeBSD PC

sendmail + spfmilter でSPFを有効活用する

メール関係の技術で、「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しておきました。

インストール方法は、とても簡単です。

  1. 配布ページの「fetch the software」から、tarballを取得する。
  2. tarballを展開する。
  3. ‘./configure –mandir=/usr/local/man; make’ する。
  4. (以下root権限)
  5. /etc/mail/$(hostname).mcファイルに、「INPUT_MAIL_FILTER(`spfmilter’,`S=unix:/var/run/spfmilter.sock’)」を追加する。
  6. /etc/mail で「make ; make install」する。
  7. 「spfmilter unix:/var/run/spfmilter.sock」で、spfmilterを起動する。
  8. /etc/mail で「make restart」する。
  9. /var/log/maillog を確認し、spfmilterが起動していることを確認する。

いくつかメールを受信してみて、ヘッダ(後述)が正常に付いているようであれば、設定を永続化してしまいましょう。

  1. tarballの中の rc_scripts/freebsd を、/usr/local/etc/rc.d/spfmilter としてコピーする。
  2. /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などで判断材料にすることが出来るので、ご活用下さい。

Share this...