添加OpenDKIM到Postfix的笔记 + DMARC
服务器
Lastmod: 2024-08-21
Published: 2022-05-20

最近由于垃圾邮件判断变得严格,我决定在个人使用的邮件服务器上引入DKIM。
以下是当时的记录。

关于DMARC的设置,请参见2023年11月的补充。

2024年8月补充

我已停止使用OpenDKIM,改为使用arcmilter。
从OpenDKIM更改为arcmilter并支持ARC签名

环境

  • Ubuntu 20.04

OpenDKIM

  • 安装
# apt install opendkim opendkim-tools
  • 创建密钥放置目录
# install -d /etc/opendkim/key
# cd !$
  • 生成密钥(为多个域名)
# install -d masa23.jp
# opendkim-genkey -D masa23.jp -d masa23.jp
# install -d example.jp
# opendkim-genkey -D example.jp -d example.jp

default.private  default.txt 在各自的目录中生成
  • 修改所有权
# chown -R opendkim:opendkim /etc/opendkim/
  • 配置OpenDKIM
# vi /etc/opendkim.conf
Socket                  inet:8892@localhost

#Domain
#KeyFile
#Selector
KeyTable refile:/etc/opendkim/key_table
SigningTable refile:/etc/opendkim/signing_table
# cat << _EOF_ > /etc/opendkim/key_table
default._domainkey.masa23.jp masa23.jp:default:/etc/opendkim/key/masa23.jp/default.private
default._domainkey.example.jp example.jp:default:/etc/opendkim/key/example.jp/default.private
_EOF_
# cat << _EOF_ > /etc/opendkim/signing_table
*@masa23.jp default._domainkey.masa23.jp
*@example.jp default._domainkey.example.jp
_EOF_
  • 启动opendkim并设置开机启动
# systemctl start opendkim
# systemctl enable opendkim

Postfix的设置

  • 作为milter添加
# vi /etc/postfix/main.cf
smtpd_milters = inet:127.0.0.1:8892
non_smtpd_milters = inet:127.0.0.1:8892
  • 检查设置
# postfix check
  • 重新加载postfix
# systemctl reload postfix

在DNS中注册公钥

  • 查看公钥
# cat /etc/opendkim/key/masa23.jp/default.txt
default._domainkey      IN      TXT     ( "v=DKIM1; h=sha256; k=rsa; "
          "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5jqnqaMgv8fFl8yQHDfPdU/7j0YvFza2YIMIYivVV/CaItZizlkY6emj9o6MZBK3RU9ni4BPCQ1do64+HhZHUanAPojZd0PsyusCBNBFU1wY6/xpcuoPf+Ru15UvLI2/o+9ElO4vF3l2YoTSOE5ljnBNd2EWihqmUQazEpu3PT1a7BbHZkW/7WdK5ipgU8+u/iyRai0Dnrhgoi"
          "ArzoDjFgm4TRJQGhD+EUOmnwFa3Xz5eQg50IigS7WKyHwF3HSZPzrkEFf5hIXYdoeIr6OqKg5sldONF/hY9voEITHZqtHOnrBlaBH2DTTI6uQH7Uc4JLv12xD6Gh1rlZy5zdMTwQIDAQAB" )  ; ----- DKIM 密钥 default for masa23.jp

将此记录注册到DNS中。

  • 同时进行ADSP的设置
    此次并不需要严格,因此设置为unknown。
_adsp._domainkey    IN  TXT "dkim=unknown"

2023年11月补充

ADSP似乎已经被废止。

因此,在假设已设置SPF记录的前提下,进行DMARC的设置。

  • DMARC设置
_dmarc  IN  TXT "v=DMARC1; p=quarantine;"

p的值可以是none, quarantine, reject中的任意一个。

q含义
none主所有者不要求对消息的投递采取特定的行动。
quarantine域所有者希望邮件接收者将未通过DMARC机制检查的邮件视为可疑。
reject域所有者希望邮件接收者拒绝未通过DMARC机制检查的邮件。