【DKIM/DMARC】postfixでの対応

linux

googleがもっとセキュアなメール送信をしろと言ってきました。そうしない場合は拒否すると。(大分極端に誇張してるけど)
まぁ、正論を言われてて、対応してこなかった我々に責任もあるな。とは思いつつ、500-1000ドメインも扱っていると毎日毎日、

DKIM/DMARCの対応してほしいんだけど、なんかgoogleとかyahooがさぁ。。。

「聞き飽きたで。年度末のクソ忙しいときに、Googleの発表内容も把握しようともせず、問い合わせと対応依頼だけしてくる顧客や営業にいい加減うんざり。でも、対応しないといけない。あぁーめんどくせぇぇ。」(SEたちの心の声代弁)

本記事では、Googleが公表している内容など規制対象については触れません。DKIM/DMARCの設定方法だけ記載してますので、参考にどうぞ。

対象の環境

  • centOS6.x
  • postfix 2.6.x

※最初のレポジトリの部分をイジる以外は基本的にRHEL(RedHatEnterpriseLinux)などでも一緒です。

レポジトリの変更(※centos6の場合)

こんなエラーが出ます。

$ yum check-update
読み込んだプラグイン:fastestmirror, security
Loading mirror speeds from cached hostfile
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
 Eg. Invalid release/repo/arch combination/
removing mirrorlist with no valid mirrors: /var/cache/yum/x86_64/6/base/mirrorlist.txt
エラー: Cannot find a valid baseurl for repo: base

必要に応じてバックアップを取って、レポジトリを書き換えます。

$ cd /etc/yum.repos.d/
$ sed -i -e "s/^mirrorlist=http:\\/\\/mirrorlist.centos.org/#mirrorlist=http:\\/\\/mirrorlist.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo
$ sed -i -e "s/^#baseurl=http:\\/\\/mirror.centos.org/baseurl=http:\\/\\/vault.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo

エラーが無くなったことを確認します

$ yum check-update

opendkim(前半)

epelのレポジトリが無い場合は下記で入れれるハズ

$ yum install epel-release

インストール

$ yum install --enablerepo=epel opendkim

鍵の作成

権限周りがめんどくさいのでopendkimユーザーへスイッチ

$ su -s /bin/bash opendkim

公開鍵と秘密鍵の作成(以下はオプション例)
・D:ファイルの保存場所
・d:ドメイン名
・s:セレクター名(※指定しない場合は、「default」となる。日付にしてるケースが多い模様。)

$ mkdir /etc/opendkim/keys/piteki.com
$ opendkim-genkey -D /etc/opendkim/keys/piteki.com/ -d piteki.com

作成されていることの確認(所有者、権限も合わせて確認)

$ ls -l /etc/opendkim/keys/piteki.com/
-rw------- 1 opendkim opendkim 887  2月  7 11:05 2024 default.private
-rw------- 1 opendkim opendkim 324  2月  7 11:05 2024 default.txt

$ ls -ld /etc/opendkim/keys/piteki.com/
drwxr-xr-x 2 opendkim opendkim 4096  2月  7 11:05 2024 /etc/opendkim/keys/piteki.com/

公開鍵の確認(※長いので一部省略してxxxで表記)

$ cat /etc/opendkim/keys/piteki.com/default.txt
default._domainkey     IN      TXT     ( "v=DKIM1; k=rsa; "
          "p=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" )  ; ----- DKIM key default for piteki.com

opendkimの設定は後述。先にDNS登録を実施。

DNS

前項で確認した公開鍵レコードをDNSに登録

default._domainkey     IN      TXT     "v=DKIM1; k=rsa; p=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

opendkim(後半)

設定

configファイルの修正
※詳細はリンク:http://www.opendkim.org/opendkim.conf.5.html

$ vi /etc/opendkim.conf

# モードの設定 s:送信時に署名 v:受信時に確認
Mode    sv

# セレクタ名
Selector default

# KeyfileではなくKeyTableを利用
#KeyFile /etc/opendkim/keys/default.private
KeyTable        refile:/etc/opendkim/KeyTable

# 署名するドメインの指定を可能
SigningTable    refile:/etc/opendkim/SigningTable

# 外部ホストの特定
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts

# 内部ホストの特定
InternalHosts   refile:/etc/opendkim/TrustedHosts

秘密鍵の登録

$ vi /etc/opendkim/KeyTable

default._domainkey.piteki.com piteki.com:default:/etc/opendkim/keys/piteki.com/default.private

ドメインの指定

$ vi /etc/opendkim/SigningTable

*@piteki.com default._domainkey.piteki.com

ホストの指定

$ vi /etc/opendkim/TrustedHosts

# The localhost IP (127.0.0.1) should always be the first entry in this file.
127.0.0.1
::1
#host.example.com
#192.168.1.0/24

サービス起動

サービスの起動と自動起動ON

$ service opendkim start
$ chkconfig opendkim on

postfix

設定

configファイルの修正
※詳細はリンク:https://www.postfix.org/MILTER_README.html

$ vi /etc/postfix/main.cf

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

反映

$ postfix check
$ service postfix restart

確認

googleでチェックすると見やすい。以下のように「PASS」となっていればOK。

ちなみに、DNS登録を実施していないと、下記のように「FAIL」となる。

オマケ1:DMARC

ポリシーをnoneにしてる時点であまり設定として意味が無いのでは?と思わなくもない。レポートも飛ばさないので。。。

_dmarc          IN      TXT     "v=DMARC1; p=none"

その他、SPFやARCヘッダ(Authentication & Trust)、ワンクリック配信停止(Easy Unsubscribe)など、対応すべき内容は色々あるが、本記事ではここまで。

オマケ2:googleの対応について

私が仕入れた情報としては

  • 2024/2 要件を満たしていないメールの一部が一時的なエラーを受け取る
  • 2024/4 上記に続き拒否を開始し、徐々に割合を増加させていく
  • 2024/6 マーケティングメールはワンクリック配信停止(one-click unsubscribe)の対応が必要

コメント