迷惑メール回避対策 DKIM設定【Postfix】
Postfixで迷惑メール判定されないように、DKIMの設定をおこなう
構築したメールサーバのメールがGmailで受信したメールが迷惑メール扱いになっていたりすることは無いでしょうか?
この対策として有効なのが、SPF(Sender Policy Framework)とDKIM(Domainkeys Identified Mail)のドメイン認証が有効です
SPFの設定は本記事では紹介しませんが、DNSレコード内に配信するメールサーバーの情報を設定しておき、受信したメールサーバーは、SPFを使用して、送信元のドメインが偽装されたものではなく実際の送信元であることを確認します
DKIMはDNSサーバーに送信元ドメインの公開鍵を登録しておきます。送信するメールには暗号化された電子署名が追加されメールが送信されます。DKIMに対応しているメールサーバーで受信した場合は、DNSの公開鍵を取得してメールのヘッダーを電子署名を検証しなりすましか検証します
OpenDKIMのインストール
DKIMが有効なので、OpenDKIMをインストールします。
OpenDKIMインストールには、EPELリポジトリを追加が必要ですので、そちらのレポジトリもインストールします
# EPELのレポジトリをインストールします $ sudo yum install epel-release # opendkimをインストールします $ sudo yum install opendkim
OpenDKIM 秘密鍵の作成
opendkimをインストールしたら、キーペア(秘密鍵/公開鍵)を作成します
鍵ファイルを作成する場所は「/etc/opendkim/keys/」以下に作成します。複数ドメイン(マルチドメイン)で対応する場合は、ドメイン毎に鍵ファイルを作成するディレクトリを作成したほうがわかりやすいのでその方法で作成します
鍵ファイルを作成するディレクトリを作成します
$ sudo mkdir /etc/opendkim/keys/example.com
作成したディレクトリにopendkim-genkeyコマンドでキーペア(秘密鍵と公開鍵)を発行します。
セレクタ名は、ファイルの作成日やdefaultとするパターン多いようです。
書式:opendkim-genkey -D [鍵ファイルを保存するディレクトリ] -d [ドメイン名] -s [セレクタ名]
# キーペアを作成します $ sudo opendkim-genkey -D /etc/opendkim/keys/example.com/ -d example.com -s default # 作成したキーペアの所有者情報を変更します $ sudo chown -R opendkim:opendkim /etc/opendkim/keys/example.com/
DNSの設定
DNSに公開鍵の情報をDNSレコード設定していきます。
設定するDNSレコードは「/etc/opendkim/keys/example.com/default.txt 」の内容となります。
$ sudo cat /etc/opendkim/keys/example.com/default.txt default._domainkey IN TXT ( "v=DKIM1; k=rsa; " "p=MI0OBYLe8pMPJWqa0pqIJFw0QK~~省略~~1sN0OBYLe8pMPJWqa0pqIJFw0QK" ) ; ----- DKIM key default for example.com
- v=DKIM1 は、keyレコードのバージョン番号(指定する場合はDKIM1)
- k=rsa は、電子署名の作成に利用できる鍵の形式、DKIMではRSAのみサポートします
- P=*** は、公開鍵データ
次にDNSサーバーにレコードを設定します。今回はムームードメインに以下のように登録しました
サブドメイン | default._domainkey |
種別 | TXT |
内容 | v=DKIM1;k=rsa;p=MI0OBYLe8pMPJWqa0pqIJFw0QK~~省略~~1sN0OBYLe8pMPJWqa0pqIJFw0Q |
ADSPレコードは、受信側でDKIMの認証結果をどのように扱ってほしいかを示すためのレコードです。
dkim=の値は「all」「unknown」「discardable」のいずれかを設定します。
サブドメイン | _adsp._domainkey |
種別 | TXT |
内容 | dkim=unknown |
DNSレコードの設定が終わったら、しばらくしてDNSレコードが登録されているか確認します
$ dig default._domainkey.example.com txt ; <<>> DiG 9.11.20-RedHat-9.11.20-5.el8 <<>> default._domainkey.pasoden.com txt ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40535 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;default._domainkey.example.com. IN TXT ;; ANSWER SECTION: default._domainkey.example.com. 3600 IN TXT "v=DKIM1;k=rsa;p=MI0OBYLe8pMPJWqa0pqIJFw0QK~~省略~~1sN0OBYLe8pMPJWqa0pqIJFw0Q" ;; Query time: 121 msec ;; SERVER: 108.61.10.10#53(108.61.10.10) ;; WHEN: 火 3月 16 14:27:21 JST 2021 ;; MSG SIZE rcvd: 304
opendkim.confの変更(単一ドメイン)
opendkim の基本的な設定は、「/etc/opendkim.conf」になります。このファイルを変更します。
- mode は、「s」送信時の署名「v」受信を確認します。「sv」で送信時には署名して、受信時には確認します
- KeyFile で、秘密鍵のファイルをしてします
- KeyTable, SigningTable はコメントアウトして指定しないようにします
# 設定ファイルをバックアップします $ sudo cp /etc/opendkim.conf /etc/opendkim.conf.org # Modeを送受信とも有効にする # KeyFileを作成したファイルを指定して、KeyTable, SigningTableはコメントアウトする $ sudo vim /etc/opendkim.conf Mode sv #KeyFile /etc/opendkim/keys/default.private KeyFile /etc/opendkim/e-portal.jp_keys/default.private # KeyTable /etc/opendkim/KeyTable # SigningTable refile:/etc/opendkim/SigningTable
opendkim.confの変更(マルチドメイン)
複数のドメインで利用する場合は、キーペアを同じものを使用する場合と、ドメイン毎にキーペアを利用するパターンがあります
同じキーペアを使って複数のドメインに対応する場合は、以下のように設定します。
- mode は、「s」送信時の署名「v」受信を確認します。「sv」で送信時には署名して、受信時には確認します
- Domain で、使用する複数のドメインを指定していきます。(書式:ドメイン1,ドメイン2, ドメイン3 )
- KeyFile で、秘密鍵のファイルをしてします
- KeyTable, SigningTable はコメントアウトして指定しないようにします
$ sudo vim /etc/opendkim.conf Mode sv Domain example.com, example.jp, hoge.com Selector default #KeyFile /etc/opendkim/keys/default.private KeyFile /etc/opendkim/e-portal.jp_keys/default.private # KeyTable /etc/opendkim/KeyTable # SigningTable refile:/etc/opendkim/SigningTable
ドメイン毎に秘密鍵を使用する場合は、KeyFileパラメーターを無効化して、KeyTable、SigningTable のパラメーターを有効化して、秘密鍵ファイルとドメインの紐づけを実施します。
$ sudo vim /etc/opendkim.conf Mode sv Selector default #KeyFile /etc/opendkim/keys/default.private KeyTable /etc/opendkim/KeyTable SigningTable refile:/etc/opendkim/SigningTable
「/etc/opendkim/KeyTable」に使用するドメイン毎に設定します
$ sudo vi /etc/opendkim/KeyTable default._domainkey.example.com example.com:default:/etc/opendkim/keys/example.com/default.private default._domainkey.example.jp example.jp:default:/etc/opendkim/keys/example.jp/default.private
「/etc/opendkim/SigningTable」に以下のように使用するドメイン毎に設定します
$ sudp vi /etc/opendkim/SigningTable *@example.com default._domainkey.example.com *@example.jp default._domainkey.example.jp
postfixの設定変更
postfixでopendkimを利用するには、以下のように設定変更をおこないます
$ sudo vim /etc/postfix/main.cf # 末尾に以下を追記 smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = $smtpd_milters milter_default_action = accept
OpenDKIMの起動および自動起動の設定
opendkimを自動起動するように設定しておき、その後のopendkim,postfixを再起動します
# opendkimの起動と自動起動の設定 $ sudo systemctl start opendkim $ sudo systetemctl enable opendkim # postfixを再起動 $ sudo systemctl restart postfix
再起動後は、メールサーバーよりメールを送信します
# 送信テスト $ echo "dkim test" | mail -s "test" -r "admin@example.com" example@gmail.com
Gmailで受信したメールで「メッセージのソースを表示」してメールのヘッダーをみてDKIMが有効(PASS)になっているか確認します
ディスカッション
コメント一覧
まだ、コメントがありません