让 postfix 拒绝来自我自己域名的欺骗性来电邮件

让 postfix 拒绝来自我自己域名的欺骗性来电邮件

我有一个正确配置的 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 策略并选择sendersasl_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

相关内容