カテゴリ

AlmaLinux CentOS ドメイン・DNS メールセキュリティ

目次

Google 送信者ガイドラインへの主な対応

Google: メール送信者のガイドライン

対象となる条件(引用)

Gmail では 2024 年 2 月以降、Gmail アカウントに 1 日あたり 5,000 件以上のメールを送信する送信者に対し、1. 送信メールを認証すること、2. 未承諾のメールまたは迷惑メールを送信しないようにすること、3. 受信者がメールの配信登録を容易に解除できるようにすること、の 3 つが義務付けられます。

1. 送信メールを認証すること の要件

  1. メールの送信に TLS 接続を使用する
  2. SPF
  3. DKIM
  4. 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で受け付けることに対応できているのであれば encryptverify とする選択肢もありますが非現実的なので、 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\;"

参考) Google: DMARC レコードを定義する

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 startsystemctl 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 reloadsystemctl 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

コメント