过去几天,我的服务器 CPU 一直处于峰值状态,甚至会丢弃请求。我查看了日志,发现日志中的某些 IP 只是在反复下载我网站的内容,例如 .js、.css、图像文件等。这些 IP 通常位于中国。我还看到他们发出的其他请求,试图在服务器上查找不存在的文件。例如
www.example.com/lawson-consultant-in-independence/
或者
/劳森开发商-斯特林海茨/
这些地址与我们的网站无关。
我尝试阻止第一个 IP,但现在看起来它来自许多不同的 IP。我认为这就是导致我的 CPU 峰值的原因。
我的问题是,如何防止此类事件发生?我该如何应对才能保持网站正常运行和可用?
我读到过,有些方法可以阻止在特定时间段内发送过多请求的人,但我不想意外阻止 BingBot、GoogleBot 和其他蜘蛛程序。在这种情况下,人们该怎么做才能防止这种类型的攻击?如果这是攻击?
答案1
如果你不需要向这些 IP 提供内容,就屏蔽它们。如果你不想向中国提供内容,就屏蔽整个网络,或者整个国家。
或者,可以使用 fail2ban 之类的工具来阻止任何试图访问不存在页面的 IP。
对于 Windows,您可以使用 ts.block 或此处描述的 Evan Anderson 的工具:fail2ban 可以用于 Windows 吗?
答案2
就像 Rory 所说的,Fail2ban 是一款很棒的工具。我在大学时学到的一个小“热修复”是向 Iptables 添加以下规则,直到您能够真正解决问题:
-A INPUT -p tcp -m tcp --dport 80 -m recent --set --name HTTP --rsource
-A INPUT -p tcp -m tcp --dport 80 -m recent ! --rcheck --seconds 10 --hitcount 20 --name HTTP --rsource -j ACCEPT
通过将 --dport 80 替换为 --dport 443,可以对端口 443 执行相同的操作。
这样做的目的是阻止在 Y 秒内发出超过 X 个请求的人。您可以根据需要更改此设置。
编辑:读取失败....IIS...抱歉!
答案3
您需要做的是确保您的日志文件能够记录所有 IIS 日志记录选项,然后为自己准备一个好的日志文件阅读器(可以分解长请求和/或频繁请求的来源)。如另一篇文章所述,如果 IP 范围来自中国、俄罗斯等国家,并且您看到类似的 IP 范围模式,请不要害怕禁止整个 IP 范围。Web Log Expert 是我最喜欢的,因为它可以生成报告。