我的 SMTP 服务器正在被探测。它看起来像是 SASL 上的暴力附加,他们正在其中检查密码字典。
在日志文件中看到了数千行这样的行
Sep 18 14:09:52 xxx postfix/smtpd[7412]: connect from ca255.calcit.fastwebserver.de[146.0.42.124]
Sep 18 14:09:55 xxx postfix/smtpd[7412]: warning: ca255.calcit.fastwebserver.de[146.0.42.124]: SASL LOGIN authentication failed: authentication failure
Sep 18 14:09:55 xxx postfix/smtpd[7412]: lost connection after AUTH from ca255.calcit.fastwebserver.de[146.0.42.124]
Sep 18 14:09:55 xxx postfix/smtpd[7412]: disconnect from ca255.calcit.fastwebserver.de[146.0.42.124]
我这样修改了 main.cf:
inet_interfaces = all
smtpd_sasl_auth_enable=yes
smtpd_helo_required = yes
smtpd_sender_restrictions = reject_unknown_address
smtpd_client_restrictions = check_client_access hash:/etc/postfix/maps/access_client,
permit_mynetworks,
reject
smtpd_recipient_restrictions = check_client_access hash:/etc/postfix/maps/access_client,
permit_mynetworks,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
permit_sasl_authenticated,
reject_unauth_pipelining,
reject_unauth_destination,
reject_rbl_client zen.spamhaus.org,
reject_rbl_client list.dsbl.org
permit
broken_sasl_auth_clients = yes
我的 /etc/postfix/maps/access_client 只有这一行:
146.0.42.124 REJECT
然而,重新启动 postfix 后,行为仍然没有变化,我仍然看到相同的错误,因此 SASL 仍在检查,即使我认为使用这些设置,客户端会在 SASL 进入游戏之前根据其 IP 地址被拒绝?
第二个问题是 - 我正在将传出邮件流量从一台机器中继到内部网络上的另一台机器 - 除了仅中继的机器上的“relayhost”设置之外,我可以在两台机器上保持其余的后缀设置相同吗?
答案1
如果您想禁用特定 IP 或 IP 范围的 SASL AUTH没有的副作用smtpd_delay_reject = no
,看看smtpd_discard_ehlo_keyword_address_maps
关键词。配置示例及说明:
配置
首先,我们在中设置关键字/etc/postfix/main.cf
:
smtpd_discard_ehlo_keyword_address_maps = cidr:/etc/postfix/esmtp_cidr
/etc/postfix/esmtp_cidr
现在我们在(我们刚刚指定的文件)中定义黑名单:
# /etc/postfix/esmtp_cidr
91.200.12.0/24 auth
155.133.82.77 auth
146.0.42.124 auth
由于这是一个cidr:
列表文件,因此不需要postmap
运行。但我们需要告诉 Postfix 重新加载其配置:
service postfix reload
解释
这是什么意思?对于指定的地址(本例中是完整的 IP 或 IP 范围),我们告诉 Postfix 禁用特定的 ESMTP 功能:AUTH
。这意味着,所覆盖的主机不再可以使用 SASL。我们检查一下日志:
Aug 11 22:37:39 xxx postfix/smtpd[32630]: connect from unknown[91.200.12.98]
Aug 11 22:37:39 xxx postfix/smtpd[32630]: discarding EHLO keywords: AUTH
Aug 11 22:37:39 xxx postfix/smtpd[32630]: lost connection after AUTH from unknown[91.200.12.98]
Aug 11 22:37:39 xxx postfix/smtpd[32630]: disconnect from unknown[91.200.12.98]
所以我们得到了我们想要的,而不必使用smtpd_delay_reject = no
,因此不需要担心后者的副作用。
注意:您可以以同样的方式禁止客户端使用其他 ESMTP 功能,例如管道或 starttls。例如,可以找到可用关键字的列表在这篇维基百科文章中。除了与smtpd_sasl_exceptions_networks,这些关键字不仅不会被公布,而且根本不会被接受——正如日志所示。
答案2
在发送(或) 命令smtpd_client_restrictions
之前,Postfix 不会评估。RCPT TO
ETRN
http://www.postfix.org/SMTPD_ACCESS_README.html#timing
当前的 Postfix 版本推迟了对客户端、helo 和发件人限制列表的评估,直到 RCPT TO 或 ETRN 命令为止。此行为由 smtpd_delay_reject 参数控制。限制列表仍按(客户端、helo、etrn)或(客户端、helo、发送者、中继、接收者、数据或数据结束)限制的正确顺序进行评估。当限制列表(例如:客户端)评估为 REJECT 或 DEFER 时,将跳过后面的限制列表(例如:helo、发件人等)。
因此,您可以通过在您的 中设置以下内容来解决这个问题main.cf
:
smtpd_delay_reject = no
至于你的第二个问题,postfix 有很多控件,如果没有网络、postfix 配置和客户端配置的完整详细信息,这几乎是不可能回答的。最好的方法就是尝试一下。