iptables 字符串匹配可行性;可能与 fail2ban 一起使用

iptables 字符串匹配可行性;可能与 fail2ban 一起使用

我们在负载均衡器和 CDN 前端后面有几台 Apache 2.4 Web 服务器 - HTTPS 终止于此 - 我们在后端 Apache 日志中看到前端标头中的客户端 IP。我想知道是否可以使用 iptables 的字符串匹配(在 Web 服务器计算机上)仅根据特定标头(即包含客户端 IP 的标头)来阻止 IP?

我们的 Linux 内核是最新的,并且我们的 iptables 内核模块已经使用以下配置进行了编译:CONFIG_NETFILTER_XT_MATCH_STRING=m。

我读到过,如果字符串匹配超出包含客户端 IP 的特定标头,它可能会占用大量 CPU 并且可能产生意想不到的后果。或者有更好的工具可以实现这一点,比如代理,但我仍然想了解更多关于其他人使用 iptables 的字符串匹配功能与 Apache 和 fail2ban 的经验。

理想情况下,Apache 应该有类似 nginx 的 444。我可以给 IP 403根据标头中的 IP 匹配,但与 403 相比,444 连接中断似乎级别较低(更突然/更可取),并且资源消耗较少;但我想知道 - 是吗?也许 444 比 403 更耗费资源?

谢谢您的见解!

答案1

当您的 fail2ban 和相关逻辑在后端服务器上运行时,没有简单的解决方案。

我认为第一步是使用 Apachemod_remoteip;那么后端服务器上的 Apache 日志将包含实际的客户端 IP,而不是前端/负载均衡器的 IP 地址:

Apache 默认使用连接的client_ip值来标识用户代理,连接remote_hostremote_logname从该值派生。这些字段在其他可加载模块的身份验证、授权和日志记录等目的中发挥作用。

在请求期间,mod_remoteip 会使用代理或负载均衡器提供的已公布用户代理 IP 覆盖连接的客户端 IP。负载均衡器可能会与服务器建立长期的保持连接,并且每个请求都会具有正确的用户代理 IP,即使负载均衡器的底层客户端 IP 地址保持不变。

然后,您可以轻松地针对 Apache 日志文件运行 fail2ban 来识别有问题的 IP

然后你需要一个风俗和合适的fail2ban禁令行动当从后端服务器发出时,将阻止有问题的 IP。例如,这可以是对前端防火墙的 API 调用,将有问题的 IP 添加到阻止列表或任何其他内容。

相关内容