備忘録

備忘録

PostfixとOpenDKIMを利用してメールサーバを構築する方法

Ⅰ. はじめに

タイトルの通り「PostfixとOpenDKIMを利用してメールサーバを構築する方法」です。

Ⅱ. やり方

1. OpenDKIMをインストールする
apt install opendkim opendkim-tools
2. OpenDKIMで利用する秘密鍵と公開鍵を生成する
mkdir /etc/dkimkeys/example.com
opendkim-genkey -D /etc/dkimkeys/example.com -d example.com -s default
chown -R opendkim:opendkim /etc/dkimkeys/
3. OpenDKIMの設定ファイルを編集する

※複数ドメインの対応が必要な場合はKeyFileの代わりにKeyTableとSigningTableを利用する
/etc/opendkim.conf

Syslog yes
SyslogSuccess yes
LogWhy yes

Mode sv
Domain example.com
KeyFile /etc/dkimkeys/example.com/default.key
#KeyTable refile:/etc/opendkim/KeyTable
#SigningTable refile:/etc/opendkim/SigningTable
Selector default

ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts

Socket inet:8892@localhost

/etc/opendkim/TrustedHosts

127.0.0.1
4. Postfixをインストールする
apt install postfix
5. Postfixの設定ファイルを編集する

/etc/postfix/main.cf

myhostname = example.com
mydestination = $myhostname, localhost

# メール配信を全てのIPアドレスで許可する(テスト用途)
# mynetworks = 0.0.0.0/0

# OpenDKIM
smtpd_milters = inet:127.0.0.1:8892
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

/etc/postfix/master.cf

# Postfixをポート2525で起動する
2525      inet  n       -       y       -       -       smtpd
6. OpenDKIM, Postfixを起動する
systemctl enable opendkim
systemctl enable postfix

systemctl restart opendkim
systemctl restart postfix
7. DNSレコードを設定する
タイプ 名前 意味
TXT @ v=spf1 ip4:1.2.3.4 -all SPF
TXT default._domainkey v=DKIM1; h=sha256; k=rsa; p=MII... DKIM公開鍵
TXT _adsp._domainkey dkim=unknown ADSP
A mail.example.com 1.2.3.4 MXレコード用Aレコード
MX @ mail.example.com MXレコード
TXT _dmarc v=DMARC1; p=none; pct=100; adkim=r; aspf=r; DMARC

DKIM公開鍵の場所

/etc/dkimkeys/example.com/default.txt
8. テストメールを送信する
echo "Test body" | mail --subject "Test subject" --append="FROM:noreply@example.com" abc@gmail.com
echo "Test body" | mail --subject "Test subject" --append="FROM:TestUser <noreply@example.com>" abc@gmail.com

実行結果

  • OpenDKIMによる署名が実行されたログが出力されている
$ tail -f /var/log/syslog
Jul 18 02:59:17 opendkim[46116]: E65EF140128: DKIM-Signature field added (s=default, d=example.com)
  • GmailSPF, DKIM, DMARCがPASS(正しく認証出来ている状態)と表示されている

f:id:kagasu:20210717231246p:plain

留意点

ファイアウォール設定を必ず確認する。
踏み台にならないように適切な設定を行う事。

FAQ

Q1. OpenDKIMのログに以下のメッセージが表示される。原因は?
can't determine message sender; accepting

メールクライアント側が原因である可能性が高い。
RFCに違反するような形式のメールを送信しようとした時に発生する。
https://serverfault.com/questions/412389

Q2. サブドメイン(例. mail.example.com)で運用する場合のDNSレコード設定例を知りたい
タイプ 名前 意味
TXT mail v=spf1 ip4:1.2.3.4 -all SPF
TXT default._domainkey.mail v=DKIM1; h=sha256; k=rsa; p=MII... DKIM公開鍵
TXT _adsp._domainkey.mail dkim=unknown ADSP
A mail.example.com 1.2.3.4 MXレコード用Aレコード
MX mail mail.example.com MXレコード
TXT _dmarc.mail v=DMARC1; p=none; pct=100; adkim=r; aspf=r; DMARC