如何使用白名单和黑名单安全地设置 Postfix *_restrictions 配置参数?

tox*_*lot 6 postfix configuration

学习和尝试理解

上周我一直在学习 Postfix 可以做些什么来帮助减少垃圾邮件。如果我理解正确的不同*_restrictions的配置参数控制的检查完成,然后限制列表,例如permit_mynetworkscheck_client_access控制什么检查。那是对的吗?

如果我理解正确,检查将按以下顺序执行:

  • smtpd_client_restrictions
  • smtpd_helo_restrictions
  • smtpd_sender_restrictions
  • smtpd_relay_restrictions
  • smtpd_recipient_restrictions

那是对的吗?如果我理解正确的话,smtpd_delay_reject不影响检查的顺序,但只影响拒绝被发送。对?

我的服务器设置

smtpd_relay_restrictions配置参数似乎没有被我的Plesk 11服务器上设置。我的 Postfix 版本是 2.8.4。

我还注意到一些检查在不同的配置参数下多次列出。它们是否需要多次列出?

这是我目前的配置:

smtpd_sender_restrictions =
    check_sender_access hash:/var/spool/postfix/plesk/blacklists
    permit_sasl_authenticated
    check_client_access pcre:/var/spool/postfix/plesk/non_auth.re

smtpd_client_restrictions =
    permit_mynetworks

smtpd_recipient_restrictions =
    permit_mynetworks
    check_client_access pcre:/var/spool/postfix/plesk/no_relay.re
    permit_sasl_authenticated
    reject_unauth_destination
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,那将与此相同:

smtpd_sender_restrictions =

smtpd_client_restrictions =

smtpd_recipient_restrictions =
    permit_mynetworks
    check_sender_access hash:/var/spool/postfix/plesk/blacklists
    permit_sasl_authenticated
    check_client_access pcre:/var/spool/postfix/plesk/non_auth.re
    permit_mynetworks
    check_client_access pcre:/var/spool/postfix/plesk/no_relay.re
    permit_sasl_authenticated
    reject_unauth_destination
Run Code Online (Sandbox Code Playgroud)

黑名单文件为空。no_auth 文件有这个:

/^/ PREPEND X-No-Auth: unauthenticated sender
Run Code Online (Sandbox Code Playgroud)

和 no_relay 文件有这个:

/^/ PREPEND X-No-Relay: not in my network
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,最后两个将标题添加到所有尚未允许的电子邮件中。

顾虑

  • 重复检查
    当 Postfix 被多次列出时,它是否会再次执行检查?或者 Postfix 知道它已经做过那个检查了吗?如果多次执行检查,那似乎是一种浪费。如果它们没有被多次执行,那么 no_auh/no_relay 头是否在所有情况下都能正确添加?

  • 缺少 smtpd_relay_restrictions
    摘自Postfix SMTP 中继和访问控制

    注意:2.10 之前的 Postfix 版本没有 smtpd_relay_restrictions。他们在 smtpd_recipient_restrictions 下结合了邮件中继和垃圾邮件阻止策略。这可能会导致意想不到的结果。例如,宽松的垃圾邮件阻止策略可能会意外地导致宽松的邮件中继策略。

    另一个摘录:

    有些人建议将所有访问限制放在 smtpd_recipient_restrictions 列表中。不幸的是,这会导致访问过于宽松。

    所以我不想在 下列出所有限制smtpd_recipient_restrictions,但是在不同限制下有多个限制和相同的检查会让人困惑。它是安全的只使用smtpd_recipient_restrictionssmtpd_relay_restrictions而忽略了客户端,直升机,发送者?

  • 黑名单
    那个黑名单不是在名单的前面吗?如果发件人是我网络的一部分并且可以进行身份​​验证,我真的应该根据发件人电子邮件进行阻止吗?现在该表是空的,但我不确定 Plesk 组件可能会向该表添加电子邮件地址。它还违反了要求 100% 传送到 postmaster@ 和 Abus@ 地址的 RFC。

这是我想要完成的

  • 保持相当简单
  • 确保我不会创建一个开放的中继或其他安全漏洞
  • 确保我不会阻止有效的电子邮件
  • 将虚拟别名表中存在的 postmaster@ 和 Abus@ 地址列入白名单
  • 将来自中国/韩国的垃圾邮件发送者的 IP 地址块列入黑名单
  • 使用正则表达式拒绝使用包罗万象的域中除某些收件人地址外的所有收件人地址。我在一个域上使用了一个包罗万象的功能,因此即使 Plesk 不支持 VERP,我也可以使用 VERP-y 退回地址。

这就是我的想法

在 /etc/postfix/main.cf

#smtpd_client_restrictions =
#smtpd_helo_restrictions =
#smtpd_sender_restrictions =

smtpd_relay_restrictions =
    permit_mynetworks
    check_client_access pcre:/var/spool/postfix/plesk/no_relay.re
    permit_sasl_authenticated
    check_client_access pcre:/var/spool/postfix/plesk/non_auth.re
    reject_unauth_destination

smtpd_recipient_restrictions =
    check_recipient_access pcre:/etc/postfix/custom/recipient_checks.pcre
    check_client_access cidr:/etc/postfix/custom/sinokorea.cidr
    check_sender_access hash:/var/spool/postfix/plesk/blacklists
Run Code Online (Sandbox Code Playgroud)

在 /etc/postfix/custom/recipient_checks.pcre

# Always accept mail to postmaster@ and abuse@
/^postmaster@/ OK
/^abuse@/ OK

# Reject all mail sent to mailapp.ourdomain.com
# except for certain specific recipients
# and bounce messages which may use VERP
if /@mailapp\.ourdomain\.com$/
!/^(?:validuser|anothervalid|bounces(?:\+.+)?)@/ REJECT
endif
Run Code Online (Sandbox Code Playgroud)

我遇到过@在正则表达式中转义的例子。不是什么特殊人物吧?

我提议的配置能实现我想要的吗?

(请注意自己和任何其他阅读此内容的 Plesk 用户 - 可能需要一个 cron 作业来定期恢复对 main.cf 文件的更改,因为某些 Plesk 操作似乎会覆盖此文件。)

lkr*_*aav 1

无论您做什么,出门前请不要携带以下物品:

smtpd_client_restrictions = reject_rbl_client zen.spamhaus.org, reject_rbl_client bl.spamcop.net
Run Code Online (Sandbox Code Playgroud)

这些已经为我吸引了大部分人。