メール送信ドメイン認証 SPF と Sender-ID の設定 (3)


sid-filter のコンパイル

では sid-filter を動かしてみましょう。ソースディレクトリの INSTALL ドキュメントには目を通しておきましょう。まず、sid-filter と sendmail とが通信するためのソケットを指定します。TCP ソケットでなくても、UNIX ドメインソケットでも構いません。sid-filter を動かすマシンを集約するほどの大規模サイト(ってそんなケースあるのかなぁ)でなければ UNIX ドメインソケットの方がセキュアな気がします(もちろん Linux の iptables のようなパケットフィルタで縛るというのも不可能ではないですが、無意味にややこしくするだけですし)。サンプルでは 8891/tcp を使うようになっています。これが google とかで設定例を調べると判で押したように 8891 になっている理由のようです。

この設定については文献が少ないのですが、一番詳細だったのは sid-filter の man ページでした。これを日本語訳したものをつけておきますので何かの役に立てばと思います。


今回は /var/run 以下に touch で sid-filter という空ファイルを作って UNIX ドメインソケットとして利用してみます。手動で以下のように起動します。今回はテストですので最初から煮詰めた設定にはしていません。
/usr/bin/sid-filter -h -l -p local:/var/run/sid-filter -r 0
意味は、ヘッダを埋めこみ、ログを syslog に出して、チェックはするが受信拒否はしないモードにしているという状態です。なお、セキュリティに考慮して sid-filter に実行時のユーザを指定できますが、その場合には UNIX ドメインソケットの所有者もそのユーザにする必要があります。

次に、sendmail.cf を変更します。(INSTALL ドキュメントにはこっちを先にするよう書いてあったが、どう考えても後でしょう)

さきほどの mail.example.com.mc ファイルに
INPUT_MAIL_FILTER(`sid-filter',`S=local:/var/run/sid-filter')dnl
を追記します。で、sendmail を再起動し、vmfreebsd.my.example.jp からテストを送ります。

が、しかし。
From too@vmfreebsd.my.example.jp  Mon May  9 16:30:15 2005
Authentication-Results: mail.example.com from=too@vmfreebsd.my.example.jp; sende
r-id=neutral; spf=neutral
X-SenderID: Sendmail Sender-ID Filter v0.2.7 mail.example.com j497UFk0027691
Date: Mon, 9 May 2005 16:30:46 +0900 (JST)
From: too <too@vmfreebsd.my.example.jp>
To: too@mail.example.com
Subject: test2

test2
これで、sid-filter はちゃんと動いていることは確認できました。ただし、肝心の認証結果が「何とも言えない」になっているので、これから設定を煮詰めていくことになります。



まず、送信側ですが、too@vmfreebsd.my.example.jp から送信していることになっています。これを、too@my.example.jp となるよう、マスカレードしてみます。

vmfreebsd 側の sendmail.mc に
MASQUERADE_AS(`my.example.jp')dnl
を追加します。

すると、sender-id が pass になりました。
From too@vmfreebsd.my.example.jp  Mon May 16 12:45:06 2005
Authentication-Results: mail.example.com from=too@my.example.jp; sender-id=pass;
 spf=neutral
X-SenderID: Sendmail Sender-ID Filter v0.2.7 mail.example.com j4G3j66w014031
Date: Mon, 16 May 2005 12:45:47 +0900 (JST)
From: too <too@my.example.jp>
To: too@mail.example.com
Subject: test6

test6
前にも書いたとおり、sender-id はメールの本文に含まれる From: を見てドメインを認識し、TXTレコードを引いて確認します。このメールではドメインが my.example.jp になっていますね。実際に mail.example.com で my.example.jp の TXT レコードを問い合わせてみます。
[too@mail too]$ dig TXT my.example.jp @localhost

; <<>> DiG 9.2.1 <<>> TXT my.example.jp @localhost
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8128
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;my.example.jp.                 IN      TXT

;; ANSWER SECTION:
my.example.jp.          3600    IN      TXT     "v=spf1 mx a:vmfreebsd.my.example.jp 
-all"

;; AUTHORITY SECTION:
my.example.jp.          3600    IN      NS      vmfreebsd.my.example.jp.

;; ADDITIONAL SECTION:
vmfreebsd.my.example.jp. 3600   IN      A       10.1.2.2

;; Query time: 8 msec
;; SERVER: 127.0.0.1#53(localhost)
;; WHEN: Mon May 16 15:11:07 2005
;; MSG SIZE  rcvd: 124
ちゃんと帰ってきているので、pass になったようです。これは、my.example.jp ゾーンファイルでいうところの、
$TTL 3600
@       IN      SOA     vmfreebsd.my.example.jp. root.vmfreebsd.my.example.jp. (
                3       ;serial
                150     ;Refresh
                900     ;Retry
                300     ;Expire
                300 )   ;Minimum
        IN      NS      vmfreebsd.my.example.jp.
        IN      MX      10      vmfreebsd.my.example.jp.
        IN      TXT     "v=spf1 mx a:vmfreebsd.my.example.jp -all"

localhost       IN      A       127.0.0.1
vmhost          IN      A       10.1.2.1
vmfreebsd       IN      A       10.1.2.2
                IN      MX 10   vmfreebsd.my.example.jp.
が効いた結果です。ということは、SPF が
From too@vmfreebsd.my.example.jp  Mon May 16 12:45:06 2005
を見てDNSで TXT レコードを引けるようにするには、vmfreebsd.my.example.jp に対して TXT レコードを定義すればよいということになります。

$TTL 3600
@       IN      SOA     vmfreebsd.my.example.jp. root.vmfreebsd.my.example.jp. (
                5       ;serial
                150     ;Refresh
                900     ;Retry
                300     ;Expire
                300 )   ;Minimum
        IN      NS      vmfreebsd.my.example.jp.
        IN      MX      10      vmfreebsd.my.example.jp.
        IN      TXT     "v=spf1 mx a:vmfreebsd.my.example.jp -all"

localhost       IN      A       127.0.0.1
vmhost          IN      A       10.1.2.1
vmfreebsd       IN      A       10.1.2.2
                IN      MX 10   vmfreebsd.my.example.jp.
                TXT     "v=spf1 a:vmfreebsd.my.example.jp. ~all"
この状態でテストメールを送ると、
From too@vmfreebsd.my.example.jp  Mon May 16 17:47:13 2005
Authentication-Results: mail.example.com from=too@my.example.jp; sender-id=pass;
 spf=pass
X-SenderID: Sendmail Sender-ID Filter v0.2.7 mail.example.com j4G8lCkp014150
Date: Mon, 16 May 2005 17:47:50 +0900 (JST)
From: too 
To: too@mail.example.com
Subject: test 8 mail

test8
これでうまくいきました。ということは、この状態でドメイン全体の TXT を消すと、たぶん sender-id だけが neutral になるはずですよね。
From too@vmfreebsd.my.example.jp  Mon May 16 17:56:20 2005
Authentication-Results: mail.example.com from=too@my.example.jp; sender-id=neutr
al; spf=pass
X-SenderID: Sendmail Sender-ID Filter v0.2.7 mail.example.com j4G8uKbc014162
Date: Mon, 16 May 2005 17:56:59 +0900 (JST)
From: too 
To: too@mail.example.com
Subject: test9 mail

test9
予想通りでした。

これまでの結果をまとめると、この環境(メール送信者のアドレスがドメインで masquerade される場合)では極論すると、

「Sender-ID 対応にするにはドメインの TXT レコード、SPF 対応にするには各メール送信サーバごとの TXT レコードを定義してやる」

ことが必要になります。

次へ

前へ

目次に戻る
>