我有带有反垃圾邮件功能的 Postfix,当反垃圾邮件功能向 Postfix 返回状态 554(垃圾邮件)时,邮件会被退回给发件人。
有没有办法决定后缀 554 的另一个操作,例如拒绝。
另一个问题是:是否可以查找发件人的域并根据域决定是否退回或拒绝(查看某些域列表)。
谢谢。
答案1
确保在 main.cf 中正确设置了收件人地图,否则您可能会出现反向散射。至少这样弹回就不会那么令人反感。
为了拒绝消息,请在 main.cf 中添加一个条目,例如:
smtpd_recipient_restrictions = permit_mynetworks,
# permit_sasl_authenticated,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unlisted_recipient, # !!! should strictly enforce relay_recipient_maps
reject_unknown_recipient_domain, # less strict, probably redundant on most configurations
reject_unauth_pipelining,
reject_unauth_destination,
reject_invalid_hostname,
reject_non_fqdn_hostname,
# check_policy_service unix:private/spf-policy,
reject_multi_recipient_bounce
其中一些后续检查(例如拒绝 non_fqdn_hostname)是可取的,但在 LAN 环境中可能会出现问题或无用;permit_mynetworks 应该允许您解决这个问题。它们位于最后,因为检查 DNS 可能会占用大量 CPU。SPF 和 SASL 身份验证是可取的,但您没有说明是否使用它们。
为了进行更细粒度的控制并回答您的第二个问题,请使用后缀标头检查。main.cf 得到如下一行:
header_checks = regexp:/etc/postfix/header_checks
然后 /etc/postfix/header_checks 会获取各种正则表达式
/^From: "spammer/ REJECT
/^Received: from .*\.pubye\.com \(.*\.pubye\.com \[.*\]\)/ REJECT
除了 REJECT 之外,您还可以执行 DISCARD,这样它将被接受,然后被丢弃。例如,要丢弃 C 类发送者:
/^Received: from .* \[104\.140\.32\..*/ DISCARD
您可能需要使用 dovecot 的 SIEVE 或 Courier 的 maildrop 或其他工具将垃圾邮件过滤到垃圾文件夹,而不是直接拒绝。