OpenARC
OpenARC 是实验性 Authenticated Received Chain (ARC) 电子邮件身份验证系统的开源实现,旨在允许中间邮件服务器(如邮件列表或转发服务)签署电子邮件的原始身份验证结果。
包括 Microsoft、Google、Fastmail 和 Proton Mail 在内的大多数常见邮件提供商都支持 ARC。
理念
DMARC 允许发件人的域指示邮件受到 SPF 和/或 DKIM 的保护。DMARC 还指示接收服务器在邮件的 SPF 和/或 DKIM 检查未通过时应执行的操作(例如,接收服务器可以拒绝邮件)。
但是,当电子邮件通过邮件列表或邮件转发器发送时,由于这些中间服务器对邮件进行更改,DKIM 或 SPF 检查可能会失败。为了防止合法邮件发生这种情况,创建了 ARC。
ARC 使用 ARC 标头重新签名邮件。这些标头允许我们查看谁修改了邮件,以及在中间服务器进行修改之前身份验证的状态。
在中间服务器更改邮件后,SPF 和/或 DKIM 检查可能会失败(见上文)。但是,如果存在有效的 ARC 链,则接收服务器仍然可以传递邮件(如果它信任中间服务器),因为 ARC 链将允许接收邮件服务器提取(旧的)SPF 和 DKIM 结果,这将通过检查。
有关更多信息,请参阅 RFC 8617。
安装
安装 openarc-gitAUR 软件包以获取最新的开发更新。
配置
签名服务的主要配置文件是 /etc/openarc/openarc.conf
。
- 创建空配置文件
/etc/openarc/openarc.conf
,或将示例配置文件/usr/share/doc/openarc/openarc.conf.sample
复制/移动到/etc/openarc/openarc.conf
并更改或添加以下选项(有关详细信息,请参阅openarc.conf(5)
)
/etc/openarc/openarc.conf
PidFile /run/openarc/openarc.pid UserID openarc:openarc Socket local:/run/openarc/openarc.sock Mode sv Canonicalization relaxed/simple Domain example.com Selector myselector KeyFile /etc/openarc/keys/myselector.private
- 套接字地址是在
/etc/postfix/main.cf
中指定的地址。以下是/etc/postfix/main.cf
应包含的内容
/etc/postfix/main.cf
smtpd_milters = unix:/run/opendkim/opendkim.sock unix:/run/openarc/openarc.sock non_smtpd_milters = $smtpd_milters milter_default_action = accept
- 要使用 OpenDKIM 的 opendkim-genkey 生成密钥签名密钥,请指定用于发送邮件的域和用于引用密钥的选择器。选择器可以是任何值。有关详细信息,请参阅 RFC,但字母数字字符串应可以。
# opendkim-genkey -D /etc/openarc/keys -r -s myselector -d example.com # chown -R openarc /etc/openarc/keys
请注意,opendkim-keygen 还会为您的域生成 DNS 区域文件。
- 或者,您也可以仅使用 OpenSSL 生成密钥。指定您的域而不是 {YOURDOMAIN.COM},如果您愿意,可以选择 2048 位密钥。
首先,创建私钥
# openssl genrsa -out /etc/openarc/keys/{YOURDOMAIN.COM}.key 1024
然后,从您刚刚生成的私钥中提取公钥
# openssl rsa -in /etc/openarc/keys/{YOURDOMAIN.COM}.key -pubout -out /etc/openarc/keys/{YOURDOMAIN.COM}.pub
更改密钥文件的所有者并限制权限
# chown -R openarc /etc/openarc/keys # chmod -R 600 /etc/openarc/keys/{yourkey}.key
您的公钥(用于 DNS)
# cat /etc/openarc/keys/{YOURDOMAIN.COM}.pub
现在,为本地托管的 DNS 创建 DNS txt 文件,格式如下
{YOURSELECTOR}._domainkey.{YOURDOMAIN.COM}. IN TXT "v=DKIM1;k=rsa;p={YOUR-PUBLIC-KEY};"
或者,复制公钥并将其粘贴到 DNS txt 文件中,格式如下
<selector>._domainkey.<domain>. {YOUR-PUBLIC-KEY}
- 如果您希望记录到 syslog,请按如下方式启用它
/etc/openarc/openarc.conf
... Syslog yes ...
- 要告诉 OpenARC 要签名的标头,请按如下方式配置它们,例如
/etc/openarc/openarc.conf
... SignHeaders to,subject,message-id,date,from,mime-version,dkim-signature,arc-authentication-results ...
- PeerList 包含 IP 地址、CIDR 块、主机名或域名列表,此过滤器的邮件既不应签名也不应验证。这可以用于排除您的本地邮件。如果此文件尚不存在,则需要创建它。
/etc/openarc/openarc.conf
... PeerList /etc/openarc/PeerList ...
- 还有其他配置选项可用。请务必阅读文档。
- 启用/启动
openarc.service
。
Postfix 集成
要使用 unix 套接字集成 ARC,请将 postfix 用户添加到 openarc 组并编辑 OpenARC 和 Postfix 配置文件,如下所示
/etc/openarc/openarc.conf
UserID openarc:openarc Socket local:/run/openarc/openarc.sock
/etc/postfix/main.cf
smtpd_milters = unix:/run/opendkim/opendkim.sock unix:/run/openarc/openarc.sock non_smtpd_milters = $smtpd_milters milter_default_action = accept
安全
从安全角度来看,OpenARC 守护程序的默认配置不太理想(所有这些都是次要的安全问题)
- OpenARC 守护程序根本不需要以
root
身份运行(早期建议的配置将使 OpenARC 自行放弃root
权限,但 systemd 也可以做到这一点,而且更早)。 - 如果您的邮件守护程序与 OpenARC 守护程序在同一主机上,则不需要 localhost tcp 套接字,可以使用 unix 套接字代替,从而允许经典的用户/组访问控制。
- OpenARC 默认使用
/tmp
文件夹,而它可以使用自己的文件夹,并具有额外的访问限制。
以下配置文件将修复大多数这些问题(假设您正在使用 Postfix)并删除 systemd 服务单元中一些不必要的选项。首先,创建一个缺失的目录
# mkdir /var/lib/openarc
然后
/etc/openarc/openarc.conf
BaseDirectory /var/lib/openarc Domain example.com KeyFile /etc/openarc/keys/myselector.private Selector myselector Socket local:/run/openarc/openarc.sock Syslog Yes TemporaryDirectory /run/openarc
/etc/systemd/system/openarc.service
[Unit] Description=OpenARC daemon After=network.target remote-fs.target nss-lookup.target [Service] Type=forking User=openarc Group=openarc ExecStart=/usr/bin/openarc -c /etc/openarc/openarc.conf RuntimeDirectory=openarc RuntimeDirectoryMode=0700 [Install] WantedBy=multi-user.target
相应地编辑 /etc/postfix/main.cf
以使 Postfix 监听此 unix 套接字
/etc/postfix/main.cf
smtpd_milters = unix:/run/opendkim/opendkim.sock unix:/run/openarc/openarc.sock non_smtpd_milters = $smtpd_milters