Ubuntu 20.04 LTS サーバ構築 – DKIM、DMARCを設定する
2022.05.01
この記事は最終更新日から1年以上が経過しています。
前回のUbuntu 20.04 LTS サーバ構築 – Postfix Let’s EncryptでTLS化の続きです。
今回はOpenDKIMを用いてDKIM、DMARCを設定していきます。
メニュー
- Ubuntu 20.04 LTS サーバ構築 – 初期セットアップ
- Ubuntu 20.04 LTS サーバ構築 – Nginxインストール
- Ubuntu 20.04 LTS サーバ構築 – Let’s EncryptでSSL/TLS化
- Ubuntu 20.04 LTS サーバ構築 – Postfixインストール
- Ubuntu 20.04 LTS サーバ構築 – Dovecotインストール
- Ubuntu 20.04 LTS サーバ構築 – Postfix SASL認証
- Ubuntu 20.04 LTS サーバ構築 – Postfix Let’s EncryptでTLS化
- Ubuntu 20.04 LTS サーバ構築 – DKIM、DMARCを設定する
OpenDKIMインストール
$ sudo apt install opendkim opendkim-tools
ユーザpostfixをグループopendkimに追加
OpenDKIMの各種ファイル類にアクセスできる様に、Postfixのプロセス実行ユーザであるユーザpostfixをグループopendkimに追加
$ sudo gpasswd -a postfix opendkim
opendkim 秘密鍵の作成
キーペア保存用のフォルダ作成
opendkimがインストールされると、キーペア(秘密鍵/公開鍵)が /etc/opendkim/keys にファイルが作成されます。マルチドメインも考慮し、適応ドメイン用にフォルダを作成します。
$ sudo mkdir -p /etc/opendkim/keys/example.com
キーペア(秘密鍵/公開鍵)の作成
opendkim-genkeyコマンド用いて、電子署名用のキーペアを作成します。
opendkim-genkey -b [鍵長] -d [対象ドメイン名] -D [ファイルの保存パス] -s [セレクタ名]
“-s” のセレクタ名は、電子署名ヘッダーに表示されるラベルで任意指定です。
セレクタ名はファイルの作成日を利用するケースが多いのですが、「default」、鍵長(-b)を2048bitとしておきます。
$ sudo opendkim-genkey -b 2048 -d example.com -D /etc/opendkim/keys/example.com -s default
キーペアファイルに問題ないか確認。default.privateとdefault.txtが作成されているのを確認。
$ ls -al /etc/opendkim/keys/example.com/ total 16 drwxr-xr-x 2 root root 4096 Apr 9 02:23 . drwxr-xr-x 3 root root 4096 Apr 9 02:20 .. -rw------- 1 root root 1675 Apr 9 02:23 default.private -rw------- 1 root root 513 Apr 9 02:23 default.txt
キーペア(秘密鍵/公開鍵)ファイルの所有者変更
$ sudo chown -R opendkim:opendkim /etc/opendkim/keys/example.com/
変更確認
$ ls -al /etc/opendkim/keys/example.com/ total 16 drwxr-xr-x 2 opendkim opendkim 4096 Apr 9 02:23 . drwxr-xr-x 3 root root 4096 Apr 9 02:20 .. -rw------- 1 opendkim opendkim 1675 Apr 9 02:23 default.private -rw------- 1 opendkim opendkim 513 Apr 9 02:23 default.txt
DNSの設定
公開鍵の確認
DNSサーバーへ登録する公開鍵の情報は”default.txt”に記載されているので内容を確認します。
$ sudo cat /etc/opendkim/keys/example.com/default.txt default._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; " "p=MIIBIjANBakqhsiG6w0BAQEFAAOCAQ5AMIIBCgKCAQEA0LFZJSciP0bBwJyOqlNnyTPaHQY1mRaRxSttnNIdPbwuHD+HGcx8gPc4gTlMytnWUvo4IG7xCX7Aou3uf3hssnpNi5g2eoiGWIzGTQ9yIuaIrR51cMDbBeCWfkHmtLszfo8VwUCv2dTgkla4sX3umoeDIpjUMVbTXDtWQbZlnTnMD4CNCuTq9aXiUbEOhoV+VBDck+/m3/awFs" "G6dECELfwPwFehTFl1TkNHIKa2VkbR2Z1Sw/zmC3+51kFIEYe6lUFAgt50XFyzpoalKppxd8rbKNkIFwQOlXHGNUo0mLnSyX/5NPIGky4sQRYxAOeQAZcBzsWSUCqOb1Iq+dud0QIDAQAB" ) ; ----- DKIM key default for example.com
公開鍵ファイルに含まれる情報は以下のとおりとなり、これらをDNSへのレコード設定を追加していきます。
v=DKIM1 | keyレコードのバージョン番号(指定する場合はDKIM1) |
k=rsa | 電子署名の作成に利用できる鍵の形式、DKIMではRSAのみサポート |
p=…. | 公開鍵データ(catで確認すると、”で分割されている可能性あり。結合が必要) |
DNSサーバーへの公開鍵設定
公開鍵をDNSサーバーへ設定していきます。設定が必要となるのは「公開鍵用レコード」と「DKIMポリシー用レコード」の2レコードです。
各設定は公開鍵の情報を元に追加します。
<セレクタ>._domainkey.<ドメイン名>
v=DKIM1; k=rsa; p=MIIBIjANBak.....
DNSサーバーへ公開鍵を設定します。
ホスト名 | default._domainkey.(example.com) |
TYPE | TXT |
TTL | 500 |
VALUE | v=DKIM1; k=rsa; p=MIIBIjANBak….. |
お名前ドットコムでは、DNSのレコード追加は以下の様になります。
DNSサーバーへのADSPレコードの登録
DKIM署名が有効でないメールの扱いを設定するためのADSPレコードを登録します。
設定値として
- all
- unknown
- discardable
どれかを設定。
ホスト名 | _adsp._domainkey.(example.com) |
TYPE | TXT |
TTL | 500 |
VALUE | dkim=unknown |
お名前ドットコムでは、DNSのレコード追加は以下の様になります。
DNSサーバー DKIM設定確認
DNSサーバー DKIM用レコードのTXTレコードの設定完了しましたら、設定できているか確認します。
opendkim-testkeyコマンドで確認します。
$ sudo opendkim-testkey -d example.com -s default -vvv
key OKと結果が表示されれば設定は大丈夫です。
opendkim-testkey: using default configfile /etc/opendkim.conf opendkim-testkey: checking key 'default._domainkey.example.com' opendkim-testkey: key not secure opendkim-testkey: key OK
3行目の結果が、「key not secure」となっていますが、DNSSECを利用していない場合にその結果となりますので、一旦はスルーで追って設定していきます。
その他、digコマンドを用いて確認も行えます。
公開鍵の確認
$ dig default._domainkey.example.com txt
以下のように応答があれば、正常に設定が完了
; <<>> DiG 9.16.1-Ubuntu <<>> default._domainkey.example.com txt ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22532 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;default._domainkey.example.com. IN TXT ;; ANSWER SECTION: default._domainkey.example.com. 500 IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBdkfgfaG2w0BAQEFAAOCAQ8AMIIBCgKCAQEAvdFb8A/h6OJ/vMa5KVros3OCNj32VRW9Eq9Hf6a2e1xxzH34FlhN8bG8nF3+veDDN0ACzDpfeJCsXmCkkSBOP2yPGuOa/QwDrzWEv1u0sAnTBVmtmp4URwVsxo02Wjpod/3TEFa6fjIj+o2e4BaBasHrN+H1A2H2My8wFccHSQ2WnbYR1IPdjwUsMndLNCKtn" "p12LUVPY+i+1e" ;; Query time: 164 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) ;; WHEN: Sat Apr 09 02:39:15 JST 2022 ;; MSG SIZE rcvd: 347
DKIMポリシーレコード(ADSP)の確認
$ dig _adsp._domainkey.example.com txt
以下のように応答があれば、正常に設定が完了
; <<>> DiG 9.16.1-Ubuntu <<>> _adsp._domainkey.example.com txt ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40779 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;_adsp._domainkey.example.com. IN TXT ;; ANSWER SECTION: _adsp._domainkey.example.com. 500 IN TXT "dkim=unknown" ;; Query time: 164 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) ;; WHEN: Sat Apr 09 02:39:47 JST 2022 ;; MSG SIZE rcvd: 88
その他、ウェブサービスでもDKIMチェックが行えます。
opendkimの設定
DKIMを利用するため
– opendkimパッケージのインストール
– 電子署名用ファイルの作成
– DNSへの公開鍵登録
まで終わりましたので、opendkimの設定を行っていきます。
OpenDKIM設定ファイル編集
$ sudo vim /etc/opendkim.conf
下記3行をコメントを外し、Canonicalizationのパラメータ simple → relaxe/simple に変更
# Commonly-used options; the commented-out versions show the defaults. #Canonicalization simple #Mode sv #SubDomains no ↓ Canonicalization relaxed/simple Mode sv SubDomains no
Socketの箇所もコメントアウトを変更。
Socket inet:8892@localhost #Socket local:/run/opendkim/opendkim.sock
下記を末尾に追加します
KeyTable refile:/etc/opendkim/key.table SigningTable refile:/etc/opendkim/signing.table ExternalIgnoreList /etc/opendkim/trusted.hosts InternalHosts /etc/opendkim/trusted.hosts
xternalIgnoreListとInternalHostsのパラメータが同じですが、以下のとおりとなります。
- ExternalIgnoreList: ローカルホストからローカルホストに配送されるメールは認証不要
- InternalHosts: ローカルホストから外部にメールを配送する場合には認証が必須
Signing Table作成
/etc/opendkim/signing.tableを作成。opendkim.comfの SighningTableディレクティブ
$ sudo vim /etc/opendkim/signing.table
ドメイン名は設定しているドメイン。
*@example.com default._domainkey.example.com
Key Table作成
/etc/opendkim/key.tableを作成。opendkim.comfのKeyTableディレクティブ
$ sudo vim /etc/opendkim/key.table
記述方法は以下の通りとなります。
[セレクタ名]._domainkey.[ドメイン名] [ドメイン名]:[セレクタ名]:[秘密鍵へのパス]
ドメイン名は設定しているドメインを記述。
default._domainkey.example.com example.com:default:/etc/opendkim/keys/example.com/default.private
Trusted Hosts作成
/etc/opendkim/trusted.table を作成。
opendkim.comfの ExternalIgnoreList、InternalHostsディレクティブ
$ sudo vim /etc/opendkim/trusted.hosts
メール送受信を行う内部サーバを対象
127.0.0.1 locahost
上記以外の他のドメイン指定例
*.example.com
opendkim起動
opendkimを起動します。
$ sudo systemctl start opendkim
エラーが出力されなければ、opendkimは起動成功、サービスの状態を確認。
$ systemctl status opendkim ● opendkim.service - OpenDKIM DomainKeys Identified Mail (DKIM) Milter Loaded: loaded (/lib/systemd/system/opendkim.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2022-04-07 00:14:59 JST; 2 days ago Docs: man:opendkim(8) man:opendkim.conf(5) man:opendkim-genkey(8) man:opendkim-genzone(8) man:opendkim-testadsp(8) man:opendkim-testkey http://www.opendkim.org/docs.html Main PID: 218436 (opendkim) Tasks: 6 (limit: 1066) Memory: 4.3M CGroup: /system.slice/opendkim.service └─218436 /usr/sbin/opendkim -x /etc/opendkim.conf
opendkim自動起動設定
サーバーの再起動や停止の復旧時に、opendkimが自動的に起動設定
$ sudo systemctl enable opendkim
Postfix設定変更
続いて、Postfixの設定も変更していきます。
/etc/postfix/main.cf を修正
$ sudo vim /etc/postfix/main.cf
SMTP接続時にDKIMを利用する設定パラメータ、opendkim用設定を最下部に追加
### DKIM Settings smtpd_milters = inet:127.0.0.1:8892 non_smtpd_milters = $smtpd_milters milter_default_action = accept
Postfixの設定は完了。PostfixとOpenDKIM再起動します。
$ sudo systemctl restart postfix opendkim
メールクライアントアプリ Thunderbird を利用して確認。
DKIMが設定されているのを確認できます。最後にDMARCの設定を行っていきます。
DMARCのセットアップ
DMARCではDNSにDMARCレコードを追加します
設定対象のドメインに下記用のようなTXTレコードを追加します
_dmarc TXT "v=DMARC1; p=none; pct=100; adkim=r; aspf=r"
ホスト名 | _dmarc.(example.com) |
TYPE | TXT |
TTL | 300 |
VALUE | v=DMARC1; p=none; pct=100; adkim=r; aspf=r |
お名前ドットコムの設定例
最低限、ここまで行えばDMARCはPASSされます。
一旦、ここまでで、メール送信は、SPF、DKIM、DMARCはPASSされよりセキュアな送信が行えます。
きちんとDMARCの設定を行う必要もありますが、後ほどにでも。