当一个垃圾邮件发送者使用他的数千僵尸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一些压力,因为每个丢弃的连接释放宝贵的资源来处理下一个连接。 是的,垃圾邮件发送者将能够确定哪些地址是无效的,但更好的是,垃圾邮件发送者浪费他们的时间发送(并被拒绝,浪费他们的带宽)比你的(抵御攻击)。