阻止在垃圾邮件字典攻击期间吞噬资源的后缀?

当一个垃圾邮件发送者使用他的数千僵尸PC僵尸networking以极高的速度随机发送不存在的地址@ example.com时,postfix耗尽了我们的VPS提供商的资源限制,试图解决这个问题。 具体来说,它耗尽了由VPS限制到900的非TCP套接字的数量。 在Virtuozzo Linux VPS上运行CentOS 5上的postfix 2.3.3-2.1.el5_2。

/var/log/maillog says: Feb 23 06:26:22 postfix/smtpd[3938]: warning: connect #1 to subsystem private/proxymap: Cannot allocate memory Feb 23 06:26:22 postfix/smtpd[3936]: fatal: socket: Cannot allocate memory Feb 23 06:26:48 postfix/qmgr[17702]: fatal: socket: Cannot allocate memory 

由于涉及字典攻击的数以千计的IP,防火墙将是一种困难。

VPS提供商build议调整以下参数,但没有给出设置它们的build议:

 max_idle = 100s (default) max_use = 100 (default) 

我发现另一个人与postfix和spammer字典攻击有同样的问题:

http://forums.vpslink.com/linux/394-you-hitting-socket-resource-limits-2.html#post5241

他变了:

 default_process_limit from 100 (default) to 10 

解决了这个问题但是引入了一个性能惩罚。

我不确定究竟应该安全地调整哪个参数,甚至在浏览postfix.org/TUNING%5FREADME.html后可以任何postfix专家帮助?

可悲的是,随着Postfix遵循stream程驱动模型,负载下的高内存使用率是其中一个副作用。 你可以试试这个

从/etc/postfix/master.cf

 # ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n - n - 5 smtpd 

maxproc列中,可以用一个较小的数字replace-以限制并发smtpd进程的数量,这应该为传入邮件的数量提供一些门槛。

另一种方法是查看fail2ban ,它可以configuration为parsing/var/log/maillog并为发送大量无法投递邮件的地址提高iptables块。

您可能要考虑添加类似于以下内容的内容:

 smtpd_recipient_restrictions = permit_auth_destination, permit_mynetworks, reject_unauth_destination, reject_unlisted_recipient 

…到您的main.cf文件,这应该导致后缀转储一些连接,只要它发现没有用户传递给。 神奇的是在reject_unlisted_recipient ,这将导致用户在与local_recipient_maps使用时对系统无效的拒绝。 通过这样做,应该减less处理量,减less一些压力,因为每个丢弃的连接释放宝贵的资源来处理下一个连接。 是的,垃圾邮件发送者将能够确定哪些地址是无效的,但更好的是,垃圾邮件发送者浪费他们的时间发送(并被拒绝,浪费他们的带宽)比你的(抵御攻击)。