我在运行 Ubuntu 18.04 的 VPS 上有一个邮件服务器(postfix v3.3),使用各种系统处理入站和出站邮件(我有一些网站发送邮件,还有一些 SASL 身份验证用户在机器上有账户):速率限制以及 RBL、DKIM、SPF 和使用 Amavis 和 Spamassassin 的病毒检查。
但是,很难知道在哪里放置检查,以便它们仅在其他较便宜的检查运行时才启动,同时仍保留保护。我正在考虑像这样配置 main.cf,这看起来合理吗?就首先放置最便宜的检查而言,我是否应该在 中放置更多检查smtpd_client_restrictions
,例如(因为我假设这些检查会在 之前运行smtpd_sender_restrictions
)?
disable_vrfy_command = yes
smtpd_helo_required = yes
smtpd_client_restrictions =
check_client_access hash:/etc/postfix/blacklist,
permit_mynetworks
smtpd_helo_restrictions =
reject_invalid_helo_hostname
smtpd_sender_restrictions =
# Filter through Amavis + spamassassin:
check_client_access cidr:/etc/postfix/internal_clients_filter,
permit_mynetworks,
reject_unknown_reverse_client_hostname,
reject_non_fqdn_sender,
reject_unknown_sender_domain
smtpd_recipient_restrictions =
smtpd_relay_restrictions =
permit_mynetworks,
# Rate limiting + geolimiting with postfwd
# See https://github.com/Vnet-as/postfwd-anti-geoip-spam-plugin
check_policy_service inet:127.0.0.1:10040,
permit_sasl_authenticated,
reject_unknown_recipient_domain,
reject_non_fqdn_recipient,
reject_unlisted_recipient,
reject_unauth_destination,
# Sender scoring https://github.com/DavidGoodwin/policyd-dnsbl-spf-geoip/blob/master/README.md
check_policy_service unix:private/senderCheck,
permit_mx_backup
smtpd_data_restrictions =
reject_unauth_pipelining
答案1
测试按照逗号分隔列表中指定的顺序触发:如果测试结果为 或permit
,reject
则省略所有其他测试。如果成本较低的测试足以做出决定,则可以省略成本较高的测试。从使用 SMTP 访问限制列表进行选择:
每个限制列表从左到右进行评估,直到某个限制产生 PERMIT、REJECT 或 DEFER(稍后再试)的结果。每个列表的末尾相当于 PERMIT 结果。通过在 REJECT 限制之前放置 PERMIT 限制,您可以为特定客户端或用户设置例外。这称为允许列表;上面的第四个示例允许来自本地网络的邮件,但拒绝发往任意目的地的邮件。
接下来是:
下表总结了每个 SMTP 访问限制列表的用途。所有列表都使用完全相同的语法;它们仅在评估时间和 REJECT 或 DEFER 结果的影响方面有所不同。
因此,从你的问题的角度来看,你使用哪个 SMTP 访问限制列表并不重要。不过,我实际上建议将大多数测试放在smtpd_recipient_restrictions
或者smtpd_relay_restrictions
因为两者都是在RCPT TO
命令之后进行评估的。这样,您将在日志中保存完整的 和 ,这可能有助于调试任何错误HELO
拒绝MAIL FROM
。RCPT TO