OpenDKIMを使って、迷惑メール対策であるDKIMの設定を行います。
メールサーバ構築手順
- 【Ubuntu Server 22.04】Postfix + SMTP-AUTH + Dovecotでメールサーバを構築
- 【Ubuntu Server 22.04】DovecotをSSL通信で暗号化
- 【Ubuntu Server 22.04】PostfixでTLSを有効化して通信を暗号化
- 【Ubuntu Server 22.04】PostfixにDKIMの設定を追加
- 【迷惑メール対策】ざっくり説明SPFの設定方法(送信側)
- 【迷惑メール対策】ざっくり説明DMARCの設定方法(送信側)
- 【Ubuntu Server 22.04】PostfixにSPFチェック機能を追加(policyd-spf)
- 【Ubuntu Server 22.04】PostfixとOpenDMARCでDMARC認証を行う方法
DKIMについて
DKIM(Domain Keys Identified Mail)とは、電子メールの送信元を認証するための方法のことです。
メールの送信元が秘密鍵で電子署名を行って、受診側がDNSに登録された公開鍵の情報を使って正しい署名かどうかの確認をします。
これにより、送信元が成りすましされていないかどうかを判別することができます。
より詳しい説明は下記のサイトを参照してみてください。
https://salt.iajapan.org/wpmu/anti_spam/admin/tech/explanation/dkim/
Opendkim
メールへの署名や、署名の確認などはopendkimというパッケージを使用します。
インストール
aptを使ってopendkimとopendkim-toolsをインストールします。
$ sudo apt update $ sudo apt install opendkim opendkim-tools
鍵ペアの作成
opendkim-genkeyコマンドでDKIMで使用する秘密鍵と公開鍵の鍵ペアを作成します。
opendkim-genkey -D 鍵作成ディレクトリ -d ドメイン名 -s セレクタ名
鍵はセレクタ名.txt(公開鍵) セレクタ名.private(秘密鍵)という名前で作成されます。
実際に下記内容で鍵ペアを作成していきます。
- 鍵作成ディレクトリ /etc/dkimkeys
- ドメイン名 vpslife.server-memo.net
- セレクタ名 vpslife20231213
セレクタ名はどのドメインの鍵なのかがわかるよう名前にしています。
指定しない場合はdefaultという名前になります。
$ sudo opendkim-genkey -D /etc/dkimkeys -d vpslife.server-memo.net -s vpslife20231213
鍵ペアが作成されました。
$ sudo ls -l /etc/dkimkeys/ total 12 -rw-r--r-- 1 root root 664 Aug 5 2021 README.PrivateKeys -rw------- 1 root root 1704 Dec 13 23:17 vpslife20231213.private -rw------- 1 root root 535 Dec 13 23:17 vpslife20231213.txt
ムームードメインのDNSを使用している場合(登録文字数が255文字までの場合)
ムームードメインのDNSを使っている場合、DNSに登録できる文字数の制限が255文字となります。
この場合1024ビット長で鍵を作成しなければ登録する際にエラーとなってしまいます。
ビット長は「-b ビット」オプションで指定することができます。
1024ビット長で鍵ペアを作成する場合は、下記のようにコマンドを実行します。
$ sudo opendkim-genkey -b 1024 -D /etc/dkimkeys -d vpslife.server-memo.net -s vpslife20231213 $ sudo ls -l /etc/dkimkeys/ total 12 -rw-r--r-- 1 root root 664 Aug 5 2021 README.PrivateKeys -rw------- 1 root root 916 Dec 13 23:20 vpslife20231213.private -rw------- 1 root root 353 Dec 13 23:20 vpslife20231213.txt
ムームードメインのDNS以外でも、255文字しかDNSに登録できない場合はビット長を指定して鍵ペアを作成してください。
鍵のパーミッションと所有者情報を変更
作成された鍵の所有者をopendkimに変更します。
$ sudo chown opendkim:opendkim /etc/dkimkeys/vpslife20231213.private $ sudo chown opendkim:opendkim /etc/dkimkeys/vpslife20231213.txt
/etc/opendkim.conf 設定
OpenDKIMの設定を行っていきます。
$ sudo cp -p /etc/opendkim.conf /etc/opendkim.conf_$(date +%Y%m%d-%H%M%S) $ sudo vi /etc/opendkim.conf
設定内容
1つのドメインでメールサーバを運用する設定を行っていきます。
- Mode
- 動作モードでsvを設定
-
- s 送信時に署名(sign)
- v 受診時に検証(verify)
- Domain
- メールアドレスのドメインを設定
- Selector
- 鍵を作成した際のセレクタ名を指定
- KeyFile
- 秘密鍵の場所を指定
- Socket
- ソケット(inet:8891@localhost)を設定
設定する項目は下記の内容になりますので、該当する項目を編集してください。
Mode sv Domain vpslife.server-memo.net Selector vpslife20231213 KeyFile /etc/dkimkeys/vpslife20231213.private Socket inet:8891@localhost
Opendkim設定反映
設定が終わったらopendkimを再起動させて設定を反映させます。
$ sudo systemctl restart opendkim
DNSに公開鍵を登録
Opendkimで作成した公開鍵の情報をDNSに設定します。
公開鍵の内容
作成した公開鍵の中にDNSに設定する内容が記述されていますので、この内容を元にDNSへの設定を行います。
$ sudo cat /etc/dkimkeys/vpslife20231213.txt vpslife20231213._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; " "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvR5W38KW+zg+oJOOwsIJx/R39/DKbn2GEVxAwjQcJSFMHQoQwK3H5ofKngM+XYwjLY/Ayh+MEtYU348Eltx/VtQR4VzwBaA0w30IOI9w/wxJ6ddn5BBL7QcgJ2cX7q6EcuXNiTq0LucLWWQCJ/Km6gNXFK8bAzAWG8gTx62/tkQIDAQAB" ) ; ----- DKIM key vpslife20231213 for vpslife.server-memo.net
BINDのゾーンファイルへ登録する場合
BINDのゾーンファイルに登録する場合は下記のようになります。
TXTレコードに追加する部分の()と最後の方にある「;」以降(コメント)は登録する必要はありませんので注意してください。
vpslife20231213._domainkey IN TXT "v=DKIM1; h=sha256; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvR5W38KW+zg+oJOOwsIJx/R39/DKbn2GEVxAwjQcJSFMHQoQwK3H5ofKngM+XYwjLY/Ayh+MEtYU348Eltx/VtQR4VzwBaA0w30IOI9w/wxJ6ddn5BBL7QcgJ2cX7q6EcuXNiTq0LucLWWQCJ/Km6gNXFK8bAzAWG8gTx62/tkQIDAQAB"
メールアドレスのドメインにサブドメインを使用している場合の設定方法を以下に記述します。
メールアドレスのドメインがサブドメインの場合
今回のvpslife.server-memo.netといったように、メールのドメインにサブドメインを使用している場合の設定例です。
親ドメインとサブドメインが1つのゾーンファイルで管理されている場合
セレクタ名._domainkey部分にサブドメインを追加して、セレクタ名._domainkey.サブドメインというように設定する必要が有ります。
vpslife.server-memo.netの場合は下記のように登録します。
vpslife20231213._domainkey.vpslife IN TXT "v=DKIM1; h=sha256; k=rsa; "
"p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvR5W38KW+zg+oJOOwsIJx/R39/DKbn2GEVxAwjQcJSFMHQoQwK3H5ofKngM+XYwjLY/Ayh+MEtYU348Eltx/VtQR4VzwBaA0w30IOI9w/wxJ6ddn5BBL7QcgJ2cX7q6EcuXNiTq0LucLWWQCJ/Km6gNXFK8bAzAWG8gTx62/tkQIDAQAB"
赤字の部分が追加したサブドメイン名になります。
サブドメインのゾーンファイルが別に設定されている場合
サブドメインのゾーンファイルが別に作成されている場合は、セレクタ名._domainkeyのまま設定します。
vpslife.server-memo.netでの設定例となります。
vpslife20231213._domainkey IN TXT TXT "v=DKIM1; h=sha256; k=rsa; " "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvR5W38KW+zg+oJOOwsIJx/R39/DKbn2GEVxAwjQcJSFMHQoQwK3H5ofKngM+XYwjLY/Ayh+MEtYU348Eltx/VtQR4VzwBaA0w30IOI9w/wxJ6ddn5BBL7QcgJ2cX7q6EcuXNiTq0LucLWWQCJ/Km6gNXFK8bAzAWG8gTx62/tkQIDAQAB"
レジストラが提供しているDNSへの設定例
普段私が使っている、ムームードメインとお名前.comが提供しているDNSへの登録例も紹介しておきます。
ムームードメインの場合
ムームードメインのDNSで、vpslife.server-memo.netのDKIMレコードを設定する例となります。
内容の部分にはBINDのゾーンファイルでは記述していた、最初と最後の「"」(ダブルクォーテーション)の記述は必要ありません。
サブドメイン vpslife20231213._domainkey.vpslife 種別 TXT 内容 v=DKIM1; h=sha256; k=rsa; p=MIGfMA0..省略..DAQAB
お名前.comのDNSの場合
お名前.comのDNSでvpslife.server-memo.netのDKIMレコードを設定する例となります。
VALUE部分にはBINDのゾーンファイルでは記述していた、最初と最後の「"」(ダブルクォーテーション)の記述は必要ありません。
ホスト名 vpslife20231213._domainkey.vpslife TYPE TXT VALUE v=DKIM1; h=sha256; k=rsa; p=MIGfMA0..省略..DAQAB
DKIMの設定確認方法
DNSの設定ができたら次にDKIMの設定のテストを行います。
$ sudo opendkim-testkey -d ドメイン名 -s セレクタ名 -vvv
問題がなければ、opendkim-testkey: key OKと表示されます。
$ sudo opendkim-testkey -d vpslife.server-memo.net -s vpslife20231213 -vvv opendkim-testkey: using default configfile /etc/opendkim.conf opendkim-testkey: key loaded from /etc/dkimkeys/vpslife20231213.private opendkim-testkey: checking key 'vpslife20231213._domainkey.vpslife.server-memo.net' opendkim-testkey: key not secure opendkim-testkey: key OK
opendkim-testkey: key not secureと表示されているのは、DNSSECに関するテスト結果なのでDKIMの設定自体は問題はありません。
Postfix設定変更
Postfixにopendkimと連携させる設定を/etc/postfix/main.confに追加します。
$ cd /etc/postfix $ sudo cp -p main.cf main.cf_$(date +%Y%m%d-%H%M%S) $ sudo vi main.cf
以下の設定を最後に追加します。
smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = $smtpd_milters milter_default_action = accept
postfixを再起動して設定を反映させます。
$ sudo systemctl restart postfix
動作確認
メールクライアントから実際にメールを送信してPostfixのログでDKIMの署名が行われていることと、受信側のメールヘッダーを確認してDKIMの認証がpassしていることを確認します。
今回はgmail宛にメールを送信して確認していきます。
メールログによる確認
/var/log/mail.logを確認してDKIM-Signature field addedがあれば署名が行われています。
Dec 15 12:36:54 118-27-106-189 opendkim[104189]: B4924120181: DKIM-Signature field added (s=vpslife20231213, d=vpslife.server-memo.net)
メールヘッダーによる確認
受信したメールのヘッダー情報を確認して、DKIMの認証が成功(pass)していることを確認してください。
gmailで受信したメールヘッダーで「dkim=pass」と表示されていて、dkimの認証がpassしていることが分かります。
Authentication-Results: mx.google.com; dkim=pass header.i=@vpslife.server-memo.net header.s=vpslife20231213 header.b=ontqCnKo;
コメント