当垃圾邮件发送者使用他的数千台僵尸 PC 的僵尸网络以非常高的速度向随机不存在的地址 @example.com 发送垃圾邮件时,postfix 会耗尽我们的 VPS 提供商的资源限制来尝试处理它。具体来说,它耗尽了非 TCP 套接字的数量,VPS 将其限制为 900。我在 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 提供商建议调整以下参数,但没有给出设置它们的建议:
max_idle = 100s (default)
max_use = 100 (default)
我发现另一个人对后缀和垃圾邮件字典攻击有同样的问题:
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 遵循进程驱动模型,负载下的高内存使用是它的副作用之一。你可以试试这个
从 /etc/postfix/master.cf
在
maxproc
列中,您可以将 替换-
为较小的数字来限制并发smtpd
进程的数量,这应该对传入邮件的数量提供一些限制。另一种选择是查看
fail2ban
哪些可以配置为解析/var/log/maillog
和提升 iptables 块,用于发送大量无法投递的邮件的地址。您可能需要考虑添加类似于以下内容的内容:
...到您的
main.cf
文件中,这应该会导致 postfix 在发现没有用户可以交付时立即转储一些连接。神奇之处在于reject_unlisted_recipient
,当与local_recipient_maps
. 通过这样做,它应该通过减少正在进行的处理量来减轻一些压力,因为每个断开的连接都会释放宝贵的资源来处理下一个连接。是的,垃圾邮件发送者将能够确定哪些地址无效,但垃圾邮件发送者浪费他们的时间发送(并被拒绝,浪费他们的带宽)比你的(抵御攻击)更好。