サイトマップ | 連絡先 | IAjapan TOP
IAjapan 財団法人インターネット協会
有害情報対策ポータルサイト 迷惑メール対策編
  • 一般利用者の皆様へ
  • メール管理者の皆様へ
  • 関連情報
  • サイト紹介

SPFとsid-milterの導入 ―― Solaris 10での実例

(本記事は、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ポータル

http://www.openspf.org/

 
リンク・転載・引用・ロゴ使用について | プライバシーポリシー | IAjapanについて | 連絡先