Postfixで迷惑メールに判定されないようDKIMとSPFを設定
DKIM公開鍵情報・DKIM認証のためのポリシー(ADSP)・SPFレコードを設定して迷惑メールに判定されないようにした時のメモ
DKIMとは、DomainKeys Identified Mailの略で、メールを送信する際に電子署名を行ない、 受信時に検証することで正当なメールか判断することができる技術です。
SPFとは、Sender Policy Frameworkの略で、送信元アドレスを元にドメインが正当か判断することができる技術です。
EPELリポジトリの追加
OpenDKIMをインストールするのにEPELリポジトリを使います。
# yum install epel-release
EPELリポジトリの無効化
EPELリポジトリは、インストールすると有効化の状態になっています。必要な時だけEPELリポジトリを使いたいので無効化にします。
/etc/yum.repos.d/epel.repo
enabled=1 ↓ enabled=0
EPELリポジトリを無効化にしたので、使用する時は「--enablerepo=epel」といったように明示的に実行します。
OpenDKIMインストール
# yum --enablerepo=epel install opendkim
インストールが完了したらバージョンを確認
# opendkim -V opendkim: OpenDKIM Filter v2.11.0 Compiled with OpenSSL 1.0.1e-fips 11 Feb 2013 SMFI_VERSION 0x1000001 libmilter version 1.0.1 Supported signing algorithms: rsa-sha1 rsa-sha256 Supported canonicalization algorithms: relaxed simple Active code options: QUERY_CACHE USE_DB USE_LDAP USE_ODBX libopendkim 2.11.0: query_cache
DKIM署名用の秘密鍵と公開鍵の作成
ドメイン毎にディレクトリを作成 # mkdir /etc/opendkim/keys/example.com/ opendkim-genkey -D [出力先] -d [ドメイン名] -s [セレクタ名] # opendkim-genkey -D /etc/opendkim/keys/example.com -d example.com -s _selector2019 2つのファイル(秘密鍵と公開鍵)が作成されます _selector2019.private _selector2019.txt
パーミッション・所有者を変更
# chmod 400 /etc/opendkim/keys/example.com/* # chown -R opendkim:opendkim /etc/opendkim/keys/example.com/*
OpenDKIMの設定
/etc/opendkim.conf
変更前にバックアップ
# cp -p /etc/opendkim.conf /etc/opendkim.conf_`date "+%Y%m%d%H%M%S"`
Mode v ↓ Mode sv #SoftwareHeader yes ↓ SoftwareHeader no KeyFile /etc/opendkim/keys/default.private ↓ #KeyFile /etc/opendkim/keys/default.private #KeyTable /etc/opendkim/KeyTable ↓ KeyTable /etc/opendkim/KeyTable #SigningTable refile:/etc/opendkim/SigningTable ↓ SigningTable refile:/etc/opendkim/SigningTable #ExternalIgnoreList refile:/etc/opendkim/TrustedHosts ↓ ExternalIgnoreList refile:/etc/opendkim/TrustedHosts #InternalHosts refile:/etc/opendkim/TrustedHosts ↓ InternalHosts refile:/etc/opendkim/TrustedHosts
/etc/opendkim/KeyTable
変更前にバックアップ
# cp -p /etc/opendkim/KeyTable /etc/opendkim/KeyTable_`date "+%Y%m%d%H%M%S"`
※最終行に追記 [セレクタ名]._domainkey.[ドメイン名] [ドメイン名]:[セレクタ名]:[秘密鍵へのパス] _selector2019._domainkey.example.com example.com:_selector2019:/etc/opendkim/keys/example.com/_selector2019.private
/etc/opendkim/SigningTable
変更前にバックアップ
# cp -p /etc/opendkim/SigningTable /etc/opendkim/SigningTable_`date "+%Y%m%d%H%M%S"`
※最終行に追記 *@[ドメイン名] [セレクタ名]._domainkey.[ドメイン名] *@example.com _selector2019._domainkey.example.com
OpenDKIMを起動
# systemctl start opendkim.service
OpenDKIMの自動起動の設定
# systemctl enable opendkim.service
Postfixの設定
/etc/postfix/main.cf
変更前にバックアップ
# cp -p /etc/postfix/main.cf /etc/postfix/main.cf_`date "+%Y%m%d%H%M%S"`
※最終行に追記 # DKIM設定 smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = $smtpd_milters milter_default_action = accept
Postfixを再起動
# systemctl restart postfix.service
DNSの設定
〇DKIM公開鍵情報の設定
公開鍵の情報をDNSへ登録
# cat /etc/opendkim/keys/example.com/_selector2019.txt
_selector2019._domainkey IN TXT ( "v=DKIM1; k=rsa; " "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDvByFpWc1Xvv...省略" ) ; ----- DKIM key _selector2019 for example.com
ホスト名 | TYPE | TTL | VALUE |
---|---|---|---|
_selector2019._domainkey.example.com | TXT | 3600 | v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDvByFpWc1Xvv...省略 |
v:バージョン
k:鍵のアルゴリズム
p:公開鍵データ
〇DKIM認証のためのポリシー(ADSP)設定
ホスト名 | TYPE | TTL | VALUE |
---|---|---|---|
_adsp._domainkey.example.com | TXT | 3600 | dkim=unknown |
unknown:このドメインから送信されるメールにDKIM署名が与えられるが、DKIM署名が与えられられない場合もある。
all:このドメインから送信される全てのメールにDKIM署名が与えられる。
discardable:このドメインから送信される全てのメールにDKIM署名が与えられる。DKIM署名が得られない場合はそのメールを破棄することが望まれる。
〇SPFレコードの設定
ホスト名 | TYPE | TTL | VALUE |
---|---|---|---|
example.com | TXT | 3600 | v=spf1 +ip4:999.999.999.999 ~all |
+ip4:[メール送信元のIPアドレス]
送信元のIPアドレスが複数ある場合はの設定
「v=spf1 +ip4:999.999.999.999 +ip4:888.888.888.888 ~all」又は、「v=spf1 +ip4:999.999.999.999/24~all」
受信メールのヘッダを確認
dkim=pass spf=pass 又は Received-SPF: pass それぞれ、passとなっていればOKです。
OpenDKIMの主なコマンド
状態確認 # systemctl status opendkim.service 起動 # systemctl start opendkim.service 停止 # systemctl stop opendkim.service 再起動 # systemctl restart opendkim.service 自動起動設定状態の確認 # systemctl is-enabled opendkim.service 自動起動設定 # systemctl enable opendkim.service 自動起動解除 # systemctl disable opendkim.service