我想知道,当有人扫描您的 Web 服务器以查找潜在漏洞时,你们有什么建议吗?有什么好的方法来阻止这种情况吗?
在防火墙级别阻止他们的 IP 有帮助吗?我在想,也许添加一个 iptables 规则来阻止或评估传入连接的限制可能会有帮助?如果是这样,那么什么是适合此目的的 iptables 规则?
对此有什么想法吗?
谢谢
答案1
有什么好方法可以阻止这种情况吗?
确保您的服务器是安全的,他们就不会再骚扰您。
答案2
处理自动化机器人分为两个阶段:
- 检测并识别机器人。
- 决定如何处理它们。
如果您拥有任何类型的中等受欢迎程度的网站,机器人的数量将使手动执行此操作变得不切实际。您将需要对自动机器人进行自动响应。
漏洞扫描机器人很有可能会产生大量 404 错误(我假设您谈论的是 Web 应用程序漏洞,而不是 SSH 或 Apache 漏洞。如果您更担心端口扫描程序会查找暴露在互联网上的 MySQL,那么最好的办法是使用防火墙并忽略它们。)因此,您可能需要先创建一个脚本,扫描 Apache 错误日志中的 404 错误并按 IP 地址对结果进行分组。如下所示:
grep "File does not exist:" /var/log/httpd/error_log | cut -d' ' -f1 | sort | uniq -c | sort -n | tail
将为您提供 404 请求最多的前 10 个 IP 地址。但是,这并不是任何不当行为的证据。您还需要查看访问日志中的一些实际请求,以验证这些请求是否真的是探测漏洞的尝试。此脚本将为您提供“可能的嫌疑人”列表,您可以从中开始缩小真正的罪魁祸首。从 cron 作业运行它并在下一步中使用输出。
接下来我要做的事情是开始根据所发出的请求为 IP 地址分配分数,这有点像 SpamAssassin 对垃圾邮件进行评分的方式。例如,某些字符串在自动攻击中经常出现。
- 以“.txt???????”结尾的 URL
- 包含“?var1=http://evil.com/foo.txt“
- 包含“../../../”的 URL
- 包含任何 Javascript、HTML、PHP 或 SQL 的 URL。
以上任何一种方法(我相信您一定会找到自己的方法)都会提高 IP 地址的得分。当然,攻击者可以在一定程度上适应以逃避您的检测,但除非您成为更高价值的目标,否则他们很可能不会对您这样做。这种策略将长期有效。
对每个 IP 地址进行评分后,找到一个分数阈值,所有机器人的分数都高于该阈值,而所有真实用户的分数都低于该阈值,然后将所有分数较高的 IP 地址添加到列表中以采取措施。
现在我们进入第二阶段:决定如何处理这些问题。
你可以:
- 向他们发送 HTTP 403(禁止)消息。
- 向他们发送一个 ICMP 拒绝数据包(这是 iptables 配置中的 -j REJECT)
- 丢弃他们的数据包并且不向他们发送任何内容。(这是 iptables 配置中的 -j DROP)
- 将其连接速率限制为每分钟 60 个数据包或每秒 512 字节。
- 记录一切并联系他们的 ISP。
- 以上都不是...还有很多其他选择。
所有上述选项都涉及修改配置文件和重新启动服务。我建议自动生成整个文件并在 Apache 配置中使用 Include 语句或将其附加到 iptables 配置,然后重新启动 Apache 或 iptables。使用 iptables 时要非常小心,很容易将您自己或您的用户锁定在您的盒子之外。确保您在脚本中构建故障保护,或者您有另一种访问它的方法,例如控制台端口或 KVM。
答案3
最好的方法是在它到达 Web 服务器之前阻止它。虽然可以使用 Web 服务器上的防火墙来实现这一点,但我认为这两个功能足够专业,应该独立。任何像样的防火墙都会通过简单地丢弃来自该源的所有数据包来响应端口扫描,从而提供您所需的保护,而这并不需要或生成“数百万个条目”,如其他地方所建议的那样。
答案4
有几种简单的方法是阻止来自本地子网之外的任何 ICMP(ping)以及阻止通过 IP 而不是 DNS 发送的请求。
第一个可以在 IPTables 中实现。第二个使用 mod_security2.5 很容易实现,前提是你使用的是 Apache。(免费的 Mod_security 是一个应用程序级防火墙,是对 IPTables 的一个很好的补充)
当合法客户端请求页面时,请求通常包含 DNS 信息。另一方面,机器人通常只会增加 IP。