我的邮件服务器设置为域 example.com。我创建了一个子域lists.example.com,它是我的example.com 的CNAME。当我从 example.com 发送电子邮件时,我的 example.com 具有有效的 SPF、DMARC 和 DKIM。那么一切都很好,因为 CNAME 获得相同的值,这些值同样有效,因为 SPF 中的 IP 不需要任何更改,所有这些都在同一服务器上运行。
我有另一个名为 example.org 的域。还具有有效的 SPF、DMARC 和 DKIM。这两个域都允许自己成为有效的发件人。除此之外,我还在彼此的 SPF 中添加了两台服务器的 IP,只是为了确保不是这样。我知道不需要。
在我的虚拟别名映射中,我有以下内容。
[email protected] [email protected]
换句话说,邮件到达[电子邮件受保护]被转发到外部域 (example.org)。现在,事情变得有趣了。如果我在自己的 example.com 内转发邮件,效果很好,例如[电子邮件受保护]。但是当我将其转发到 example.org 时,由于某种原因,返回路径是空的。因此,它可能使用客户端的 HELO 域来检查 SPF。当我从其他域(假设为 example.uk.co)发送邮件时,它会检查 example.uk.co 的 SPF 记录,看它是否是lists.example.com 的有效发件人。当然不是。当我添加它时,我会很好地收到电子邮件。但现在 SPF 查找似乎是动态的,因此当我从 gmail 发送邮件时,它会检查 gmail 的 SPF。从 gmail 发送邮件时,我在 example.uk.co 上没有收到邮件管理员消息。所以没有地方可以配置到我的其他邮件服务器。因为否则我总是会收到这些邮政局长消息,但只有当我发送电子邮件至[电子邮件受保护]从我确实可以看到邮政主管电子邮件的域,因为我管理这些域。我没有看到 Gmail 之类的。
我的这些结论就是基于此。
- https://knowledge.ondmarc.redsift.com/en/articles/1739881-spf-record-troubleshooting-and-top-tips
- http://www.open-spf.org/action_browse_id_FAQ/Common_mistakes_revision_26/#helo
当然,除非我误读了这些解释。但我的lists.example.com 确实有SPF,因为它是来自example.com 的CNAME。
我明确指定 MX 域,因为我的 spf 位于 _spf.example.com 中,这确保我从 DNS 查找中获得正确的 IP。为了进行额外的设置,我添加了 example.org 的 A/AAAA 记录,只是为了确保不是这样。 example.org 也有 example.com 的 IP,只是为了排除这一点。
v=spf1 exp=explain.%{d} +mx:example.com +a:example.org -all
所以,我的猜测是,这个问题发生是因为返回路径是空的。会不会是别的什么?有谁知道如何解决这个问题?
我的虚拟别名映射文件:
[email protected] [email protected]
我的虚拟邮箱域:
example.com OK
lists.example.com OK
我的main.cf:
canonical_maps = hash:$config_directory/canonical
compatibility_level = 3.6
delay_warning_time = 1d
disable_vrfy_command = yes
enable_long_queue_ids = yes
inet_interfaces = localhost, 1.2.3.4
lmtp_tls_protocols = >=TLSv1.3
maximal_queue_lifetime = 5w
message_size_limit = 50000000
milter_default_action = accept
mydomain = example.com
myhostname = mx1.$mydomain
mynetworks = localhost
myorigin = $mydomain
non_smtpd_milters = $smtpd_milters
policyd-spf_time_limit = 1h
recipient_delimiter = +
relocated_maps = hash:$config_directory/relocated
smtp_dns_support_level = dnssec
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_loglevel = 1
smtp_tls_mandatory_ciphers = high
smtp_tls_mandatory_exclude_ciphers = EXP, LOW, MEDIUM, aNULL, eNULL, SRP, PSK, kDH, DH, kRSA, DHE, DSS, RC4, DES, IDEA, SEED, ARIA, CAMELLIA, AESCCM8, 3DES, ECDHE-ECDSA-AES256-SHA384, ECDHE-ECDSA-AES128-SHA256, ECDHE-RSA-AES256-SHA384, ECDHE-RSA-AES128-SHA256, MD5, SHA
smtp_tls_security_level = dane
smtp_tls_session_cache_database = btree:$data_directory/smtp_scache
smtp_use_tls = yes
smtpd_banner = $myhostname ESMTP
smtpd_client_auth_rate_limit = 20
smtpd_client_connection_rate_limit = 20
smtpd_client_message_rate_limit = 20
smtpd_client_new_tls_session_rate_limit = 20
smtpd_client_recipient_rate_limit = 20
smtpd_client_restrictions = reject_unknown_client_hostname permit_mynetworks permit_sasl_authenticated reject_rbl_client zen.spamhaus.org reject_rbl_client bl.spamcop.net
smtpd_data_restrictions = reject_unauth_pipelining
smtpd_etrn_restrictions = permit_mynetworks reject
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks reject_invalid_helo_hostname
smtpd_milters = inet:localhost:8891 inet:localhost:8893
smtpd_recipient_restrictions = reject_invalid_helo_hostname reject_non_fqdn_helo_hostname reject_unknown_recipient_domain reject_unlisted_recipient reject_unauth_pipelining permit_mynetworks permit_sasl_authenticated reject_unauth_destination reject_rhsbl_helo dbl.spamhaus.org reject_rhsbl_reverse_client dbl.spamhaus.org reject_rhsbl_sender dbl.spamhaus.org reject_rbl_client zen.spamhaus.org reject_rbl_client bl.spamcop.net check_policy_service unix:private/policyd-spf check_policy_service inet:localhost:10023 check_policy_service inet:localhost:2223
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_sender_login_maps = $virtual_alias_maps
smtpd_sender_restrictions = reject_unknown_sender_domain reject_non_fqdn_sender
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/letsencrypt/live/smtp.$mydomain/fullchain.pem
smtpd_tls_dh1024_param_file = $config_directory/dh/2023-04.pem
smtpd_tls_key_file = /etc/letsencrypt/live/smtp.$mydomain/privkey.pem
smtpd_tls_loglevel = 1
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:$data_directory/smtpd_scache
smtpd_use_tls = yes
strict_rfc821_envelopes = yes
tls_medium_cipherlist = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
tls_ssl_options = NO_COMPRESSION NO_RENEGOTIATION
unknown_address_reject_code = 554
unknown_client_reject_code = 554
unknown_hostname_reject_code = 554
virtual_alias_maps = hash:$config_directory/virtual_alias
virtual_gid_maps = static:997
virtual_mailbox_base = /srv/vmail
virtual_mailbox_domains = hash:$config_directory/virtual_mailbox_domains
virtual_mailbox_maps = hash:$config_directory/virtual_mailbox
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_uid_maps = static:997
答案1
我认为问题在于电子邮件发送到[电子邮件受保护]地址是因为返回路径为空。这会导致 SPF 检查在发送电子邮件时使用客户端的 HELO 域,而该域并不总是 Lists.example.com 的有效发件人。要解决此问题,您可能需要更新电子邮件服务器的配置,以确保为从lists.example.com转发到example.org的电子邮件正确设置返回路径。如果没有有关您的特定电子邮件服务器设置的更多信息,就很难提供更具体的指导。