目次
Google 送信者ガイドラインへの主な対応
対象となる条件(引用)
Gmail では 2024 年 2 月以降、Gmail アカウントに 1 日あたり 5,000 件以上のメールを送信する送信者に対し、1. 送信メールを認証すること、2. 未承諾のメールまたは迷惑メールを送信しないようにすること、3. 受信者がメールの配信登録を容易に解除できるようにすること、の 3 つが義務付けられます。
1. 送信メールを認証すること の要件
- メールの送信に TLS 接続を使用する
- SPF
- DKIM
- DMARC
この記事では CentOS 系サーバーで postfix を利用している場合を想定した、最低限の対応を書きます。
1. メールの送信に TLS 接続を使用する
自サーバーから Gmail サーバーへSMTP接続する際にTLS接続をすることを意味します。
postfix の設定ファイル /etc/postfix/main.cf では、 smtp_ や smtpd_ で始まる設定がありますが、
- smtp_ : 自サーバーがSMTPクライアントとしてどう動作するかの設定値
- smtpd_ : 自サーバーがSMTPサーバーとしてどう動作するかの設定値
と考えるとよさそうです。
そのため、この設定には smtp_ で始まる設定値を設定することになります。
ドキュメントは このあたり になります。
「クライアントTLSセキュリティレベル」にある smtp_tls_security_level
が直接的な設定値となります。
送信先のSMTPサーバーが全てTLSで受け付けることに対応できているのであれば encrypt
や verify
とする選択肢もありますが非現実的なので、 may
と指定せざるをえないかと思います。
関連して送信先のサーバー証明書の検証に用いる信頼するCAやログを設定すると以下のような設定を /etc/postfix/main.cf
に追記することとなります。
smtp_tls_security_level = may smtp_tls_CAfile = /etc/pki/tls/cert.pem smtp_tls_loglevel = 1
2. SPF 、 4. DMARC
これらはDNSに特定の形式でレコードを追加することで実現する設定になります。
SPF は「From に設定されているメールアドレスのドメイン名のメールが送信される可能性のあるSMTPサーバー」を表明するもの、
DMARC は、SPFやDKIMによるドメイン認証を前提とした上で、認証に違反した場合のメールの扱い方を示すDNSレコード
と整理されます。
SPF
SPFについては様々な記事が既に公開されているので割愛します。
注意点としては SPF レコードの検索時に10回以上のステップを追うような include などが行われている場合、その時点でSPF検証失敗となる可能性があるので、シンプルに、少ない検索回数で検索が完了するように設定することが重要になります。
DMARC
DMARC レコードには、認証違反のメールをどう扱うか、その違反があった際にどこ宛にレポートメールを送るか、等が設定可能です。
しかし最低限以下を設定しておくことで、送信者ガイドラインへ準拠していることにできるようです。
_dmarc IN TXT "v=DMARC1\; p=none\;"
DMARC の使用を開始するときは、ポリシーの適用設定に none を指定することをおすすめします。
3. DKIM への対応
取り急ぎメモ 参考 https://www.rem-system.com/dkim-postfix04/
必要パッケージのインストール
- yum install epel-release
- yum install opendkim
設定ファイル初期設定
/etc/opendkim.conf
- Mode v を Mode sv に変更
- s は署名実行、 v は署名検証なので、送信専用であれば s だけでもいいはず
- KeyFile 指定コメントアウト
- そのサーバーで特定のドメイン名のFrom以外署名しないなら(すべてのドメイン名について同一の鍵なら)こちらの指定でいいはず
- KetTable 指定
- KeyFile の代わりにFromのドメイン名ごとに署名ルール(鍵)を設定するために利用
- 同様に SigningTable 、 ExternalIgnoreList 、 InternalHosts 指定(コメントアウト)
- SoftwareHeader yes を SoftwareHeader no に変更
- OpenDKIMのバージョン等が表示されるかどうか
- ポリシーにもよるが、表示しない方が適切なことが多いのでは
送信ドメインごとにキーペアの作成
想定
- 鍵の保管ディレクトリは /etc/opendkim/keys/[FROMとなるドメイン名]/
- opendkim の実行ユーザー、グループは opendkim.opendkim
# example.com のためのキーペアを、セレクター名「server-20240129」で作成する場合 opendkim-genkey -D /etc/opendkim/keys/example.com/ -d example.com -s server-20240129 chown -R opendkim:opendkim /etc/opendkim/keys/example.com/
[セレクター名].private は秘密鍵(サーバーで保管)、
[セレクター名].txt は公開鍵情報(DNSに公開するレコード情報)
→ これを [セレクター名]._domainkey.example.com の TXT レコード(つまりDKIMレコード)として設定する
KeyTable , SigningTable の設定
- KeyTable は、DKIMレコードのラベル、対応するドメイン名、 セレクター名、対応する秘密鍵 の対応を書く
- SigningTable は FROM のメールアドレスに対してどのDKIMレコードを利用して署名するかの対応を書く
仮に @examle.com (@ 前は何でも)がFromになっているすべてのメールを同一のDKIMレコード(セレクター名 server-20240129 )で署名しているとする場合、
KeyTable
server-20240129._domainkey.example.com example.com:server-20240129:/etc/opendkim/keys/example.com/server-20240129.private
SigningTable
*@example.com server-20240129._domainkey.example.com
ExternalIgnoreList , InternalHosts について
デフォルトだと同一のファイル TrustedHosts が指定されている。
ローカルホストでの送信についての設定な限り、特に指定をいじることはない。
※中継サーバーとして利用する場合は必要
ここまでで opendkim の設定は完了。
service opendkim start
や systemctl start opendkim
等を試す。
正常に opendkim が動作するようであれば postfix に milter としてその opendkim を使うように設定。
/etc/postfix/main.cf
## DKIM smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = $smtpd_milters milter_default_action = accept
スクリプトサンプル
postfix / opendkim はインストール、設定済み
鍵作成から。
#! /bin/bash # 設定 SRV=server DOMAIN=example.com SELECTOR=${SRV}-$(date +'%Y%m%d') DKIM_LABEL=${SELECTOR}._domainkey.${DOMAIN} OPENDKIM_DIR=/etc/opendkim DOMAIN_DIR=${OPENDKIM_DIR}/keys/${DOMAIN} KEY=${DOMAIN_DIR}/${SELECTOR}.private # キーペア作成 cd ${OPENDKIM_DIR} mkdir -p ${DOMAIN_DIR} opendkim-genkey -D ${DOMAIN_DIR} -d ${DOMAIN} -s ${SELECTOR} chown -R opendkim. ${DOMAIN_DIR} # opendkim 設定テーブル追記 cat << _EOT_ >> KeyTable ${DKIM_LABEL} ${DOMAIN}:${SELECTOR}:${KEY} _EOT_ cat << _EOT_ >> SigningTable *@${DOMAIN} ${DKIM_LABEL} _EOT_
/etc/postfix/main.cf への追記(追記後 service postfix reload
や systemctl reload postfix
で適用)
※同じ設定項目が既に設定されている場合、何か事情がある可能性があるので注意
## TLS送信 smtp_tls_security_level = may smtp_tls_CAfile = /etc/pki/tls/cert.pem smtp_tls_loglevel = 1 ## DKIM smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = $smtpd_milters milter_default_action = accept