我在我的 SMTP 服务器上为我的域和 DKIM 消息签名配置了硬故障 SPF。由于这是唯一应该用于从我的域发出邮件的 SMTP 服务器,因此我没有预见到任何复杂情况。
但是,请考虑以下情况:我通过我的 SMTP 服务器向我同事的大学电子邮件发送了一封电子邮件。问题是我的同事将他的大学电子邮件转发到他的 GMail 帐户。这些是邮件到达他的 GMail 邮箱后的标题:
Received-SPF: fail (google.com: domain of me@example.com 没有指定 192.168.128.100 作为允许的发件人) client-ip=192.168.128.100; 身份验证结果:mx.google.com;spf=hardfail(google.com:me@example.com 的域未将 192.168.128.100 指定为允许的发件人)smtp.mail=me@example.com;dkim=hardfail(测试模式)header.i=@example.com
(标题已被清理以保护非 Google 方的域和 IP 地址)
GMail 根据我的 SPF 和 DKIM 记录检查传送链中的最后一个 SMTP 服务器(理所当然)。由于交付链中的最后一个 STMP 服务器是大学的服务器而不是我的服务器,因此检查会导致 SPF 硬故障和 DKIM 故障。幸运的是,GMail 没有将邮件标记为垃圾邮件,但我担心这可能会在将来引起问题。
我对 SPF hardfail 的实施可能太严格了吗?我应该注意的任何其他建议或潜在问题?或者也许有更理想的大学电子邮件转发程序的配置?我知道转发服务器可能会更改信封发件人,但我看到这变得很混乱。
我正在尝试将 DKIM 添加到我的域中,我创建了一个密钥,将以下内容添加到/etc/exim4/conf.d/transport/30_exim4_config_remote_smtp:
dkim_domain = mydomain.com
dkim_selector = mail1
dkim_private_key = /etc/exim4/dkim.key
Run Code Online (Sandbox Code Playgroud)
重新启动exim服务,尝试过dpkg-reconfigure,但所有电子邮件都未经签名发送。/var/log/exim4/panic.log是空的。没有错误或任何东西。
我究竟做错了什么?Ubuntu 10.04 LTS
### transport/30_exim4-config_remote_smtp
#################################
# This transport is used for delivering messages over SMTP connections.
remote_smtp:
debug_print = "T: remote_smtp for $local_part@$domain"
driver = smtp
.ifdef REMOTE_SMTP_HOSTS_AVOID_TLS
hosts_avoid_tls = REMOTE_SMTP_HOSTS_AVOID_TLS
.endif
.ifdef REMOTE_SMTP_HEADERS_REWRITE
headers_rewrite = REMOTE_SMTP_HEADERS_REWRITE
.endif
.ifdef REMOTE_SMTP_RETURN_PATH
return_path = REMOTE_SMTP_RETURN_PATH
.endif
.ifdef REMOTE_SMTP_HELO_DATA
helo_data=REMOTE_SMTP_HELO_DATA
.endif
dkim_domain = mydomain.com
dkim_selector = mail1
dkim_private_key = /etc/exim4/dkim.key
.ifdef …Run Code Online (Sandbox Code Playgroud) 我有这个域,我为其设置了 SPF、DKIM 和 DMARC 内容。让我们假设域example.com在其 DNS 区域中具有以下条目:
example.com. 600 IN MX 1 mail.morpheu5.net.
example.com. 600 IN TXT "v=spf1 a mx -all"
_dmarc.example.com. 600 IN TXT "v=DMARC1; p=none; rua=mailto:postmaster@example.com; ruf=mailto:postmaster@example.com; sp=none; ri=86400"
mail._domainkey.example.com. 600 IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSYXmE/aXew9wcS9dCZFYrPetCRC9rW3vVYRQo980JbC6pXbAkqnUd7ncWkUaQZgF2HKzrspUMklRN35rB1b9iHX3dHnf/gvxSURZPYcKT1DenFt+Vhplv2IuWCNWRSqTuXTXlVOnf+TwWLZayKNq62mCqU09sasP9kHXO5lyIbwIDAQAB"
Run Code Online (Sandbox Code Playgroud)
mail.morpheu5.net是我的后缀的本地主机/域/事物,我example.com作为虚拟域进行管理。我正在将 OpenDKIM 和 OpenDMARC 作为 milters 运行——SpamAssassin 也是如此,但这工作正常。
OpenDKIM 工作正常,所有邮件都得到了正确签名,Gmail 甚至显示了“签名者:example.com”和标准加密 (TLS) 的确认。事实上,如果我在 Gmail 中检查原始邮件,我会得到以下信息:
ARC-Authentication-Results: i=1; mx.google.com;
dkim=pass header.i=@example.com header.s=mail header.b=pixIC2KM;
spf=pass (google.com: domain of xxxxx@example.com designates 79.137.83.28 as permitted sender) smtp.mailfrom=xxxxx@example.com;
dmarc=pass (p=NONE sp=NONE dis=NONE) …Run Code Online (Sandbox Code Playgroud) 我在我的机器上设置了 Opendkim milter 来与 postfix 一起使用。现在电子邮件已正确签名和验证,即电子邮件源代码显示DKIM-Signature标题。
TXT权威 dns 上的记录设置如下:
\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 # \xe2\x94\x82 root > server > ~\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x98\n \xe2\x94\x94\xe2\x94\x80> delv -t txt dkim-domain._domainkey.domain.eu\n...\n...\ndkim-domain._domainkey.domain.eu. 1780 IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8drA4hH8gJaVpLaHhtQonhpOeanMo/oPmrAVehP3lBYAjsoxifCIclLqJo7kk0maelqu9SIN9ttQ0boCzEiQBMO1" "c1P+Sj/PxphZB71c8VNhqMJ32VG6Ky3ZD4Tds39Vye/wsWdi+842MUT3Z2dJnxS2AAG4pSkjaytFPCs0J94OUQC0tDErbnsMZh+gg+7IsYgND8FR/cRDzpXjD0qFJk4Cnc1q27WorPAGAiRsRfLt9u" "gkYgQRwapnofmKJ3hk/L8096YR7gan60L4+RGojsx5ppTdIEhYasyK9MokefmVeNyGwVXTJchqG8vhcg9uGjGy9mPiPg4B2TQgEBPwyQIDAQAB"\n...\n...\nRun Code Online (Sandbox Code Playgroud)\n因此,乍一看一切正常,但当我在机器上运行诊断程序时,它会显示以下内容:
\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 # \xe2\x94\x82 root > server > ~\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x98\n \xe2\x94\x94\xe2\x94\x80> opendkim-testkey -d domain.eu -s dkim-domain -vvv\n\nopendkim-testkey: using default configfile /etc/opendkim.conf\nopendkim-testkey: checking key \'dkim-pistam._domainkey.pistam.eu\'\nopendkim-testkey: key not secure\nopendkim-testkey: key OK\nRun Code Online (Sandbox Code Playgroud)\n注意key not secure答案。我从这个答案中读到存在警告,因为未启用 DNSSEC。但我的域的 DNSSECdomain.eu已启用。根据DNSViz。
最后......我们的电子邮件被雅虎看到了!不再那么垃圾了。欢呼!
但是我注意到雅虎!接收 MTA 添加 X-YMailISG 标头。它非常大... 2**10 位?
既然我已经在我醒着的生活中投入了太多时间来制作我们的电子邮件标头,我很想知道 X-YMailISG 标头是什么。有人可以告诉我吗?它会带来任何安全/真实性问题吗?谷歌结果几乎无法理解。
在为 SPF 和 DKIM 调整我们域的 DNS 区域文件中的 TXT 记录后,我终于成功地从 Yahoo! 不再标记为
X-YahooFilteredBulk 并且出色的服务 check-auth@verifier.port25.com 返回的结果显示电子邮件通过了 SPF、DKIM 和 Sender-ID 检查,并在 SpamAssassin 中显示为火腿。雅虎!甚至添加了 Received-SPF: pass 标头。
有用的链接:
http : //www.goldfisch.at/knowwiki/howtos/dkim-filter
http://old.openspf.org/wizard.html
I have recently configured my own mail server (Linux-based postfix + dovecot scenario). This is just for personal use - I have no bulk mail going out, no automatically generated mail outbound from the host, nothing like that. I've gone through the trouble to configure all the additional fun-to-debug email DNS records:
@ IN TXT v=spf1 +mx -all
_domainkey IN TXT o=-; r=dkim@example.com
mail._domainkey IN TXT v=DKIM1; h=sha256; k=rsa; s=email; p=deadbeef
_adsp._domainkey IN TXT dkim=all
_dmarc IN TXT adkim=s; aspf=s; …Run Code Online (Sandbox Code Playgroud) 我正在尝试在运行 Debian 和 Postfix 的邮件服务器上设置 OpenDKIM。这是我做的配置:
密钥表:
mail._domainkey.domain1.com domain1.com:mail:/etc/opendkim/keys/domain1.com/mail.private
mail._domainkey.domain2.com domain2.com:mail:/etc/opendkim/keys/domain2.com/mail.private
Run Code Online (Sandbox Code Playgroud)
签名表:
*.domain1.com mail._domainkey.domain1.com
*.domain2.com mail._domainkey.domain2.com
Run Code Online (Sandbox Code Playgroud)
可信主机:
127.0.0.1
::1
localhost
Run Code Online (Sandbox Code Playgroud)
我的opendkim.conf读物:
# This is a basic configuration that can easily be adapted to suit a standard
# installation. For more advanced options, see opendkim.conf(5) and/or
# /usr/share/doc/opendkim/examples/opendkim.conf.sample.
# Log to syslog
Syslog yes
# Required to use local socket with MTAs that access the socket as a non-
# …Run Code Online (Sandbox Code Playgroud) 我正在为我的项目使用具有自己域(Google Apps)的 gmail。现在我想添加外部邮件服务器来为用户发送通知。Gmail 不提供 DKIM 的私钥,如果密钥将在外部邮件服务器上生成,在严格规则的情况下,来自 gmail 的所有邮件都将被拒绝。在这种情况下如何使用 SPF+DKIM+DMARC 来防止邮件欺骗?
根据Exim4 文档我有以下脚本:
#! /bin/bash --
ED="dkim_ed25519_$(date +'%Y%m%d')"
RSA="dkim_rsa_$(date +'%Y%m%d')"
## Generate private key
openssl genpkey -algorithm ed25519 -out "${ED}.private"
openssl genrsa -out "${RSA}.private" 2048
## Use private key to generate the public DNS TXT record:
## 20200701._domainkey.example.com IN TXT "k=[ed25519|rsa]; p=[pub_key_content]"
openssl pkey -in "${ED}.private" -pubout -outform DER | tail -c +13 | base64 > "${ED}.public"
openssl rsa -in "${RSA}.private" -pubout -outform PEM | sed '/^-----/d' | tr -d '\n' > "${RSA}.public"
Run Code Online (Sandbox Code Playgroud)
这会生成一对私钥+公钥。公共的有:
dkim_ed25519_20200701.public:
ICkF+6tTRKc8voK15Th4eTXMX3inp5jZwZSu4CH2FIc=
Run Code Online (Sandbox Code Playgroud)
dkim_rsa_20200701.public: …
我有一个通过 Mailchimp 和 Google 发送电子邮件的域。我已经为它们设置了 DKIM,并添加了 DMARC 记录(用于测试 atm)。我收集 DMARC 失败的报告,其中绝大多数报告都是 SPF 失败的。
根据我的理解,SPF 是可以发送电子邮件的 IP/主机的白名单,而 DKIM 是发件人必须用来签署电子邮件的密钥。对我来说,DKIM 似乎更适合欺骗保护。
在我搜索的所有地方,我都只看到 SPF 对于电子邮件保护至关重要,但在我的情况下我不明白为什么。由于设置了 DKIM,只有 Mailchimp 和 Google 可以发送电子邮件,并且 DMARC 将使收件人拒绝来自其他任何地方的电子邮件。限制 IP 地址似乎并没有给这种组合带来任何好处。
在这种情况下可以使用 +all 禁用 SPF 吗?如果我这样做,在什么情况下我会受到较少的保护?
dkim ×10
spf ×6
email ×4
email-server ×3
dmarc ×2
exim ×2
gmail ×2
opendkim ×2
postfix ×2
debian ×1
dnssec ×1
domainkeys ×1
security ×1
smtp ×1
ubuntu-10.04 ×1