このサイトは、只今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

アーキテクチャConference 2024に参加してきました。

イベント

2024.11.28

Mac minicomでシリアル通信を行う

電子工作

2024.11.21

Mac 容量足りない問題は、外付けSSDで快適に解決!おすすめ外付けSSD

mac

2024.10.16

Z80エミュレータ- EMUZ80の組み立て

電子工作

2024.10.13

Mac VSCodeで、SFML C++開発環境を作る。

C++

2024.09.09

Rust-SDL2 examplesをすべて試す

Rust

2024.09.01

JavaScriptで、DOMを放り投げる処理

JavaScript

2024.07.27

Rustで創る MOS 6502 CPU その2

Rust

2024.07.23

Rustで創る MOS 6502 CPU その1

Rust

2024.07.19

汎用 3D mesh/model viewerを求め。と、簡単に、FBXファイルをglTF(glb)に変換ツールを求め。

C++

2024.06.06

M1 Macで、OpenGL GLUTを使ってコンパイルする

C

2024.04.27

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

Rust

2024.03.24

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

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

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

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

FOLLOW US