情况是这样的:我有一个持续不断的中国僵尸网络,它向我的论坛发送垃圾邮件(在 nginx 等上的 Ubuntu 12.04.2 服务器上运行)。我一直在使用 UFW(Ubuntu 的“简单防火墙”)来管理防火墙,这只是一种不必处理 iptables 的简单方法。
我已经确定了它在每次机器人访问时尝试加载的极其一致和独特(更不用说愚蠢)的 URL,并从中制定了一个 cron 来每小时解析访问日志并查找新的攻击者并ufw deny from [ip-address]
对其进行攻击。
然而,攻击并没有停止。真是难以置信。我记录了每个被封锁的 IP,总数已达到近 17,000 个。98% 的 IP 来自中国,还有少数来自其他国家。
这出现运行良好:实际上,所有这些攻击都被阻止了,连接恢复正常,流量呈指数下降,并且有效的 DDOS 已经停止(如果我让这些客户端通过,请求的数量和速度是惊人的)。
UFW 还似乎可以接受。没有任何减速,请求以相同的速度处理,据我所知,延迟没有受到影响。我尝试将各个 IP 尽可能地组合成范围,但很难找出所有 IP,并且会阻止比实际造成问题的 IP 多一个数量级的 IP。
因此,存在一些问题:
- 在我应该担心之前,我可以合理地拥有多少条规则(总的来说,大概是 iptables)?
- 继续这种做法是否会产生任何可能的负面影响?
- 有任何建议的变更或改进吗?
- 有人知道这个机器人吗?它正在攻击 bbPress。有没有比治标更好的方法来预防此类攻击?
不幸的是,我不想封锁整个中国,因为我知道我们在那里有用户……
答案1
1-2 。理论上,您可以随意设置。实际上,您首先会开始观察到一些内存问题,因为必须加载所有这些规则。然后,您会遇到真正的麻烦,即 CPU 会达到最大限度,因为您必须检查所有这些规则,直到找到匹配的规则。还取决于您要记录的内容(即,您是否记录了所有内容、所有 DROP 等等?)
3.使用IP集,阻止整个IP块和/或与硬件防火墙结合。
4.我不熟悉 bbPress,但你可以做很多事情来减轻攻击,从缓存到预先阻止与僵尸网络相关的 IP 块。
答案2
- 很少几个
- 在某些时候,你的系统会变慢
- 见下文
- 不是我
你要求可能的改进,而我首先要做的是加快反馈循环。根据我的经验,如果 DDOS 很快发现它们不成功,它们会更快消失。因此,用 404 响应该 URL 的请求,并立即阻止它们(实现这一点的一种方法是将 IP 地址粘贴到 beanstalk 管道中,并将你的 cronjob 变成一个持续运行的东西,轮询该管道并阻止)。
答案3
这不会影响内存(甚至会使情况变得更糟)但可以节省 CPU 负载:如果您还没有这样做,您应该将世界其他地方列入白名单,而不是根据您长长的被阻止 IP 列表检查所有传入连接。