我有一个正确配置的 Postfix 服务器,以允许邮件传入我的域,并且需要身份验证才能将邮件发送到任何其他网络。
我收到的很多垃圾邮件都带有伪造的“发件人”地址,这些地址是我自己域中不存在的用户。SPF 可以阻止这种情况,而且我在 DNS 中配置了 SPF,但我不确定是否要完全阻止 SMTP 级别的所有 SPF 故障。
是否有一个快速的后缀配置项可以添加,以拒绝来自 mydomain 且未经身份验证的传入电子邮件?
具体来说,这是我的 postfix 配置:
smtpd_relay_restrictions = permit_sasl_authenticated, reject_unauth_destination
smtpd_recipient_restrictions =
permit_sasl_authenticated,
reject_invalid_hostname,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_rhsbl_sender dbl.spamhaus.org,
permit
smtpd_sender_restrictions = reject_unknown_sender_domain
smtpd_helo_restrictions = reject_unknown_helo_hostname, reject_invalid_helo_hostname
但仍然可以连接到端口 25,并且
MAIL FROM: [email protected]
RCPT TO: [email protected]
无需验证。
答案1
如果启用 Postfix 的消息提交服务(在端口 587 上),则可以将“消息提交与消息中继分开,从而允许每个服务根据自己的规则(出于安全、策略等考虑)运行”(RFC 4409)。
在这种配置下,由于合法用户必须经过身份验证才能使用端口 587 提交消息,因此您可以安全地拒绝通过端口 25 提交的欺骗性、未经身份验证的邮件。
要在端口 587 上启用(SASL 认证)消息提交,请在 Postfix 的 master.cf 中添加如下部分:
submission inet n - n - - smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_sasl_local_domain=$myhostname
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_sender_login_maps=hash:/etc/postfix/virtual
-o smtpd_sender_restrictions=reject_sender_login_mismatch
-o smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject
(来源)
然后,创建一个Postfix 访问表(在 /etc/postfix/access)指定 Postfix 应如何响应某些发件人:
[email protected] OK
[email protected] HOLD
mydomain.com REJECT
看手册access
页了解详情。
在访问文件上运行postmap
(以创建索引查找表):
postmap /etc/postfix/access
添加适当的发件人限制到 main.cf:
smtpd_sender_restrictions = permit_sasl_authenticated,
check_sender_access hash:/etc/postfix/access
最后,重新加载新配置。在基于 Debian 的系统上,可以使用以下命令完成此操作:
sudo service postfix reload
答案2
是否有一个快速的后缀配置项可以添加,以拒绝来自 mydomain 且未经身份验证的传入电子邮件?
没那么快,但你可以实现一个简单的SMTPd 策略并选择sender
和sasl_username
并检查第一个是否来自您的域,第二个是否存在并且也来自您的域,如果是,则返回DUNNO
,否则,REJECT
。这样,您可以确保对于任何传入邮件,如果它来自您的用户,则必须经过 SASL 身份验证。
具体来说,这是我的 postfix 配置:
您还可以将一些其他项目添加到您的smtpd_recipient_restrictions
策略中,以尝试阻止垃圾邮件并同时提高您的安全性:
smtpd_sender_restrictions =
permit_mynetworks
reject_unknown_sender_domain
reject_sender_login_mismatch
reject_unauth_pipelining
reject_non_fqdn_sender
permit
这意味着每一个都可以在Postfix 配置参数页。
您可能需要添加一些其他内容来阻止垃圾邮件:
SPF
是其中之一,但我同意阻止任何不匹配的测试是相当沉重的,因为一些实施不力的邮件列表会从其服务器发送带有原始发件人地址的电子邮件,因此它们会失败。DKIM
也非常强大(检查OpenDKIM
)。SpamAssassin
可能非常在这种情况下很有用。它不会阻止邮件,但会为其添加垃圾邮件标头,并因此被归类为垃圾邮件。您没有提供其中一个欺骗尝试的 Postfix 消息,但您可以检查它们是否来自同一个 IP 地址或至少是具体的 CIDR 地址,并使用参数将它们放入黑名单
smtpd_client_restrictions
。同样可能适用于
HELO/EHLO
消息并且可能放入smtpd_helo_restrictions
。
如您所见,有很多方法,也许您可以找到适合您情况的方法组合并阻止所有欺骗尝试。
答案3
我找到了一种解决方法,但我很好奇是否有人有更直接/更简单的答案。
我使用了reject_sender_login_mismatch
以下设置如果postfix 可以找到从“FROM”地址到用户名的映射,它要求该用户名经过身份验证。
然后,任务是构建一个处理所有地址@mydomain的地图,但可以正确地让本地用户向他们的地址发送邮件。
在我的特定配置中,我使用
virtual_alias_maps = sqlite:/etc/postfix/db-public-alias.cf pcre:/etc/postfix/db-public-alias-regex.cf
将地址映射到实际用户。
我添加了另一个地址数据库pcre:/etc/postfix/db-sender-logins-fallback.cf
,其中包含我所有域到我的主要用户的正则表达式。所以现在组合起来:
smtpd_sender_login_maps = sqlite:/etc/postfix/db-public-alias.cf pcre:/etc/postfix/db-public-alias-regex.cf pcre:/etc/postfix/db-sender-logins-fallback.cf
smtpd_sender_restrictions = reject_unknown_sender_domain, reject_sender_login_mismatch
每个别名只能从其路由到的用户发送,并且我的域中的每个其他地址只能从我的主用户帐户发送,因此任何试图发送 FROM:我的域的垃圾邮件发送者都会失败,因为他们没有以我的身份登录。
虽然这对我的邮件设置来说是一个很好的改进(本地用户不能再互相冒充),但对于拥有非常高级的用户帐户配置的人来说,它可能太复杂了。我仍然很好奇是否有办法只说“对于 FROM: 中的这些域,用户必须登录”。
答案4
我的 conf 身份验证部分。运行良好:
smtpd_sender_restrictions =
reject_non_fqdn_sender
reject_sender_login_mismatch
reject_unknown_sender_domain
reject_unauth_pipelining
reject_non_fqdn_sender
reject_unlisted_sender
reject_unverified_sender
permit_sasl_authenticated
reject_unknown_reverse_client_hostname
reject_unknown_client_hostname
smtpd_recipient_restrictions =
permit_sasl_authenticated
reject_unauth_destination
reject_rbl_client zen.spamhaus.org
reject_rhsbl_reverse_client dbl.spamhaus.org
reject_rhsbl_helo dbl.spamhaus.org
reject_rhsbl_sender dbl.spamhaus.org
smtpd_relay_restrictions =
permit_sasl_authenticated
reject_unauth_destination
smtpd_helo_required = yes
smtpd_helo_restrictions =
permit_sasl_authenticated
reject_invalid_helo_hostname
reject_non_fqdn_helo_hostname
reject_unknown_helo_hostname