SPFに基づきエラーメールを抑制するSendmailパッチ

執筆:WIDE antispam WG
編集:佐川昭宏
作成:2006年6月6日
更新: 2006年9月1日

概要

SPFを普及させるための提案に基づき、エラーメールを抑制する実装を Sendmailへのパッチとして提供する。

効果

我々の環境では、13%のエラーメールを抑制した。 (エラーメールが生成される状況に占めるエラーメールを抑制した割合)

実装概要

本実装ではメールヘッダに含まれるAuthentication-Resultsヘッダにある SPF検証結果を参照し、検証結果がfailまたはsoftfail時にエラーメールの抑 制を行う。ヘッダの利用により外部との境界メールサーバから内部の配送サー バに転送する構成であっても、本機能を利用したSPFの恩恵にあずかれる。も ちろん、ヘッダを付加するsid-milterと本実装が同一のSendmailで動作しても 構わない。

エラーメールの抑制は、Sendmail内部のフラグを制御することによって実 現している。

ライセンス

Sendmailと同様とします。

ダウンロード

sendmail 8.13.8用
sm-dsn-supr-0.1.0-8.13.7.patch (2006年9月1日)

導入方法

1. パッチ当て

sendmailのソースコードに対し、本実装(パッチ)を適用する。

$ cd /tmp
$ tar -xzf sendmail.8.13.8.tar.gz
$ cd sendmail-8.13.8
$ patch -p1 < sm-dsn-supr-0.1.0-8.13.8.patch

2. ビルド・ディレクティブの追加

devtools/Site/site.config.m4 を作成し、以下のビルド・ディレクティブを加える。

APPENDDEF(`confENVDEF', `-D_FFR_DSN_SUPR_WITH_SPF')

3. コンパイル、インストール

Buildコマンドを利用してコンパイルする。

$ ./Build

コンパイル後、問題がなければrootユーザになり、インストールする。

$ su
# ./Build install

4. 設定の有効化とヘッダ作成ホストの指定

sid-milterが動作しているヘッダ作成ホストを指定するため、 sendmail.cfに以下の設定を加える。

O SPFRecieverHostMap=spf_recv_hosts
Kspf_recv_hosts hash -T<TMPF> /etc/mail/spf_recv_hosts

Authentication-Resultsの作成ホストは、 /etc/mail/spf_recv_hostsで定義する。左辺には作成ホスト名、右辺には何ら かの値を定義する。

(設定例)
mxhost.example.com         enabled

/etc/mail/spf_recv_hostsファイルを作成後、makemapコマンドを利用し、 db ファイルに変換する。

$ makemap hash /etc/mail/spf_recv_hosts < /etc/mail/spf_recv_hosts

5. 動作確認

sendmailを再起動させた後、メールを送って正常に動作しているか確認する。

正常に動作している場合は、エラーの有無に関わらず、softfail/failとなっ たメールが到着すると以下のようなログを出力する。

Jun  1 14:37:30 mxhost sendmail[14747]: k4V5aZwf014744: clear DSN flags for suppressing (spf=softfail)

また、Authentication-Resultsを作成したホストがデータベースマップで 確認できなかった場合は、以下のようなログを出力する。

Jun 1 15:49:36 ripple sendmail[17197]: k4V6nSYK017194: SPF receiver host is not found (maybe map is not defined), ignore this header

以上で、導入は完了である。

おまけ

contrib/est_dsn.plを利用するとエラーメール数を集計できる。

(出力例)
$ ./est_dsn.pl /var/log/maillog
Total incoming messages: 5307
Total delivered messages: 4901
Estimated DSN messages: 3418
Actual DSN messages: 2906
Suppressed DSN messages: 512
Total incoming messages
エラーメールを除いた外部からの送信メール数
Total delivered messages
Sendmailが配信を試みたメール数
Estimated DSN messages
配信が失敗し、送られるはずだったエラーメールの数
Actual DSN messages
実際にエラーメールを送信したメール数
Suppressed DSN messages
本実装によって抑制されたエラーメール数

一般に Estimated DSN messages = Actual DSN messages + Suppressed DSN messagesとなる。ただし、SMTPセッション中でDSNにてNOTIFY=NEVER と指 定された場合は、エラーメールを抑制するため、一致しないことがある。 (8.13.7以降で、DSNを無効化すれば、Sendmailによってエラーメールが抑制 されることはない。)

導入事例募集中

本パッチの導入事例を募集しています。sagawa+dsn_patch@sfc.wide までご連絡下さい。 同じアドレスで、ご意見・お問い合わせ等も承ります。
(迷惑メール防止のため、実際に送信する際は上記アドレスの末尾に .ad.jpを加えてご利用下さい)

更新履歴

2006年9月1日
Sendmail 8.13.8用パッチに更新。
英語版ページを公開
2006年7月13日
NOTIFY=NEVER時に計測結果が一致しないことを追記。
2006年6月16日
Sendmail 8.13.7用パッチに更新。
2006年6月6日
初版作成。Sendmail 8.13.6用パッチを公開。

Copyright © 2006 WIDE Project All rights reserved.