18.12.6 拒绝服务攻击
要防止拒绝服务攻击(denial of service,DoS)是很困难的,因为没有一种方法可以预先知道一则消息是一个攻击还是一份有效的电子邮件。攻击者可以尝试各种卑鄙的招数,包括用假连接淹没SMTP端口,用巨大的消息填满磁盘分区,阻塞向外的连接,以及邮件炸弹。sendmail有一些配置参数可以帮助减慢或限制一次拒绝服务攻击的冲击,但是这些参数也会妨碍合法的邮件传输。邮件过滤库(milter)可能会帮助系统管理员对抗一次长时间的拒绝服务攻击。
MaxDaemonChildren选项可以限制sendmail进程的数目。它能防止系统被sendmail的任务压跨,但也让攻击者能够非常容易地关闭SMTP服务。MaxMessageSize选项有助于防止邮件队列目录被填满,但如果把它设置得太小,合法邮件将被弹回(您可以向用户说明这项限制,这样当邮件被弹回时他们就不会感到惊讶。无论如何我们建议把限制设得高一些,因为一些合法的邮件也很大)。ConnectionRateThrottle选项限制的是每秒钟内允许的连接数目,它可以大大减缓连接速度。最后,可以设置MaxRcptsPerMessage,它控制一则消息中允许收件人的最大数目,这可能会有所帮助。
sendmail一直能够根据系统的平均负载来拒绝链接(REFUSE_LA选项)或者把电子邮件排入队列(QUEUE_LA选项)。在8.12版的sendmail引入了一种变化(DELAY_LA选项),它能让邮件继续流动,但是速度却被降低了。参考18.12.3节关于性能的详细说明。
尽管这一切都致力于保护您的邮件系统,但用邮件轰炸您的人还是会妨碍合法的邮件传输。邮件炸弹是相当卑鄙的。
科罗拉多大学为每个学生(大约有25000人)提供了一个电子邮件账户,pine是默认的邮件阅读器。几年前,一位学生在本地的计算机商店获得了一份新工作,他的雇主说服他提供口令文件的一个副本。然后这家公司给口令文件中的每个人都发送了一则广告,大约分成每次1000个收件人(这使得To: 行非常长)这样来发。
pine是把默认的回复模式设置为对所有的收件人和发件人作出答复来编译的。许多学生用这样的问题来做答复:“为什么您给我发送这封垃圾?”。当然这样的信发给了To: 行中的其他所有人。结果是服务器拒绝所有服务—无论是电子邮件还是任何其他使用。sendmail接管了所有的CPU计算周期,邮件队列庞大无比,所有正在进行的工作都被暂停。唯一的解决方案是让这台机器下线,进入每个用户的邮件缓冲区,并删除讨厌的消息(也已经用了对标题[Subject]行进行信头检查的方法)。
| 回书目 上一节 下一节 |