2020/11/15 OpenDKIM
自宅の環境整えようということで、メールサーバを構築した。
そこで、送信元が正しいか確認するべく、OpenDKIMを導入してみることにした。
特に、迷惑メール判定を食らってしまうのをなんとしても防ぐ必要がある。
ここでは「sample.com」を自分のドメインとして記載する。
設定
epelレポジトリの追加
$ sudo dnf install epel-release
opendkimの追加
$ sudo dnf install opendkim
opendkimで利用するキーペアの作成
まずはキーを保存するディレクトリを指定する。
/etc/opendkim/keyあたりに保存する。
$ sudo mkdir /etc/opendkim/key
次に実際にキーペアを作成する。
$ sudo opendkim-genkey -D /etc/opendkim/key -d sample.com -s 201115
-Dオプションでは作成するディレクトリを指定する。
-d では自分のドメインを指定。
-s はセレクタ名であり、電子署名のヘッダーに表示される。これは作成日を利用する事が多いらしい。
正直なんでもいいらしい。defaultとかmainとか。今回は日付で。
ディレクトリには
201115.private
201115.txt
の2つか作成されている。
キーの所有者を変更
opendkimをインストールするとopendkimユーザが作成される。
このユーザでアクセスできるように、ユーザを変更
$ sudo chown -R opendkim.opendkim /etc/opendkim/key
opendkimの設定変更
次に、opendkimの設定を変更する。
コンフィグを編集する前はコピーを取ることを確実に。(ここでは省略)
code:/etc/opendkim.conf
- Mode v
+ Mode sv
- SoftwareHeader yes
+ SoftwareHeader no
- Keyfile /etc/opendkim/kes/default.private
+ KeyTable /etc/opendkim/KeyTable
+ SigningTable refile:/etc/opendkim/SigningTable
+ ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
+ InternalHosts refile:/etc/opendkim/TrustedHosts
Mode
これは署名(Sign), 検証(verify)の2つ。
送信するメッセージに署名するため、sを追加する。
SoftwareHeader
ヘッダーにソフトウェアのバージョンを表示させないように変更
KeyTable
Keyfile, KeyTableがあるが、KeyTableが有効な場合はオーバーライドされる。
キーの場所を示す。KeyTableファイルは後に編集する。
SigningTable
署名するドメインを指定。
ExternalIgnore
認証をパスする送信元を指定。
InternalHosts
メール送信時に認証を行うホストを選択。
KeyTableの修正
code:/etc/opendkim/KeyTable
+ 201115._domainkey.sample.com sample.com:201115:/etc/opendkim/key/201115.private
TrustedHostsの修正
デフォルトでローカルホストなので問題なし。
SigningTableの修正
code:/etc/opendkim/SigningTable
+ *@sample.com 201115._domainkey.sample.com
Postfixの設定を修正
code:/etc/postfix/main.cf
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
サービス起動
$ sudo systemctl start opendkim
$ sudo systemctl start postfix
これだけでは、動作しない。
ここまでで、メールに署名する部分までを行った。
次は届いたサーバが検証する際に利用するDNS設定を行う。
DNS
上の流れで作成した、
/etc/opendkim/key/201115.txtを利用する。
表示させると、
201115._domainkey IN TXT ( "v=DKIM1; k=rsa; "p=KzPUGij9SjabXKzfzXV9NX4rusAff33cLcp235F5mxxY2Z4rP64UWJgUpkHG7MxALfXGE2ZaQjMJzLRMR4
ehfn4EHM2DcgmNX2Mm7rFy3mj2DhRZJY84u4”
こんなのが表示される。
これを自分のドメインのDNSレコードに追加する必要がある。
公開鍵の登録
table:DNS
Host TYPE TTL VALUE
201115._domainkey TXT 900 v=DKIM1; k=rsa; p=KzPUGij9SjabXKzfzXV9NX4rusA ...
ADSPの登録
ADSP(Author Domain Signing Practice)とは、DKIM署名が有効ではなかった場合の取り扱い。
ADSPにはいくつか種類がある。これらをDNSレコードに登録する。※今回はunknown
table:ADSP
all ドメインのメールは全て署名がある。
unknown ドメインのメールは署名が与えられる場合と与えられない場合がある。
discardable ドメインのメールは全て署名があり、ない場合は破棄することを推奨
table:DNS
Host TYPE TTL VALUE
_adsp._domainkey TXT 900 dkim=unknown
最後に確認
最後にDNSが有効になったかを確認する。
Windowsではnslookupを利用する。
C:\User\hoge> nslookup -type=txt _adsp.domainkey.sample.com
> C:\User\hoge> nslookup -type=txt 201115._domainkey.sample.com
しっかりと登録した内容が返ってくれば、反映されている。
実際に届いたメールを確認してみる。
Gmailに送信してみる。
SPF,DKIMを設定する前は
https://gyazo.com/cea92a73c2b411a09f28395fd7789a57
このようになっていたが、
https://gyazo.com/f533bfc02cce6927c381d573e3672e7b
アイコンが変わった。
メールのソースを見ても、
https://gyazo.com/6d0269ad29d21b09ddffeffcbb70628a
このようにPASSに。
DMARCは設定してないが、とりあえずOK!!