OpenARC
OpenARC 是一个开源实现,用于实现实验性的 Authenticated Received Chain (ARC) 电子邮件认证系统,旨在允许像邮件列表或转发服务这样的中间邮件服务器对电子邮件的原始认证结果进行签名。
ARC 得到了包括 Microsoft、Google、Fastmail 和 Proton Mail 在内的大多数主流邮件提供商的支持。
理念
DMARC 允许发件人域表明消息受到 SPF 和/或 DKIM 的保护。DMARC 还指示接收服务器在消息的 SPF 和/或 DKIM 检查未通过时应执行的操作(例如,接收服务器可以拒绝该消息)。
然而,当电子邮件通过邮件列表或邮件转发器发送时,由于这些中间服务器对消息进行了更改,DKIM 或 SPF 检查可能会失败。为了防止合法消息出现这种情况,ARC 被创建了。
ARC 使用 ARC 头部重新签名消息。这些头部允许我们查看是谁修改了消息,以及在中间服务器修改之前的认证状态。
在中间服务器对消息进行更改后,SPF 和/或 DKIM 检查可能会失败(见上文)。然而,如果存在有效的 ARC 链,那么接收服务器仍然可以放行该消息,前提是它信任中间服务器,因为 ARC 链将允许接收邮件服务器提取(旧的)SPF 和 DKIM 结果,这些结果将通过检查。
有关更多信息,请参阅 RFC 8617。
安装
安装 openarcAUR 包。
配置
签名服务的主要配置文件是 /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 创建一个 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 守护进程在同一台主机上,则不需要 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