使 postfix 拒绝来自我自己域的欺骗性传入电子邮件

dat*_*ess 9 postfix spf

我有一个正确配置的后缀服务器,以允许传入邮件到我的域,并且需要身份验证才能将邮件发送到任何其他网络。

我收到的很多垃圾邮件都伪造了我自己域中不存在的用户的“发件人”地址。SPF 可以阻止这种情况,我在我的 DNS 中配置了 SPF,但我不确定我是否想要完全阻止所有 SPF 在 SMTP 级别失败的路线。

是否有我可以添加的快速后缀配置项来拒绝来自 mydomain 且未经过身份验证的传入电子邮件?

具体来说,这是我的 postfix conf:

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
Run Code Online (Sandbox Code Playgroud)

但是仍然可以连接到端口 25 和

MAIL FROM: foo@mydomain.com RCPT TO: bar@mydomain.com 无需认证。

Tha*_*Guy 9

如果启用 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
Run Code Online (Sandbox Code Playgroud)

来源

然后,创建一个Postfix 访问表(在 /etc/postfix/access)指定 Postfix 应该如何响应某些发件人:

allow_this_for_some_reason@mydomain.com    OK
keep_in_hold_queue@mydomain.com            HOLD
mydomain.com                               REJECT
Run Code Online (Sandbox Code Playgroud)

access男子页的详细信息。

postmap在访问文件上运行(以创建索引查找表):

postmap /etc/postfix/access
Run Code Online (Sandbox Code Playgroud)

向 main.cf添加适当的发件人限制

smtpd_sender_restrictions = permit_sasl_authenticated,
        check_sender_access hash:/etc/postfix/access
Run Code Online (Sandbox Code Playgroud)

最后,重新加载新配置。在基于 Debian 的系统上,这是使用以下方法完成的:

sudo service postfix reload
Run Code Online (Sandbox Code Playgroud)


nKn*_*nKn 8

是否有我可以添加的快速后缀配置项来拒绝来自 mydomain 且未经过身份验证的传入电子邮件?

不是那么快,但您可以实施一个简单的SMTPd 策略并选择senderandsasl_username并检查第一个是否来自您的域,第二个是否存在并且也来自您的域,如果是,则返回DUNNO,否则,REJECT。通过这种方式,您可以确保对于任何传入邮件,如果它来自您的用户,则它必须经过 SASL 身份验证。

具体来说,这是我的 postfix conf:

您可以将一些其他项目添加到您的smtpd_recipient_restrictions策略中,以尝试阻止垃圾邮件并同时提高您的安全性:

smtpd_sender_restrictions =
    permit_mynetworks
    reject_unknown_sender_domain
    reject_sender_login_mismatch
    reject_unauth_pipelining
    reject_non_fqdn_sender
    permit
Run Code Online (Sandbox Code Playgroud)

什么意味着每个都可以在Postfix 配置参数页面中找到。

您可能希望包含一些其他项目来阻止垃圾邮件:

  • SPF 是其中之一,但我同意阻止任何不匹配的测试是非常重要的,因为一些实施不佳的邮件列表会从其服务器发送带有原始发件人地址的电子邮件,因此它们会失败。

  • DKIM也非常强大(检查OpenDKIM)。

  • SpamAssassin可能是非常在这种情况下有帮助。它不会阻止邮件,但会添加垃圾邮件标头并因此被分类。

  • 您没有提供这些欺骗尝试之一的 Postfix 消息,但您可以检查它们是否来自相同的 IP 地址或至少是一个具体的 CIDR 地址,并将它们放入带有smtpd_client_restrictions参数的黑名单中。

  • 同样可以应用于HELO/EHLO消息并可以放入smtpd_helo_restrictions.

如您所见,有很多方法,也许您可​​以找到适合您情况的组合并阻止所有欺骗尝试。