ハマログ

株式会社イーツー・インフォの社員ブログ

Postfixから送信するメールにDKIMを設定する

はじめに
LINUXサーバで可動しているPostfixから送信しているメールが迷惑メールにはいるということで、DKIM(DomainKeys Identified Mail)を設定しました。
手順
MTAはpostfixです
# alternatives --display mta
mta - ステータスは手動です。
リンクは現在 /usr/sbin/sendmail.postfix を指しています。
/usr/sbin/sendmail.postfix - priority 30
opendkimをインストールします
yum install -y epel-release
yum install -y opendkim
公開鍵(パブリックキー)と秘密鍵(プライベートキー)を作成します
opendkim-genkey -D /etc/opendkim/keys -b 2048 -d e2info.co.jp -s 20190124
KeyTableを編集します
vi /etc/opendkim/KeyTable

# 以下を追加
20190124._domainkey.e2info.co.jp e2info.co.jp:20190124:/etc/opendkim/keys/20190124.private
作成した秘密鍵と公開鍵の所有者を変更します
chown opendkim:opendkim /etc/opendkim/keys/*
opendkimの設定ファイルを変更します
# コメントが邪魔なので削除
cp -pr /etc/opendkim.conf /etc/opendkim.conf.original
rm /etc/opendkim.conf
grep -v -e '^\s*#' -e '^\s*$' /etc/opendkim.conf.original > /etc/opendkim.conf
設定ファイルを修正しましょう
vi /etc/opendkim.conf

# 以下をコメントアウト
#KeyFile        /etc/opendkim/keys/default.private

# 以下を追加
KeyTable      /etc/opendkim/KeyTable
SigningTable  refile:/etc/opendkim/SigningTable
ExternalIgnoreList    refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts

PostfixとOpenDKIMを連携させる

vi /etc/postfix/main.cf

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

サービスの再起動

systemctl start opendkim
systemctl restart postfix 

自動起動設定

systemctl enable opendkim
メールを送信して確認します
echo "DKIMテスト" | mail -s "DKIMテスト" kaneko@e2info.com
メールヘッダにDKIM-Signatureが追加されました。
DKIM-Filter: OpenDKIM Filter v2.11.0 e2info.co.jp E1771D1238F
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=e2info.co.jp; s=20190124; t=1548341602; bh=XkB31K8eM7uWt+cAMbzKm77651MNsVDSPyioSbk1awk=; h=Date:To:Subject:From:From; b=hovrGbu0SUFhVOXZv+tE2eJc1z9lHBKt5rWYgPx6FD6D04dYMjH7/SLMa7k4jpMUBy0iDM+zYnqv9ECdZfGcizdWMVlsWd7nUMrxGxTrEfWUndbBMmZF8N(略)==
ただし、DNSレコードを登録していないのでまだtemperrorになります。
dkim=temperror (no key for signature)
DNSに以下のレコードを登録します
20190124._domainkey.e2info.co.jp.  IN TXT "v=DKIM1; k=rsa; p=[公開鍵]"
ADSPレコードも登録
_adsp._domainkey.e2info.co.jp.  IN TXT "dkim=unknown"
dkim=の値は、all, unknown, discardableの値を指定できます。
>unknown
>The domain might sign some or all email.
>all
> All mail from the domain is signed with an Author Signature.
> discardable
> All mail from the domain is signed with an Author Signature. Furthermore, if a message arrives without a valid Author Signature due to modification in transit, submission via a path without access to a signing key, or other reason, the domain encourages the recipient(s) to discard it.
http://www.dkim.org/specs/draft-ietf-dkim-ssp-04.html より
うまく動作しない場合は、/var/log/maillogのログを確認すると、エラーが出力されていたりします。
Jan 24 22:10:22 nice_web01 opendkim[19303]: BD907D1238E: signing table references unknown key '20190124._domainkey.e2info.co.jp'
Jan 24 22:10:22 nice_web01 postfix/cleanup[19517]: BD907D1238E: milter-reject: END-OF-MESSAGE from localhost[127.0.0.1]: 4.7.1 Service unavailable - try again later; from= to=
参考リンク
DKIM について(G Suite管理者ヘルプ)
ドメインキー・アイデンティファイド・メール(Wikipedia)
DKIM.org
RFC
RFC 4871 – The DKIM Base Specification
RFC 5672 – RFC 4871 DomainKeys Identified Mail (DKIM) Signatures — Update
RFC 6376 – DomainKeys Identified Mail (DKIM) Signatures
DKIMDMARCSPAMメール迷惑メール

  kaneko tomo   2019年1月24日


関連記事

node.jsフレームワーク「Adonis」(1)

Laravelの開発しやすさは良いがPHPは飽きた!! というわけで悶々とした日…

JavaScriptエラーがひと目で分かる!!Chrome拡張!!JavaScript Errors Notifier

JavaScriptエラー時にエラーを分かりやすく通知してくれるChrome拡張…

Python3でBasic認証の必要なURLにアクセスする

Pythonでコードを書く機会がありまして、(途中で挫折しましたが)お手軽でなか…


← 前の投稿

次の投稿 →