在我的 postfix/courier debian 9 服务器上,我可以通过 telnet 发送邮件,结果如下
250 2.1.0 Ok
现在我尝试阻止用户通过 telnet HELO 命令使用我自己的域发送未经身份验证的邮件。
我在我的后缀中添加了这个main.cf
:
smtpd_helo_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
check_helo_access hash:/etc/postfix/check_helo_access,
...
这是我的文件/etc/postfix/check_helo_access
:
/mydomain\.de$/ 550 Forged HELO/EHLO command
现在这种方法可以了,但是当我尝试通过 telnet 发送电子邮件时,它被阻止了,但我收到了错误:
451 4.3.5 <mydomain.de>: Helo command rejected: Server configuration error
我也尝试过这样设置/etc/postfix/check_helo_access
:
mydomain.de REJECT
导致相同的错误消息。如果我将选项设置为smtpd_recipient_restrictions
而不是smtpd_helo_restrictions
,则会出现相同的错误。
我该如何正确配置,才能在 telnet 中收到清晰的错误消息?或者这是正确的方法,而错误消息只是误导性的?
答案1
你混合了两种不同的Postfix 查找表类型:
如果你想使用
/example\.com$/ 550 Forged HELO/EHLO command
你需要
check_helo_access pcre:/etc/postfix/check_helo_access
并建立 PostfixPCRE 支持。在 Debian 9 中,你需要
postfix-pcre
。和
check_helo_access hash:/etc/postfix/check_helo_access
您必须使用格式
example.com 550 Forged HELO/EHLO command
postmap /etc/postfix/check_helo_access
并记住在修改后执行。
作为附加提示,您可以HELO
在完整HELO
、MAIL FROM
&RCPT TO
序列之后触发所有 、发件人和收件人限制,方法是将它们全部放入smtpd_recipient_restrictions
。这样,您就不会丢失有关谁试图向谁发送邮件的信息,就像您在之后立即拒绝邮件一样HELO
。这使得调试和取证变得容易得多。