(本記事は、2007年3月に実施された「NSUG Solaris 10ナイトセミナー(vol.8) ~迷惑メール対策と送信ドメイン認証の実現~ SPFを設定するぞ!!」で使用された資料を再掲したものです)
寿限無株式会社
水越賢治
2008年3月
1. SPFとは
2. DNSサーバの設定
3. 準備と設定
3.1 sid-milterソースの入手
3.2 コンパイルとインストール
3.3 sid-milterを動かす
3.4 sendmail.cfを作る
4. 動作確認
5. 補足
5.1 その他のOSについて
5.2 参考資料
1. SPF とは
SPF(Sender Policy Framwork)とは、迷惑メール送信の技法のひとつである送信ドメインの偽装に対応するために用意された技術。自分の組織のDNSで送信するメールサーバを宣言することと、受信するメールサーバ側で受信したメールについて送信ドメインの偽装がないかチェックするフィルタからなる。sid-milterは、受信メールサーバ側でチェックに使うSMTPフィルタープログラム。
2. DNSサーバの設定
DNSサーバに自分のドメインが使用するメールサーバのホスト情報を書いておく。受信フィルタ側、たとえばsid-milterはこのSPFレコードを受信したメールと照合し、正しいホストから送信されたメールかどうかを判定する。
SPFレコードをDNSサーバに記述する。TXT属性とする。
mvs.co.jp. IN TXT "v=spf1 ip4:202.124.220.224/28 mx ~all" |
上記の例では、mvs.co.jpドメインはSPFバージョン1の宣言。IPv4アドレスとして“202.124.220.224/28”のIPアドレスを使う。MX宣言されたホストも使う。“~all”でソフトフェイル、つまり警告のみ。ほかに ipv6 や a などの属性もある。
DNSの宣言はあくまでも送信側のホスト情報を宣言するのみで、これによる直接的な変化はない。
3. 準備と設定
Solaris 10に付属のsendmailのバージョンは8.13.7または8.13.8で、milterオプション付きでビルドされているため、sendmailを入れ替えることなくそのまま使うことができる。
# /usr/sbin/sendmail -bi -d0 Version 8.13.8+Sun Compiled with: DNSMAP LDAPMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8 MIME8TO7 NAMED_BIND NDBM NETINET NETINET6 NETUNIX NEWDB NIS NISPLUS PIPELINING SCANF STARTTLS TCPWRAPPERS USERDB USE_LDAP_INIT XDEBUG ============ SYSTEM IDENTITY (after readcf) ============ (short domain name) $w = www2 (canonical domain name) $j = www2.mvs.co.jp (subdomain name) $m = mvs.co.jp (node name) $k = www2.mvs.co.jp ======================================================== |
sendmailのコンパイル情報が表示される。“MILTER”オプションがついているので、このsendmailではmilterを使用できる。
3.1 sid-milterソースの入手
以下のURLから入手する。
http://sourceforge.net/projects/sid-milter/
バージョンは、0.2.14 (2007年2月1日現在)。
3.2 コンパイルとインストール
Solaris 10をEntire Distributionでインストールすれば、プログラムのコンパイルに必要な開発ツールやライブラリは揃っている。実際にコンパイルするには、必要なツールが起動されるようにPATHを正しく設定する。
# PATH=/usr/sfw/bin:/usr/ccs/bin:/usr/local/bin:/usr/bin:/usr/sbin # export PATH # gzcat sid-milter-0.2.14.tar.gz | tar xvf - # cd sid-milter-0.2.14 # sh Build # cd obj.SunOS.5.10.sun4/sid-filter # cp sid-filter /usr/local/libexec/ |
Buildスクリプトでインストールもできるが、milterプログラム以外もインストールされてしまうので、プログラム本体をコピーしてもよい。
3.3 sid-filter を動かす
インストールしたsid-filterを起動する。オプションなしで起動すると、使用できるオプションが表示される。
# /usr/local/libexec/sid-filter sid-filter: usage: sid-filter -p socketfile [options] -a peerlist list of hosts to ignore -A auto-restart -D softfail DNS errors -d domlist domains to always pass -f don't fork-and-exit -h prepend identifying header -H name hostname to use in headers -l log activity to system log -L level libmarid log level -M text rejection message -P pidfile file to which to write pid -r level set rejection level -q quarantine instead of rejecting -t test-only mode -T secs DNS timeout -u userid change to specified userid -V print version number and terminate |
sendmailとの通信はソケットを使用する。
# /usr/local/libexec/sid-filter -l -p local:/var/run/sid-filter -P /var/run/sid-filter.pid -r 0 -t |
きちんと動かすためには、rcスクリプトを用意して自動起動する。
rcスクリプトの例
#!/sbin/sh # #ident "@(#)sid-filter 1.0 2006/11/15 miz" milter="/usr/local/libexec/sid-filter" milter_domain="www2.mvs.co.jp" milter_sock="local:/var/run/sid-filter" milter_pid="/var/run/sid-filter.pid" milter_flags="-l -h -r 0 -t" milter_opt="${milter_flags} -p ${milter_sock} -P ${milter_pid} -d ${milter_domain}" case "$1" in start) exec $milter $milter_opt ;; stop) pkill sid-filter rm -f /var/run/sid-filter ;; *) echo "Usage: $0 { start | stop }" exit 1 ;; esac exit 0 |
3.4 sendmail.cfを作る
SMTPフィルターを呼び出すようにsendmail.cfを作成してインストールする。Solaris 10にはm4 cfが付属しているので、簡単に作成できる。
# cd /etc/mail/cf/cf # cat www2.mc divert(-1) # # divert(0)dnl VERSIONID(`@(#)www2.mc 1.0 (miz) 06/21/2004') OSTYPE(`solaris8')dnl DOMAIN(`solaris-antispam')dnl INPUT_MAIL_FILTER(`sid-filter',`S=local:/var/run/sid-filter,F=T,T=R:2m')dnl
↑ この行を追加
MAILER(`local')dnl MAILER(`smtp')dnl |
mcファイルを修正したらsendmail.cfを作成し、sendmailを再起動する。
# make www2.cf # cp www2.cf /etc/mail/sendmail.cf # svcadm restart sendmail |
4. 動作確認
すべての設定が完了したら、メールを受信してみる。正しく動くと以下のように/var/log/syslogにログが記録される。
Nov 15 20:26:28 www2.mvs.co.jp sendmail[7478]: [ID 801593 mail.info] kAFBQSK8007 478: from=<miz@www2.mvs.co.jp>, size=325, class=0, nrcpts=1, msgid=<200611151126 .kAFBQSfp007477@www2.mvs.co.jp>, proto=ESMTP, daemon=MTA-v4, relay=localhost [12 7.0.0.1] Nov 15 20:26:28 www2.mvs.co.jp sendmail[7478]: [ID 801593 mail.info] kAFBQSK8007 478: Milter insert (1): header: Authentication-Results: www2.mvs.co.jp from=miz@ www2.mvs.co.jp; sender-id=neutral; spf=neutral |
受信したメールには以下のヘッダが付く。
SPFがOKの場合
Authentication-Results: www2.mvs.co.jp from=miz@mvs.co.jp; sender-id=pass; spf=pass |
SPFが定義されていない場合
Authentication-Results: www2.mvs.co.jp from=miz@www2.mvs.co.jp; sender-id=neutral; spf=neutral |
SPFがNGの場合
Authentication-Results: www2.mvs.co.jp from=marta5488@yahoo.co.jp; sender-id=softfail; spf=softfail |
5. 補足
5.1 その他のOSについて
sid- milterはcで書かれたプログラムで、UNIX系では簡単にコンパイルし、稼働させることができる。Linuxではrpmまたはsrpmでより簡単に導入することができるディストリビューションもあるし、FreeBSDではportsから簡単に導入できる。ぜひ積極的に利用して欲しい。
5.2 参考資料
・SPFポータル