OpenSMTPDのdkimフィルタ構築とsfp/dkim/dmarcレコードの設定
概要
はじめに
sfp/dkim/dmarcは、巨大メールプラットフォームのフィルタ設定です(以下、すべてDNSレコード正規である、小文字で表記します)。
自分たちのメール基盤がspam/mail relay/他の温床にもなっていて、虎がぐるぐる回ってバターになっちゃった、みたいな構造になってます。
2024年のGoogleのdkim規制が有名です。フィルタをあてるドメイン対象を1日あたり5000通以上としていましたので中小のドメインメールはspfさえあればdmarcチェックは通る、という感じでした。
ところが、この<猶予>も外れそうな情勢になっていて、dkim対応しようというのが、今回のMX改定作業の主目的の一つです。
OpenSMTPDを使うようにしたのも、屋上階なPostfix設定を避けるため、ということです。
認証構造
送信元IPをチェックするのが spf
送信メールヘッダの鍵チェックするのがdkim
この二つをあわせて判定をするのがdmarc
となります。spf設定でpassしていて、dkim設定なしでも、上記したように中小MXは、dmarcでpassというかたちがありましたら、今後どうなるかわかりません(むしろネガティブに考えたほうがいいでしょう)。
spf/dmarc
これはDNSレコード(TXTタイプ)設定だけです。 MXを利用するドメインのDNSに登録します。
spf
レコード名は、メールドメインホスト
“v=spf1 ip4:MXサーバーのIP ~all”
dmarc
レコード名は、_dmarc.メールドメインホスト
“v=dmarc1; p=none; rua=mailto:管理メールアドレス”
spfは厳密にやるなら -allですが、とりあえずテスト中はこれ(チルダ~all)で通してかまいません。
なぜなら、まずは “ ~all” +「dkim passの確立」が最優先だからです (spf自体の判定は、一応~allでも通してくれますんで)。
dkimレコードとOpenSMPTDのdkimフィルタ設定
dkimレコード
DNSのdkimレコード(TXT)のレコード名は
セレクタ名._domainkey.メールドメインホスト名
となります。
中身は
“v=dkim1;p=以下、公開鍵”
このセレクタ名(よく使われてるらしいのがmailという名前)と鍵(公開)(秘密)を設定するのが、このページの本題です。(前置きが長くてすみません)。
OpenBSDのsmtpd.conf
filter "dkimsign" proc-exec "/usr/local/libexec/smtpd/filter-dkimsign
filter "dkimsign" proc-exec "/usr/local/libexec/smtpd/filter-dkimsign \
-d 利用ドメイン名...(以下列挙略) \
-s mail -k /etc/mail/dkim/private.rsa.key" user _dkimsign
filter-dkimsignのインストールと設定
パッケージ
pkg_addで下の2つを入れる
libopensmtpd-1.0 library for writing opensmtpd filters
opensmtpd-filter-dkimsign-0.6p0 dkim signer integration to the OpenSMTPD daemon
ユーザ
id _dkimsign
で確認。無ければ nologin で作成。
鍵ディレクトリと秘密鍵
install -d -m 770 -o _dkimsign -g _dkimsign /etc/mail/dkim
-u _dkimsign openssl genrsa -out /etc/mail/dkim/private.rsa.key 2048
chmod 400 /etc/mail/dkim/private.rsa.key
chown _dkimsign:_dkimsign /etc/mail/dkim/private.rsa.key⏎
DNS 用公開鍵
openssl rsa -in /etc/mail/dkim/private.rsa.key -pubout | \
sed '1s/.*/v=DKIM1;k=rsa;p=/;:nl;${s/-----.*//;q;};N;s/\n//g;b nl;'
DNS TXT(先述)
mail._domainkey.<ドメイン> に 上で出力された公開鍵を置くv=DKIM1;k=rsa;p=この部分)。
DNS登録されたか確認
dig TXT mail._domainkey.利用ドメイン
smtpd.conf
filter “dkimsign” proc-exec “/usr/local/libexec/smtpd/filter-dkimsign -d ドメイン1 -d ドメイン2 -s mail -k
このmailが、セレクタ名と対応
/etc/mail/dkim/private.rsa.key” user _dkimsign
送信側 listen に付ける。
listen on … filter “dkimsign”
反映
smtpd -n
rcctl reload smtpd
DNSレコードの確認
使うメールのドメインDNSに、
- MXレコードに、MXホスト名が登録されているか
- spf,dmarac,dkimの書式は正しいか
送信テスト
自分のgmailメールアドレスに、短いメールをおくる。subjectも暑中お見舞いです!ぐらいのゆるいメールで。
決して連続して送らないこと。
メール不達なら、gmail側から、550とかのダメ出しメールが帰ってくるので、 とにかくまつこと。 あとはおもむろにそのメールのヘッダを見る。キックされてたなら、ともかく設定をみなおす。 時間をあけずにむやみに送信テストすると、IP/ドメイン自体のレピュテーション判定が入る(と思う。しらんけどw)。
成功の場合のメールヘッダ
Authentication-Results: mx.google.com;
dkim=pass header.i=@メールアドレスドメイン名 header.s=mail header.b=CPQrWku9;
spf=pass (google.com: domain of あなたのメールアドレス designates MXのIP as permitted sender) smtp.
mailfrom=あなたのメールアドレス
dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=MXホスト名
今後どうするか(初めてのMXホスト運営者のかたに)
で、まあ、このように一通りの動作が<成功>したら、 一月程度、この仮テストホストで、運用するのをおすすめします。
一月の間にトラブルに遭遇しますし、ログチェックに慣れるというのが、よろしいかと。
本運用はその後でもよろしいかとおもいます。自前MXをたてる意味はそれだけあるということで。