这让我抓狂...Linux Debian + postfix.../etc/postfix/main.cf 有以下几行:
smtpd_recipient_restrictions =
check_recipient_access hash:/etc/postfix/access,
reject_invalid_hostname,
reject_non_fqdn_recipient,
reject_non_fqdn_sender,
reject_unauth_destination,
reject_unauth_pipelining,
reject_unknown_recipient_domain,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client sbl-xbl.spamhaus.org,
check_policy_service unix:private/policyd-spf,
check_policy_service inet:127.0.0.1:10023,
permit_auth_destination,
reject
目前,postfix 拒绝来自单个 IP 的传入消息:
[email protected]
SMTP error from remote mail server after RCPT TO:<[email protected]>:
host mail.server.ext [123.123.123.123]: 554 5.7.1 Service unavailable; Client host [234.234.234.234] blocked using cbl.abuseat.org; Blocked - see http://cbl.abuseat.org/lookup.cgi?ip=234.234.234.234
出色地…http://cbl.abuseat.org/lookup.cgi?ip=234.234.234.234报告没有将 234.234.234.234 列入黑名单(显然 IP 234.234.234.234 不是真正的 IP)。
到目前为止,已有十几封电子邮件因同样的原因被阻止,但每次我手动查询 RBL 时,IP 都报告为干净。
Postfix 是否将查询缓存到 RBL?我遗漏了什么?
在此先感谢您的时间。
答案1
从顶层角度,Postfix 依赖 libc 解析器进行 DNS 查找(包括 RBL),因此行为取决于库。例如,postfix 将始终通过 NS 服务器进行查找/etc/resolv.conf.
如果NS服务器有缓存机制,那么postfix也会获取缓存结果。如果您的提供商有“DNS 劫持“(将 DNS 数据包转移到他们的 NS 服务器)。在这种情况下,您还会访问他们的缓存(如果他们启用了缓存)。
要检查 DNS 查询的输出,您可以使用dig
命令。例如,检查 IP 地址 216.154.195.36 是否列在 cbl.abuseat.org 中。
$ dig 36.195.154.216.cbl.abuseat.org
; <<>> DiG 9.10.1-P1 <<>> 36.195.154.216.cbl.abuseat.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 48609
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
如果返回的是 NXDOMAIN,则表示未列出 IP 地址。
从底层角度,每个smtpd
过程已缓存自己的 DNSBL 查找结果。这些结果不会与其他 Postfix 进程共享。每个smtpd
进程将被重复使用,直到max_use
或者max_idle
达到。当smtpd
进程死亡时,RBL 缓存也会丢失。当守护进程smtpd
创建新进程时master
,它将拾取新的配置main.cf
(包括和max_idle
。max_use
所以实际上不需要重新启动postfix。