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


学习并试图理解

我花了最后一周的时间了解Postfix可以做些什么来帮助减少垃圾邮件。如果我理解正确的不同 *_restrictions 配置参数控制 什么时候 检查完成,然后是限制列表,如 permit_mynetworks 和 check_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

如果我理解正确,那将是这样的:

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

黑名单文件为空。 no_auth文件包含:

/^/ PREPEND X-No-Auth: unauthenticated sender

和no_relay文件有这个:

/^/ PREPEND X-No-Relay: not in my network

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

关注

  • 重复检查
    当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_restrictions 和 smtpd_relay_restrictions 并忽略客户,helo,发件人?

  • 黑名单
    列表中的那个黑名单不是很早吗?如果发件人是我的网络的一部分并且可以进行身份​​验证,我是否应该根据发件人电子邮件进行阻止?现在该表是空的,但我不确定Plesk组件可能会向该表添加电子邮件地址。它也会违反要求100%交付给postmaster @和滥用@地址的RFC。

这就是我想要完成的

  • 保持相当简单
  • 确保我不创建开放式继电器或其他安全漏洞
  • 确保我不会阻止有效的电子邮件
  • 虚拟别名表中存在的白名单postmaster @和abuse @地址
  • 黑名单来自中国/韩国的垃圾邮件发送者的IP地址块
  • 使用正则表达式拒绝使用全部捕获的域上的所有但不是某些收件人地址。我在一个域上使用了catch-all,所以我可以使用VERP-y跳出地址,即使Plesk不支持VERP。

这就是我的想法

在/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

在/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

我遇到的例子都有 @ 在正则表达式中转义。它不是一个特殊的角色,是吗?

我提议的配置完成是否需要我想要?

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


5
2017-07-16 03:30






答案:


无论你做什么,不要离开家:

smtpd_client_restrictions = reject_rbl_client zen.spamhaus.org, reject_rbl_client bl.spamcop.net

这些都是我自己的大多数人。


1
2017-07-20 04:11





好的,这是一个很长的问题。我将尝试回答上述问题的某些部分。也许可以根据它们绘制摘要。

免责声明:我没有使用过plesk,但我使用了postfix。这个问题年龄超过一年,所以也许plesk已经更新了他们的postfix配置。但我认为这个问题对设计和实现后缀限制的人有用

Q1:这两个配置是否相同?

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

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

如果电子邮件来自mynetworks,则不会进行检查 /var/spool/postfix/plesk/no_relay.re 和 /var/spool/postfix/plesk/no_relay.re。这意味着电子邮件将是 接受而不是改变。在后缀动作(REJECT,ACCEPT)方面,它不会有所不同,但对于plesk而言,这两个标题可能是 重要

Q2:Postfix多次列出后会再次执行检查吗?或者Postfix知道它已经做了那个检查吗?如果多次执行检查,这似乎是浪费。如果它们没有多次执行,那么在所有情况下都能正确添加no_auh / no_relay标头吗?

是的,当两次检查重复时,它可能看起来很浪费。但是这种重复检查将被放置在不同的地方/限制中。在每次检查中,都有一些逻辑或算法如何postfix处理电子邮件。您可能会担心重复检查支票是否很重,例如 check_policy_service 或DNSBL。对于轻量级检查 permit_mynetwork,你可以忽略它。

问题3:仅使用smtpd_recipient_restrictions和smtpd_relay_restrictions并忽略客户端,helo,sender是否安全?

好吧,有两个smtpd_recipient_restrictions和smtpd_relay_restrictions应该足够一些高级限制。但它适用于后缀> = 2.10。对于postfix <2.10的用户,您可以将检查置于多个指令中,因此后缀不会 变得太宽容了。 

问题4:我提议的配置完成了我想要的吗?

是的,很好地简化了当前的后缀限制。但要注意后缀是plesk的一部分。 plesk的工程师可能出于某些原因(例如模块化或简单维护)来安排这些限制。

摘要:

  • 建议不要对smtpd _ * _限制进行所有限制。
  • 因此,您可以使用smtpd_relay_restriction for postfix> = 2.10或其他限制检查postfix <2.10

1
2017-09-22 01:48