この日記「Googleへのメール送信✉️について」の関連です。(2024.5.22ちょっと更新しました)
GoogleやYahooのメールがスパム規制を開始するようになったけど、自分の周辺でも最近よく話題になるので、影響が無い範囲でちょっと自分の設定内容を書いてみることにした。
対応するには、SPF、DKIM、DMARC、ARC、TLSなどの設定が必要となっていて、設定が不十分な場合、最悪は、送ったメールがGmailからはじかれて相手に届かないことになってしまう。
(この設定は送信側の設定で受信側の設定では無いです。別途、Google と同じく受信側で拒否する設定があります。ただし、あまねく多くの人のメールを受信しなきゃならないサーバはこのようなGmailのような対応はできないと思います。しかし今後は、プロバイダとかユーザを守る観点でのサーバはGoogleのような対応が増えるんじゃ無いかなぁ)
「2024.5.7追記 ここでは送信側だけで、受信側の設定は記載していません」
TLSの設定については暗号化通信のために証明書(鍵セット)の用意が必要となります。証明書によって利用目的が制限される場合があるので注意が必要。これも設定しるんだけど、ここでは割愛します。
ARCの設定については、メーリングリストや自動転送をやっているサイトに必要な機能?っぽいんだけど、よくわかっていなくて、必要なさそうなので僕は設定していない。なので、これもここでは割愛します。(Gmail側で受信して、ヘッダを確認するとGmailの方では付与してくれているみたい。)
ちなみに自分の場合は固定アドレスを持っていなくて、あわせてプロバイダのメールサーバを中継してメール送信しているので、この対応云々言う前からGmailは受信してくれなかった😂。なので、今回のGmail対策に関係なく、サーバ構築時の2年前からSPF、DKIM、DMARCを設定していた😉。
うまく受信できると、以下になる。(Gmailでのチェック)
SPF部分のようにPLALA経由(ここではメール中継用60.36.166.33:送信の都度変わる)から送信されている。
メールシステムの概要については、ここで説明すると量的にきついので、最近出版された以下の本をおすすめします。
では話を戻して、
◯公開しているDNS 関連レコードの設定(外部から確認できる範囲)
自サイトを調べたい場合も以下のコマンドである程度は確認できる。あくまでもDNSの設定ができているかの確認だけになる。実際にサーバでの署名がちゃんと設定されているかを確認するには上記のように実際にメールを受信(Gmailで受信するとわかりやすい)してPASSを確認しないとわからない。(自分が管理してるサイトのDNSレコードが対応してるかの確認は、チェックサイトとかあるけど、bashスクリプトを作って、リストを読みこんで、連続実行すればすぐに抽出できそう🥸)
・SPF(エンベロープFromのチェックするためのもの)
$ dig borderharry.jp TXT +short | grep spf
"v=spf1 a:mai.borderharry.jp include:plala.or.jp include:_spf.google.com ~all"
※メール送信でplalaやgooleを経由することがあるので、上記のような設定をしてる。
・DMARC(ヘッダFromのチェックするためのもの)
$ dig _dmarc.borderharry.jp TXT +short
"v=DMARC1; p=none"
※一番簡単な設定、DMARCレコードに基づいてメールを拒否したり、隔離したりしないようにしてるんだけど、僕と違って会社とかのサーバだったら、DMARCレコードに一致しないメールを隔離したり、拒否する設定にするべきだとおもう。p=none(何もしない)のところをp=quarantine(隔離)、p=reject(拒否)とすれば良い。当然チェックが厳しくなるけど😁
・DKIM(公開暗号技術を使ってメールをチェックするためのもの)
$ dig 220101._domainkey.borderharry.jp TXT +short
"v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvWBPSFH/M1fOqxmN5rbH4OknwuBcdsEe2H2mX6iGtxgHMn3hwGFgBK01V0TUgPoVG8OvaQDl9S+n421LOCH9N5jkaL1ZoLxgGV3OcMf8oHe+eOT2Yh2ha0+rnASwxzjvFEQ7w9EPfh2Z5fXi7hAcADTxHK+gmolCYs8w9QQj2vHrP26FMtxnIrK" "jUW0biDXmxysiyl2enXQR6ytUzHSmaaZuwL8cMbLvjCbplzu6BCWqyutFE/zAlVcVMV/+zdUCzBXQX0cOfk92aYG9KbthmUPigYPPzVlTixs4XIjH6d4KsFLy2s9ELqyz4Djg3lXH7emqEVZZWzBurwqbFxfrTQIDAQAB"
このごちゃごちゃした記述は公開鍵情報になり、下の部分に公開鍵の作成方法を記述してます。
・ADSP
===>これ必要無いって今日知った😅、早速削除した。(ずいぶん前に廃止になっているらしいんだけど、参考にしたサイトにかかれてたんだろうなぁ😅)
$ dig _adsp._domainkey.borderharry.jp TXT +short
"dkim=unknown"
◯DKIMの設定(OpenDKIMを利用する:Postfix連携)
本を紹介してながらすみません🙇(本の方はあくまでも概念的なことを掴むために利用してくださいね)
・OpenDKIMをインストール(メールのに署名をつける機能)
$sudo apt install opendkim opendkim-tools
注)ちなみに以下のOpenDKIMの設定については、上記の本には載っていません⚠️
ここはそれぞれのディストリビューション毎のinstall方法で
・以下の設定を実施(パーミッションの設定に自信がない😅)
公開鍵と秘密鍵の作成
$sudo opendkim-genkey -D /etc/opendkim/keys/borderharry.jp/ -d borderharry.jp -s 220101
以下のキーが作成される
./keys:
合計 4
drwxr-xr-x 2 opendkim opendkim 4096 1月 1 2022 borderharry.jp
./keys/borderharry.jp:
合計 8
-rw------- 1 opendkim opendkim 1679 1月 1 2022 220101.private (秘密鍵)
-rw------- 1 opendkim opendkim 508 1月 1 2022 220101.txt (公開鍵)
ここの(公開鍵)をcatしたら以下となる。これをそのままDNSのDKIMレコードに登録する
$cat 220101.txt
220101._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; "
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvWBPSFH/M1fOqxmN5rbH4OknwuBcdsEe2H2mX6iGtxgHMn3hwGFgBK01V0TUgPoVG8OvaQDl9S+n421LOCH9N5jkaL1ZoLxgGV3OcMf8oHe+eOT2Yh2ha0+rnASwxzjvFEQ7w9EPfh2Z5fXi7hAcADTxHK+gmolCYs8w9QQj2vHrP26FMtxnIrKjUW0biDXmxysiyl2enXQR6y"
"tUzHSmaaZuwL8cMbLvjCbplzu6BCWqyutFE/zAlVcVMV/+zdUCzBXQX0cOfk92aYG9KbthmUPigYPPzVlTixs4XIjH6d4KsFLy2s9ELqyz4Djg3lXH7emqEVZZWzBurwqbFxfrTQIDAQAB" ) ; ----- DKIM key 220101 for borderharry.jp
DKIM設定ファイルを設定
$cat /etc/opendkim.conf
KeyTable /etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
SoftwareHeader no
それぞれのテーブルを設定する(KeyTableが設定されていればKeyFileが優先される)
$cat /etc/opendkim/KeyTable
220101._domainkey.borderharry.jp borderharry.jp:220101:/etc/opendkim/keys/borderharry.jp/220101.private
$cat /etc/opendkim/SigningTable
*@borderharry.jp 220101._domainkey.borderharry.jp
$cat /etc/opendkim/TrustedHosts
127.0.0.1
フォルダの中をリスト
/etc/opendkim# ls -lR
.:
合計 16
-rw-r--r-- 1 root root 105 1月 1 2022 KeyTable
-rw-r--r-- 1 root root 51 1月 1 2022 SigningTable
-rw-r--r-- 1 root root 11 1月 1 2022 TrustedHosts
drwx------ 3 opendkim opendkim 4096 1月 1 2022 keys
・設定が完了したらopendkimを起動
$sudo systemctl restart opendkim
・以下はpostfixからopendkimに連携するための設定の追加、設定完了後postfix再起動。
/etc/postfix/main.cf
# DKIM Setup 2022.1.1
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
$sudo systemctrl restart poxfix
⚠️送信するサーバを分割(マルチテナント)してたりすると、それぞれについて鍵の設定をしなきゃいけないんだけど、OpenDKIMでMySQLを利用できる機能があるのでそれでやればスッキリした設定ができるらしい。
以上かな、詳細はネットで、概要(概念)は上記の本などで、、、あとはまだ不安定だけど生成AIも利用できる。