这听起来有点令人头疼,但我们正在从 Sendmail 服务器转移到 Postfix 服务器来处理网络上的邮件路由,有选择地确定哪些地址会导致邮件被路由到不同的位置(或只是简单地重写到不同的 @domain)。因此,此系统处理的域在列表中virtual_alias_domains
。
问题是,我们有一些地址我们总是想拒绝,而且我们还virtual_alias_domains
请参阅配置末尾的 catch-alls中的地址。我们主要执行以下操作,并在virtual_alias_maps
指令中引用此文件:
/etc/postfix/virtusertable:
...
@domain.tld @internal.domain.tld
我们希望能够REJECT
同时执行“收件人根据策略拒绝”的消息,因此我们尝试将其表示如下:
/etc/postfix/recipient-access:
[email protected] REJECT Recipient rejected by policy.
baduser@ REJECT Recipient rejected by policy.
以及配置中引用的文件smtpd_recipient_restrictions
和smtp_relay_restrictions
... check_recipient_access hash:/etc/postfix/recipient-access ...
问题是,当发往该目标的邮件被递送到邮件服务器,并在重写并转发到链中的下一个链接之前,我们预计它会返回“已拒绝”或类似的“不允许”响应。然而,当使用 进行测试时,Postfix 表示邮件是可递送的(即使没有尝试递送) - 而不是“已拒绝”或类似的。sendmail -bv [email protected]
我不知道该如何设置这样的“拒绝”规则。我们似乎在 Sendmail 系统中已经实现了这一点,但我们想摆脱这个邪恶的系统,用 Postfix 系统取而代之。
请注意,我们正在尝试尽可能地匹配 Sendmail 配置。我们现在除了拒绝某些地址外,一切正常,但不确定如何继续......
答案1
我终于找到了解决方案,但我不得不去#postfix
Freenode 上的 IRC 频道获取它。他们建议改用header_checks
正则表达式或类似方法正确处理标头以确定拒绝策略。
header_checks = regexp:/etc/postfix/header_checks
所以,我这样做了。我在PostFix 文件中放置了以下main.cf
内容,然后在/etc/postfix/header_checks
文件中设置了如下规则:
/etc/postfix/header_checks:
/^To: [email protected]/ REJECT Recipient rejected by policy.
/^To: baduser@/ REJECT Recipient rejected by policy.
这可以扩展以检查某些“发件人”字段或标题中的其他项目。话虽如此,您必须对正则表达式有一点了解才能使其工作。您可以将其用于发件人字段或任何其他内容,但您需要正则表达式开头的部分才能正常工作。/^From: [email protected]/
/^
遗憾的是,没有更清晰的记录,但我能够解决这个问题header_checks
,所以这算是一个答案。