Gmailのメール送信ポリシー変更へ急ぎ対応する

ALL
スポンサーリンク
スポンサーリンク

はじめに

Googleが迷惑メール抑止のため、Gmail アカウントへのメール送信者が2024年2月1日以降に満たすべき要件を公開しています。

メール送信者のガイドライン – Google Workspace 管理者 ヘルプ

この中で、 「すべての送信者の要件」の箇所で述べられてる下記について、CentOS/RockyLinux での最低限の設定を説明します。

・ドメインに SPF または DKIM メール認証を設定します。
・送信元のドメインまたは IP に、有効な正引きおよび逆引き DNS レコード(PTR レコードとも呼ばれます)があることを確認します。
・メールの送信に TLS 接続を使用します
・Gmail の From: ヘッダーのなりすましはしないでください。Gmail では、DMARC の検疫適用ポリシーの使用が開始されます。
・メーリング リストや受信ゲートウェイを使用するなどして、メールを定期的に転送する場合は、送信メールに ARC ヘッダーを追加します。

メールサーバーだけでは無く、DNSサーバーへの設定も必要です。
本記事では、DNSサーバーは自前で建てていたものとして説明します。DNS管理サービスを利用の場合は、各サービスでのDNS設定方法をご確認ください。

SPF

設定

Googleのガイドライン中の「ドメインに SPF または DKIM メール認証を設定します」の SPF についての設定です。
DNSサーバーへの設定が必要です。

メールドメイン名に対するDNSのzoneファイルに、SPFレコードを追加します。
DNSサーバ BINDの設定(2) に従って設定している場合は、次の行を追加します。
xx.xx.xx.xx に、メールサーバーのIPアドレスを記述します。

@ IN TXT "v=spf1 ip4:xx.xx.xx.xx -all"

CIDR表記でもできます。

@ IN TXT "v=spf1 ip4:xx.xx.xx.xx/yyy -all"

設定したら、systemctl reload named-chroot で反映させます。

確認

問題なく設定されたかの確認方法です。

Gmailへメール送信し、そのメールを Gmail(Web版)で表示します。
返信ボタンの右側の三点リーダーを押し、メニューから「メッセージの表示」を選択します。

新たに表示された内容で、下記のような表があります。
SPF の箇所が PASS になっていれば OK です。


有効な正引きおよび逆引き DNS レコード

Googleのガイドライン中の「送信元のドメインまたは IP に、有効な正引きおよび逆引き DNS レコード(PTR レコードとも呼ばれます)があることを確認します。」についての設定です。

DNSサーバーで、送信元メールサーバーに対する正引きと逆引きが設定されているか確認してください。
また、メールサーバーのドメイン名の正引きで得たIPアドレスを、さらに逆引きすると、メールサーバーのドメイン名と一致することが必要です。

メールの送信に TLS 接続

設定

Googleのガイドライン中の「メールの送信に TLS 接続を使用します」の SPF についての設定です。

メールサーバーでの設定が必要です。

CentOS/RockyLinux + Postfixの場合は、/etc/postfix/main.cf に下記を設定します。
cert.pem は、CentOS/RockyLinux標準で備わっています。

smtp_tls_CAfile = /etc/pki/tls/cert.pem
smtp_tls_security_level = may
smtp_tls_loglevel = 1

設定後、systemctl reload postfix を実行して反映させます。

確認

Gmailへメール送信し、そのメールを Gmail(Web版)で表示します。

そのメールの To の箇所が、下記のように赤いマークが出ていたら、設定できていません

下記のように、赤いマークが出ていなかったら OK です。

DKIM

設定

Googleのガイドライン中の「ドメインに SPF または DKIM メール認証を設定します」の DKIM についての設定です。

DNSサーバー、OpenDKIM 、Postfix での設定が必要です。
CentOS/RockyLinux では以下の作業を実施します。

OpenDKIM をインストールします。

yum -y install epel-release
yum -y --enablerepo=epel install opendkim

OpenDKIM用の鍵を作成します。
[ドメイン名] の箇所は、メールドメイン名を指定してください。
[セレクタ名] は任意の名前でいいです。
([ドメイン名]、[セレクタ名] の [] は記述しないようにしてください)

mkdir /etc/opendkim/keys/[ドメイン名]
opendkim-genkey -D /etc/opendkim/keys/[ドメイン名]/ -d [ドメイン名] -s [セレクタ名]
chown -R opendkim:opendkim /etc/opendkim/keys/[ドメイン名]

作成された /etc/opendkim/keys/[ドメイン名]/[セレクタ名].txt の内容を確認します。
下記のような形式です。その内容を、DNSサーバーの ZONEファイルに追加します。
([セレクタ名] の [] は記述しないようにしてください)

[セレクタ名]._domainkey  IN      TXT     ( "v=DKIM1; k=rsa; "
          "p=xxxxxxx....." )  ; ----- DKIM key [セレクタ名] for [ドメイン名]

また、下記もZONEファイルに追加します。

_adsp._domainkey  IN TXT "dkim=unknown"

なお、設定ミスに備えて、下記のように TTL を短く設定した方がいいかもしれません。以下では 300 にしています。

[セレクタ名]._domainkey 300 IN      TXT     ( "v=DKIM1; k=rsa; "
          "p=xxxxxxx....." )  ; ----- DKIM key [セレクタ名] for [ドメイン名]
_adsp._domainkey 300 IN TXT "dkim=unknown"

設定したら、systemctl reload named-chroot で反映させます。

続けて、OpenDKIM の設定を行います。

cp /etc/opendkim.conf /etc/opendkim.conf.org

/etc/opendkim.conf を以下のように修正します。

Mode    sv

SoftwareHeader no

KeyTable        refile:/etc/opendkim/KeyTable

SigningTable    refile:/etc/opendkim/SigningTable

ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts

InternalHosts   refile:/etc/opendkim/TrustedHosts

ファイル /etc/opendkim/KeyTable の内容を、次の書式で作成します。
[秘密鍵へのパス] は、今回の手順で作成している場合は、/etc/opendkim/keys/[ドメイン名]/[セレクタ名].private です。

[セレクタ名]._domainkey.[ドメイン名] [ドメイン名]:[セレクタ名]:[秘密鍵へのパス]

ファイル /etc/opendkim/SigningTable の内容を、次の書式で作成します。

*@[ドメイン名] [セレクタ名]._domainkey.[ドメイン名]

ファイル /etc/opendkim/TrustedHosts はデフォルトのままでいいです。

OpenDKIM を開始します。また、自動起動するようにしておきます。

systemctl start opendkim
systemctl enable opendkim

Postfix で設定します。
下記を /etc/postfix/main.cf に追加します。
(smtpd_milters の行がすでに存在していた場合は、その行の最後にカンマで区切って「inet:127.0.0.1:8891」を記述してください)

smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

なお、上記 8891 の箇所は、/etc/opendkim.conf 内の Socket inet:XXXX@localhost (XXXXは数値)の行の XXXX の箇所の値を記述してください。

設定後、systemctl reload postfix を実行して反映させます。

DKIM の設定は以上です。

確認

問題なく設定されたかの確認方法です。

まず、DNSの設定を確認します。
次のページにアクセスします。

DKIM Inspector – dmarcian

Enter Domain の箇所で、先の「設定」の[ドメイン名]を入れます。
Enter Selector の箇所で、先の「設定」の[セレクタ名]を入れ、[INSPECT DKIM] を押します。

「Congratulations! Your DKIM record is valid. 」と表示が出たら、OK です。

続けて、OpenDKIM の設定を確認します。

Gmailへメール送信し、そのメールを Gmail(Web版)で表示します。
返信ボタンの右側の三点リーダーを押し、メニューから「メッセージの表示」を選択します。

新たに表示された内容で、下記のような表があります。
DKIM の箇所が PASS になっていれば OK です。
FAIL または、そもそも DKIM の項目が無い場合は NG です。

DMARC

設定

Googleのガイドライン中の「Gmail の From: ヘッダーのなりすましはしないでください。Gmail では、DMARC の検疫適用ポリシーの使用が開始されます。」についての設定です。

DNSサーバーへの設定が必要です。

メールドメイン名に対するDNSのzoneファイルに、以下を追加します。
dmarc-reports@example.com の箇所は、DMARCレポートを受け取るためのメールアドレスを指定します。
(DMARCレポート:DMARC レポート – Google Workspace 管理者 ヘルプ

_dmarc IN TXT "v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com"

確認

まず、DNSの設定を確認します。

Windowsのコマンドプロンプトや、Linuxのターミナルで次を実行します。
[ドメイン名] の箇所は、先の「設定」の[ドメイン名]を入れます。

nslookup -type=TXT _dmarc.[ドメイン名]

実行結果が、下記のようになっていたらOKです。
(dmarc-reports@example.com の箇所は、先の「設定」で指定したメールアドレスが表示されます)

_dmarc.[ドメイン名] text =

        "v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com"

次に、Gmailへメール送信し、そのメールを Gmail(Web版)で表示します。
返信ボタンの右側の三点リーダーを押し、メニューから「メッセージの表示」を選択します。

新たに表示された内容で、下記のような表があります。
DMARC の箇所が PASS になっていれば OK です。
FAIL または、そもそも DKIM の項目が無い場合は NG です。

ARC

設定

Googleのガイドライン中の「メーリング リストや受信ゲートウェイを使用するなどして、メールを定期的に転送する場合は、送信メールに ARC ヘッダーを追加します。」についての設定です。

CentOS/RockyLinux では以下の作業を実施します。

OpenARC をインストールします。

yum -y install epel-release
yum -y --enablerepo=epel install openarc

OpenARC で秘密鍵を使用しますが、DKIMと同じものが使えます。
ただし、OpenDKIMの秘密鍵の権限は、所有者 opendkim で 権限 0600 なので、OpenARCからはアクセスできません。
そこで、OpenARC でも使えるように秘密鍵をコピーしてきます。

次のコマンドを実行します。[ドメイン名][セレクタ名] は、先のDKIMの設定で使用したものを指定します。

mkdir -p /etc/openarc/keys
cp /etc/opendkim/keys/[ドメイン名]/[セレクタ名].private /etc/openarc/keys/
chown openarc:openarc /etc/openarc/keys/*.private

/etc/openarc.conf を修正します。
[ドメイン名][セレクタ] は、先のDKIMの設定で使用したものを指定します。

Mode                    sv
Canonicalization        relaxed/relaxed
Domain                  [ドメイン名]
Selector                [セレクタ名]
KeyFile                 /etc/openarc/keys/[セレクタ名].private

OpenARC実行時に /var/run/openarc/openarc.pid ファイルが作成されるので、作成場所を用意します。

mkdir /var/run/openarc
chown openarc:openarc /var/run/openarc/

OpenARC を開始します。また、自動起動するようにしておきます。

systemctl start openarc
systemctl enable openarc

Postfix で設定します。
/etc/postfix/main.cf の smtpd_milters の行にカンマで区切って inet:127.0.0.1:8894 を追加します。

smtpd_milters = inet:127.0.0.1:8891 , inet:127.0.0.1:8894

なお、上記 8894 の箇所は、/etc/openarc.conf 内の Socket inet:XXXX@localhost (XXXXは数値)の行の XXXX の箇所の値を記述してください。

設定後、systemctl reload postfix を実行して反映させます。

確認

Gmailへメール送信し、そのメールを Gmail(Web版)で表示します。
返信ボタンの右側の三点リーダーを押し、メニューから「メッセージの表示」を選択します。

新たに表示された内容で、下記のように ARC-Seal: の行で cv=pass があれば OKです。

参考

Gmailの新スパム規制対応全部書く
Gmailユーザへメールが届かなくなる?Googleが発表した「新しいメール送信者のガイドライン」とDMARC対応を解説!|ブログ|NRIセキュア

SPFレコードとは?仕組みや設定方法、正しい書き方も解説します – Value Note – わかる、なるほどなIT知識。
SPFレコードとは?正しい書き方を徹底解説 – カゴヤのサーバー研究室
SPFレコードとは(徹底解説) |Kinsta®

STARTTLSとは? メールのTLS暗号化の仕組みや設定について解説 – ベアメールブログ

Postfix 迷惑メール判定されないDKIM設定(複数ドメイン)Rocky ,Alma, CentOS | りんか ネット
CentOSのPostfixで迷惑メール判定されないようDKIMを設定する – レムシステム エンジニアブログ
Opendkimの設定やってみた

CentOS9にOpenARCをインストール
Install OpenARC on CentOS 7 with epel-repo ← RootLinks Co., Ltd.
openarc.conf: Configuration file for openarc | openarc File Formats | Man Pages | ManKier

Googleの送信ガイドラインが更新されるのでSPF/DKIM/DMARC/ARCをpostfixで署名+検証できるようにしたメモ #postfix – Qiita
SPF の検証に SPF Engine を使う。ついでに DMARC と ARC も。 – ぶっちろぐ

コメント