如何根据“收件人”地址过滤和拒绝 postfix 中的邮件

pi.*_*pi. 4 postfix spam centos

我的 CentOS 服务器配置为仅用于发送邮件。我需要一个过滤器来拒绝针对选定目的地的邮件。例如,如果我测试

> mail -s "test"  spam@trash.com
Run Code Online (Sandbox Code Playgroud)

我希望该邮件被拒绝而不发送。我已经探索过

smtpd_收件人限制

标记[和其他人],但我无法使其发挥作用。日志仍然显示邮件已发送并从队列中删除。

在 main.cf 文件中的 smtpd_recipient_restrictions 下,我有:

> check_sender_access hash:/etc/postfix/maps/access_sender
Run Code Online (Sandbox Code Playgroud)

例如我有的地方

@trash.com     REJECT
Run Code Online (Sandbox Code Playgroud)

我想补充一点,该服务器将邮件转发到另一个服务器,但我希望在转发到主机之前可以过滤掉不需要的邮件。请帮忙。谢谢

Cra*_*son 5

check_sender_access选项仅适用于“发件人”地址。要根据“收件人”地址进行过滤,您可以通过以下两种方式之一执行此操作。


如果您只想过滤“收件人”地址,只需更改为check_sender_accesscheck_recipient_access保留当前的哈希文件即可。


一种更可扩展的过滤方式是通过标头。将以下内容添加到您的main.cf文件中:

header_checks = regexp:/etc/postfix/header_checks
Run Code Online (Sandbox Code Playgroud)

然后在以下位置创建以下文件/etc/postfix/header_checks

/^To:.*address1@example.com.*$/ DISCARD blocked
/^To:.*address2@example.com.*$/ DISCARD blocked
/^To:.*address3@example.com.*$/ DISCARD blocked
/^To:.*address4@example.com.*$/ DISCARD blocked
Run Code Online (Sandbox Code Playgroud)

并重新启动Postfix。

注意-DISCARD仍会显示为发送消息,但该消息将被默默丢弃。如果您想强制退回邮件,请使用REJECT


参考文档:

http://www.postfix.org/postconf.5.html#smtpd_recipient_restrictions http://www.postfix.org/header_checks.5.html