sendmailのm4マクロ定義INPUT_MAIL_FILTERを用いて、milterサーバと通信する方法を指定します。詳細はsendmail付属のcf/READMEに記述があります。
milterの動作不良、異常終了によるバウンスメールの発生を避けるため、問題発生時に一時的エラー(4xx)を返す設定を推奨します。 複数のmilterを使用する場合は、INPUT_MAIL_FILTERを複数記述します。
milterのアドレス指定の書式は以下のようになります。
例) INPUT_MAIL_FILTER(`filter1', `S=inet:10000@127.0.0.1, F=T, T=R:1m')dnl
この例では以下の通りの設定になります
●表2 INPUT_MAIL_FILTER引数一覧
例の値 | 説明 |
filter1 | フィルタ識別名称。任意の文字列が使用可能 |
S=inet:10000@127.0.0.1 | milterサーバ指定。このアドレスに接続 |
F=T | milter接続失敗時の動作。R(5xxエラー)、T(4xxエラー)が指定可能 |
T=R:1m | milterの読み込みタイムアウト値。未指定時は10秒なため延長 |
このプログラムによって提供されるのは「Sender ID」「SPF」に基づいて送信者のメールアドレスを検証する部分のみです。インストールされたプログラム名は「sid-filter」となります。現状では、検証結果に基づいた受信拒否はトラブルの原因となる可能性があります。そのため、受信拒否はせずに結果をヘッダに追加する設定をお勧めします。
例) sid-filter -l -p inet:10000@127.0.0.1 -t -T 10 -A
●表3 sid-filterコマンドラインオプション一覧
例の値 | 説明 |
-p inet:10000@127.0.0.1 | milterアドレスの指定。このアドレスで接続を受け付ける |
-l | syslog経由でログを記録 |
-t | ヘッダに検証結果を追加するのみの動作となる |
-T 10 | SPFレコード検証の際に発生するDNS問い合わせの待ち時間を制限 |
-A | milterプロセスが異常終了した場合自動起動 |
このプログラムは「DomainKeys」の署名と検証両方の機能を提供します。インストールされたプログラム名は「dk-filter」となります。今回の説明で使用するコマンドラインオプションは以下の通りです。
●表4 dk-filterコマンドラインオプション一覧
例の値 | 説明 |
-p inet:10001@127.0.0.1 | milterアドレスの指定。このアドレスで接続を受け付ける |
-l | syslog経由でログを記録 |
-c nofws | 署名時における本文の正規化方法を指定 |
-b s | 署名のみの動作 |
-b v | 検証のみの動作 |
-i /tmp/hostlist | 署名対象とするクライアントのIPアドレスを指定(未指定時は127.0.0.1のみ) |
-T 10 | DNS問い合わせの待ち時間を制限 |
-s /tmp/keypath | 署名時に使用する秘密鍵のファイルを指定 |
-d example.com | 署名対象とするFromヘッダのドメインを指定 |
-S key1 | 署名時に使用するセレクタを指定 |
-H | 署名対象としたヘッダの一覧を明示的に記述 |
-A | milterプロセスが異常終了した場合自動起動 |
(a) 署名
dk-filterの設定の他にDNSのゾーンへ公開鍵を登録する作業が必要になります。署名対象となるのは以下の条件を共に満たす場合です。
DNSに登録の必要があるものは以下の2つです。
鍵は付属するツール gentxt.csh で生成することができます。 生成と同時にDNSのゾーンに記述するレコードも出力されます。
$ cd /tmp/dk-milter-0.3.0/dk-filter $ ./gentxt.csh <key1> example.com <key1>._domainkey IN TXT "g=; k=rsa; t=y; p=MFwwDQYJKoZIhvcN..." ; …… DomainKey <key1> for example.com |
ゾーンに登録、レコードが参照可能であることを確認します。
$ dig <key1>._domainkey.example.com. txt <key1>._domainkey.example.com 1H IN TXT "g=; k=rsa; t=y; pMFwwDQYJKoZIhvcN..." |
_domainkey.example.com. のレコードを記述していない場合はこれも追加します。
$ dig _domainkey.example.com. txt _domainkey.example.com. 1H IN TXT "t=y; o=~" |
上記スクリプトの実行により同一ディレクトリに鍵が生成されます。 生成された秘密鍵 key1.private が -s オプションの引数で指定するファイルです。
$ ls <key1>.p* <key1>.private <key1>.public |
例) dk-filter -l -p inet:10001@127.0.0.1 -c nofws -b s -s /path/key -i /path/hostlist -d example.com -S <key1> -H -A
署名は、以下のようなヘッダとして追加されます。
DomainKey-Signature: a=rsa-sha1; s=<key1>; d=example.com; c=nofws; q=dns; h=to:from:subject; b=SNJf5........==
(b) 検証
検証のみの場合はDNSレコードの登録、鍵の生成は必要ありません。 標準設定で検証結果によるバウンスメールは発生しません。
例) dk-filter -l -p inet:10002@127.0.0.1 -A -T 10 -b v
検証結果は以下の様なヘッダとして追加されます。
Authentication-Results: mx.example.com; domainkeys=pass
このプログラムは「DKIM」の署名と検証両方の機能を提供します。 インストールされたプログラム名は「dkim-filter」となります。
大半のコマンドラインオプションはdk-filterと同じですが、以下の点が変更されています。
(a) 署名
DomainKeys同様にDNSへのレコード登録、鍵の生成が必要です。 互換性があるためDomainKeys用に生成したレコード、鍵をそのまま使えます。
例) dkim-filter -l -p inet:10003@127.0.0.1 -c nowsp -b s -s /path/key -i /path/hostlist -d example.com -S key1 -A
署名結果は以下のようなヘッダとして追加されます。
DKIM-Signature: a=rsa-sha1; c=nowsp; d=example.com; s=key1; t=1123140900; h=To:From; b=YwFxKqMur......==
(b) 検証
検証のみの場合はDNSレコードの登録、鍵の生成は必要ありません。 標準設定で検証結果によるバウンスメールは発生しません。
例)dkim-filter -l -p inet:10004@127.0.0.1 -A -T 10 -b v
検証結果は以下のようなヘッダとして追加されます。
Authentication-Results: mx.example.com header.From=sender@example.com; dkim=pass
《PREV》 |