OpenARC

来自 ArchWiki

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

安装

安装 openarcAUR 软件包。

注意: TrustedDomainProject 的原始软件多年未更新,但可以作为 openarc-legacyAUR 使用。openarcAUR 遵循 flowerysong 维护的分支。

安装 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

安全

注意: 本节复制自 OpenDKIM#Security

从安全角度来看,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

参见