QMail – 继电器队列中的许多故障通知只对localhost打开

我configuration了一个qmail服务器来拒绝邮件,如果收件人没有在rcpthosts中列出,我使用tcp-env和xinetd来允许本地procs发送邮件给任何人,在/etc/hosts.allow添加以下行:

 tcp-env: 127.0.0.1 : setenv RELAYCLIENT 

在testing过程中,一切似乎正常工

 $ telnet mydomain.com 25 Trying xxx.xxx.xxx.xxx... Connected to mydomain.com. Escape character is '^]'. 220 mydomain.com ESMTP HELO 250 mydomain.com MAIL FROM: [email protected] 250 ok RCPT TO: [email protected] 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1) 

现实生活中有很多这样的信息:

 2744522 (1, remote) Envelope Sender: Envelope Recipient: [email protected] (To Be Delivered) Date: 22 Apr 2014 07:38:14 -0000 From: [email protected] To: [email protected] Subject: failure notice Size: 18.45KB (18889 Bytes) 

QMail应该为rcpthosts中列出的域发送失败通知,并且在没有发送失败通知的情况下应该拒绝没有列出的域中的邮件。

任何人都可以解释我做错了什么?

谢谢!

qmail的一个缺点是默认情况下,在接收邮件之前,它不会检查收件人地址的本地部分。 它所做的只是检查收件人域是否在允许的收件人域的列表中。 (这在二十世纪九十年代早期是一个不合理的deviseselect,现在不太合适)。这意味着,例如做字典喷雾的垃圾邮件制造者可以通过向不存在的收件人投掷大量邮件来填满服务器。 当qmail试图传递消息时,它会发现这个localpart不存在,并且会产生一个退回消息。 而且由于垃圾邮件发送者将伪造信封发件人,您的服务器将无法发送这些邮件,并将填补队列。

最好的解决办法是不要接受这些电子邮件。 如果您的服务器可以在RCPT TO:[email protected]上立即拒绝电子邮件,那么发送邮件服务器的工作就是发出反弹,而且不会被反弹充斥。

另一个解决scheme是减lessqmail将不断尝试传递退回消息的时间,以便它们将被删除,从而也不会填满队列。

当然,你可以过滤传入的垃圾邮件,并放弃它,而不是让它产生反弹。

拒绝未知的本地部分

实现这一点的唯一方法是修补qmail,以便qmail-smtpd将检查本地部分。 你不能仅仅通过configuration选项来做到这一点,你需要实际打补丁并重新编译并安装补丁的qmail-smtpd

有几个不同的补丁可以实现这一点。 我不能推荐他们中的任何一个 – 当我pipe理qmail服务器时,我们有另一个系统作为代理来做这个过滤,所以我从来不需要使用它。 但是你可以在netdevice.com/wmail/rcptck和code.dogmap.org/qmail/find几个补丁。

减lessqmail试图提供反弹的时间

如果这只能反弹,我不知道如何。 但是你可以通过改变queuelifetime的值来完成所有的邮件。 man qmail-control应该告诉你如何去做。

垃圾邮件过滤

关于垃圾邮件过滤有很多可以说的地方,以适应一个单一的答案。 我会从考虑RBL风格的黑洞列表开始,并拒绝来自这些列表中的IP地址的连接。 当然,你需要仔细select你的黑洞名单,而且你有冒险阻止“真正”的邮件。 在Chris Hardie的qmail反垃圾邮件howto中有一些关于垃圾邮件过滤专门用于qmail的信息,还有关于spamhaus.org上各种黑洞列表的信息。

我希望这足以一开始。 现在我已经使用qmail了几十年,包括为数百万用户运行一个ISP的邮件系统 – 但是我也必须补充一点,如果我现在要设置这样一个系统,qmail将不再是我的第一select。 这是一个非常好的邮件服务器,当它创build时,它做了很多事情,但现在我可能会去与后缀。 时间和垃圾邮件发送者已经移动,而qmail没有。