このサイトは、只今WEB業界で活躍中のデザイナー、プログラマーの方々の情報を集めたweb統合情報サイトです。

Archives Details

Ubuntu 20.04 LTS サーバ構築 – DKIM、DMARCを設定する

ubuntu

2022.05.01

この記事は最終更新日から1年以上が経過しています。

前回のUbuntu 20.04 LTS サーバ構築 – Postfix Let’s EncryptでTLS化の続きです。

今回はOpenDKIMを用いて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チェックが行えます。

https://mxtoolbox.com/

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の設定を行う必要もありますが、後ほどにでも。

Comment

Related Article

Ubuntu 20.04 LTS サーバ構築 – DKIM、DMARCを設定する

2022.05.01

Ubuntu 20.04 LTS サーバ構築 – Postfix Let’s EncryptでTLS化

2022.05.01

Ubuntu 20.04 LTS サーバ構築 – Postfix SASL認証

2022.05.01

Ubuntu 20.04 LTS サーバ構築 – Dovecotインストール

2022.05.01

Ubuntu 20.04 LTS サーバ構築 – Postfixインストール

2022.05.01

Ubuntu 20.04 LTS サーバ構築 – Let’s EncryptでSSL/TLS化

2022.05.01

Ubuntu 20.04 LTS サーバ構築 – Nginxインストール

2022.05.01

Ubuntu 20.04 LTS サーバ構築 – 初期セットアップ

2022.05.01

Ubuntu 18.04 LTSで OpenGL開発

2019.05.20

平成最後のお買い物!!「Logicool MX Master 2 Wireless Mouse」と「K780 マルチデバイス BLUETOOTH® キーボード」で快適PC生活。

2019.04.27

CATEGORY LIST

LATEST NEWS

Rust - Actix Web mongo ユーザー登録 JWT認証

Rust

2024.03.24

Rust - Actix Web JWT 認証認可 APIの作成

Rust

2024.02.25

Rust - Actix Web × JSON 静的ファイルをAPIで返却

Rust

2024.01.19

Rust - Actix Web × MongoDB環境をサクッと起動

Rust

2024.01.18

5分で学ぶ RustでWave Function Collapse (波動関数崩壊アルゴリズム)

Rust

2024.01.15

LLaMAモデル GGMLフォーマット(llama.cpp)をRustフレームワーク Leptosを用いて M1MacMiniでサクッと動かす。

Rust

2024.01.11

2024年 狙っているモバイルノートPC

tool

2024.01.07

MacOS XcodeにSDL2を追加

tool

2023.12.26

php 7.4にアップデート

PHP

2023.12.24

5分で覚える Flutter Flameで作る Wave Function Collapse - 波動関数崩壊アルゴリズム

AI・Bot・algorithm

2023.12.20

Flutter - Flameでゲーム作成 (キャラクターの移動)

Flutter

2023.07.23

Flutterで作る ChatGPT Prompt Manager

Flutter

2023.07.12

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

WEBデザイナーの、WEBデザイナーによる、WEBデザイナーの為のサイト。「みんなで書こう!」と仲間を募ってみたが、結局書くのは自分だけとなってしまいました。日々のメモを綴っていきます。

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

MAD CITY 北九州市で生まれ育つ。20代はバンド活動に明け暮れ、ふと「webデザイナーになりたい。」と思い、デジタルハリウッド福岡校入学。卒業後、数々の賞を受賞、web業界をざわつかせる。
現在、主に、ゲーム制作中心に港区六本木界隈で活動中。

FOLLOW US