Postfix, OpenDKIMはインストール済み、firewallも適切に設定済みであると仮定。
鍵ペアの作成
| 1 2 3 4 5 6 | cd /etc/opendkim/keys/ mkdir example.com cd example.com opendkim-genkey -d example.com -s selector chown opendkim:opendkim * chmod 440 *.private | 
※複数のドメインを異なるキーペアで認証する場合は上記を繰り返し、必要数分キーペアを作成する。ドメインが異なればセレクタ名は同じでも大丈夫だが、混乱を避けるため変えてもよいと思う。
OpenDKIMの設定
1つのドメインしか扱わない場合
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |  : # 認証するドメイン名 Domain example.com  :  # セレクタ名 Selector selector  : # 署名に使う秘密鍵の場所 KeyFile  /etc/opendkim/keys/selector.private  : # 署名に使う秘密鍵の場所(複数ある場合) #KeyTable  /etc/opendkim/KeyTable  :  # 署名を行うドメイン+セレクタのペアを指定するファイル(複数ある場合) #SigningTable refile:/etc/opendkim/SigningTable  : | 
複数のドメインを扱うが、すべて同じキーペアを使う場合
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |  : # 認証するドメイン名 Domain example.com, hoge.com, fuga.com または  Domain example.com, * Domain *   :  # セレクタ名 Selector selector  : # 署名に使う秘密鍵の場所 KeyFile  /etc/opendkim/keys/selector.private  : # 署名に使う秘密鍵の場所(複数ある場合) #KeyTable  /etc/opendkim/KeyTable  :  # 署名を行うドメイン+セレクタのペアを指定するファイル(複数ある場合) #SigningTable refile:/etc/opendkim/SigningTable  : | 
複数のドメイン、複数のキーペアを扱う場合
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |  : # 認証するドメイン名 #Domain example.com  :  # セレクタ名 #Selector selector  : # 署名に使う秘密鍵の場所 #KeyFile  /etc/opendkim/keys/selector.private  : # 署名に使う秘密鍵の場所(複数ある場合) KeyTable  /etc/opendkim/KeyTable  :  # 署名を行うドメイン+セレクタのペアを指定するファイル(複数ある場合) SigningTable refile:/etc/opendkim/SigningTable  : | 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | # 作成者認証(例)################################ # ①FROMドメインが"example.com"の時は"selector"セレクタを使い、 # "example.com"の署名を使い認証する *@example.com selector._domainkey.example.com # ②FROMドメインが"hoge.com"の時は"selector"セレクタを使い、 # "hoge.com"の署名を使い認証する *@hoge.com selector._domainkey.hoge.com # ③FROMドメインが"hoge.com"の時は"selector_hoge"セレクタを使い、 # "hoge.com"の署名を使い認証する *@hoge.com selector_hoge._domainkey.hoge.com  # ④FROMドメインが上記以外の時は"selector"セレクタを使い # "example.com"の署名を使い認証する(1番目と同じキーペアを使う) *@* selector._domainkey.example.com # 第三者認証(例)################################ # ⑤FROMドメインが"fuga.com"の時は"selector"セレクタを使い、 # "example.com"の署名を使い認証する *@fuga.com selector._domainkey.example.com # ⑥FROMドメインが"fuga.com"の時は"selector_fuga"セレクタを使い、 # "example.com"の署名を使い認証する *@fuga.com selector_fuga._domainkey.example.com  # ⑦FROMドメインが上記以外の時は"selector_common"セレクタを使い # "dkim.example.com"の署名を使い認証する *@* selector_common._domainkey.dkim.example.com | 
※上から順に処理されるので、ワイルドカード(ex: *@*, *@*.example.com, *@sub.*)を使うとその下の行は無効になる。ドメインを明示的に指定する場合はワイルドカード行の上に書いておく。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # セレクタが"selector"、 # 署名ドメインが"example.com" の時使うキーペアを指定 selector._domainkey.example.com example.com:selector:/etc/opendkim/keys/example.com/selector.private # セレクタが"selector" # 署名ドメインが"hoge.com" の時使うキーペアを指定 selector._domainkey.hoge.com hoge.com:selector:/etc/opendkim/keys/hoge.com/selector.private # セレクタが"selector_hoge" # 署名ドメインが"hoge.com" の時使うキーペアを指定 selector_hoge._domainkey.hoge.com hoge.com:selector_hoge:/etc/opendkim/keys/hoge.com/selector_hoge.private # セレクタが"selector" # 署名ドメインが"fuga.com" の時使うキーペアを指定 selector._domainkey.fuga.com fuga.com:selector:/etc/opendkim/keys/fuga.com/selector.private # セレクタが"selector_fuga" # 署名ドメインが"fuga.com" の時使うキーペアを指定 selector_fuga._domainkey.fuga.com fuga.com:selector_fuga:/etc/opendkim/keys/fuga.com/selector_fuga.private # セレクタが"selector_common" # 署名ドメインが"dkim.example.com" の時使うキーペアを指定 selector_common._domainkey.dkim.example.com dkim.example.com:selector_common:/etc/opendkim/keys/dkim.example.com/selector_common.private | 
キーペアの公開鍵を取得
| 1 2 3 4 5 | # 例:セレクタが"selector" 署名ドメインが"example.com" の公開鍵 cat /etc/opendkim/keys/example.com/selector.txt   ↓ selector._domainkey IN      TXT     ( "v=DKIM1; k=rsa; "       "p=MIGfMA0GCS..." )  ; ----- DKIM key selector for example.com・ | 
公開鍵をDNSに登録
①FROMドメインが“example.com”で“example.com”の署名を使い作成者認証する場合は、”example.com”のDNSサーバに公開鍵を登録。
| 項目 | 値 | 
|---|---|
| Name | selector._domainkey | 
| Type | TXT | 
| Value | “v=DKIM1; k=rsa; p=MIGfMA0GCS…” | 
ポリシーが登録されてなければポリシーも登録。
| 項目 | 値 | 
|---|---|
| Name | _policy._domainkey | 
| Type | TXT | 
| Value | “t=y; o=~” | 
| 項目 | 値 | 
|---|---|
| Name | _domainkey | 
| Type | TXT | 
| Value | “t=y; o=~” | 
②~③FROMドメインが”hoge.com”で“hoge.com”の署名を使い作成者認証する場合は、”hoge.com”のDNSサーバに公開鍵を登録。
④FROMドメインが”任意のドメイン”で“example.com”の署名を使い作成者認証する場合は、任意ドメインのDNSサーバに公開鍵を登録。
⑤~⑥FROMドメインが”fuga.com”で“example.com”の署名を使い第三者認証する場合は、“example.com”ドメインのDNSサーバに公開鍵を登録。
⑦FROMドメインが”任意のドメイン”で“dkim.example.com”の署名を使い第三者認証する場合は、“dkim.example.com”ドメインのDNSサーバに公開鍵を登録。
| 項目 | 値 | 
|---|---|
| Name | selector_common._domainkey.dkim | 
| Type | TXT | 
| Value | “v=DKIM1; k=rsa; p=MIGfMA0GCS…” | 
| 項目 | 値 | 
|---|---|
| Name | _policy._domainkey.dkim | 
| Type | TXT | 
| Value | “t=y; o=~” | 
| 項目 | 値 | 
|---|---|
| Name | _domainkey.dkim | 
| Type | TXT | 
| Value | “t=y; o=~” | 
レコード返却の確認
| 1 2 3 4 5 6 | #dig selector._domainkey.ドメイン名 TXT @レコードを登録したDNSサーバ dig selector._domainkey.example.com TXT @ns.example.com   ↓ # ANSWERセクションに登録した値が返ってくればOK ;; ANSWER SECTION: selector._domainkey.example.com. 360 IN TXT "v=DKIM1\; k=rsa\; p=MIGfMA0GCS..." | 
Postfixの設定
| 1 2 3 4 | # 末尾に以下を追記 smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = $smtpd_milters milter_default_action = accept | 
サービス再起動
| 1 2 | service opendkim restart service postfix restart | 
確認
Gmailが一番わかりやすいので、Gmailでテスト
| 1 | echo "DKIM test." | mail -s "DKIM test" -r someone@example.com user@gmail.com | 
受信したメールで、DKIMがPassで、ヘッダが以下のようになってればOK。
作成者認証の場合
| DKIMSignature: | (~略~) d=example.com; s=selector; b=xdIeG4cUHIBhU0nix2V5tK9Z (~略~) | 
| From: | <someone@example.com> | 
第三者認証の場合
| DKIMSignature: | (~略~) d=example.com; s=selector; b=xdIeG4cUHIBhU0nix2V5tK9Z (~略~) | 
| From: | <someone@hoge.com> | 
参考サイト)