Postfix 是否缓存 RBL 查询?

Postfix 是否缓存 RBL 查询?

这让我抓狂...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_idlemax_use所以实际上不需要重新启动postfix。

相关内容