OpenDKIM を使う

DKIM (DomainKeys Identified Mail) で電子署名を付与し、送信元のなりすましを防ぎます。

apt install opendkim opendkim-tools

# user:postfix to group opendkim
adduser postfix opendkim

opendkim.conf

# change socket location
vi /etc/opendkim.conf

# change permission
UMask 002

# change socket
Socket = local:/var/spool/postfix/opendkim/opendkim.sock

# Add tail
Mode sv
KeyTable            refile:/etc/opendkim/KeyTable
SigningTable        refile:/etc/opendkim/SigningTable
ExternalIgnoreList  refile:/etc/opendkim/TrustedHosts
InternalHosts       refile:/etc/opendkim/TrustedHosts

make directory

mkdir -p /etc/opendkim/keys
mkdir -p /var/spool/postfix/opendkim
chown -R opendkim.opendkim /var/spool/postfix/opendkim

SigningTable

vi /etc/opendkim/SigningTable

*@mydomain.com default._domainkey.mydomain.com
*@mydomain2.com  default._domainkey.mydomain2.com

KeyTable

vi /etc/opendkim/KeyTable

default._domainkey.mydomain.com mydomain.com:default:/etc/opendkim/keys/mydomain.com/default.private
default._domainkey.mydomain2.com mydomain2.com:default:/etc/opendkim/keys/mydomain2.com/default.private

TrustedHosts

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.0.0/16

電子証明書の作成

mkdir -p /etc/opendkim/keys/mydomain.com
opendkim-genkey -b 2048 -d mydomain.com -D /etc/opendkim/keys/mydomain.com -s default -v

mkdir -p /etc/opendkim/keys/mydomain2.com
opendkim-genkey -b 2048 -d mydomain2.com -D /etc/opendkim/keys/mydomain2.com -s default -v

chown -R opendkim.opendkim /etc/opendkim/keys

生成した公開鍵(default.txt) をDNS にTXT レコードを追加。

# add DKIM
default._domainkey TXT Active 300 "v=DKIM1;h=sha256;k=rsa;p=MIIBIj....DAQAB"

# add ADSP
_adsp._domainkey TXT Active 300 dkim=unknown

# dkim=unknown: DKIM署名していないメールも送信する。
# dkim=all: 送信するメールはすべてDKIM署名をおこなっている。
# dkim=discardable: DKIM署名がされていなかったり不正な署名のメールは削除

Postfix milter として設定。(OpenDMARC と一緒に)

vi /etc/postfix/main.cf

# OpenDMARC
milter_default_action = accept
smtpd_milters=unix:/opendkim/opendkim.sock, unix:/opendmarc/opendmarc.sock
non_smtpd_milters=$smtpd_milters