fail2ban 是否可以为 nginx 添加拒绝规则,而不是使用 iptables

fail2ban 是否可以为 nginx 添加拒绝规则,而不是使用 iptables

我有一台服务器,位于反向代理后面,我无法控制。我想使用 fail2ban 在某些条件下阻止 nginx 流量。

通常fail2ban使用iptables来阻止来自入侵者IP的流量

但是我的服务器位于反向代理后面,并且从我的服务器的角度来看,所有流量都来自反向代理:

我找到了以下网址https://forums.freebsd.org/threads/fail2ban-behind-a-proxy.55041/ 这建议您使用iptables包内省,例如:

actionban = iptables -I fail2ban-<name> 1 -p tcp --dport 80 -m string --algo bm --string 'X-Forwarded-For: <ip>' -j DROP

但是,我无法控制的反向代理将流量转发为 https 流量,这意味着我无法检查流量中的X-Forwarded-For标头,因为它们已被加密。

这就是我的问题。

其他人是否有类似的情况并且是否存在actionban =可以添加Deny rules到 nginx 的现有情况?

或者我必须手工制作一个脚本来尝试执行此操作(编辑 nginx 的 nginx 配置并重新加载 nginx)

还有什么其他解决方案可以让我动态地告诉 nginx 哪些请求(包含特定X-Forwarded-For:标头)需要阻止

答案1

fail2ban可用于运行脚本。该脚本可以执行任何您想做的事情。


编辑拒绝规则

我不太确定整个过程如何全速运行,但您可以轻松地在文件中添加拒绝规则。

Nginx 配置文件可以包含:

include /etc/nginx/deny-rules.conf

并且您的脚本deny-rules.conf以某种方式生成了它...您想将 IP 添加到一个文件中,然后使用该文件deny-rules.conf通过循环或某种方式生成该文件。

然后你必须重启 Nginx,这样新规则才能生效。这就是这个方案的坏处。这样重启会很慢。


列入拒绝名单

另一个解决方案是使用以下过滤器:

IP 地址的动态拒绝名单

我从未使用过它,所以恐怕您必须阅读文档并了解如何设置并实现这一切……但是,它应该可以全速运行。fail2ban 系统中的脚本可以负责更新该动态列表。

答案2

您可以使用 fail2ban 操作nginx-block-map,请参阅nginx-块映射.conf了解详情。

请注意,通过过滤标X-Forwarded-For头,入侵者可以非常轻松地操纵请求以避免被禁止(在此标头中为每个新请求设置不同的值)。入侵者是位于代理后面还是只是模拟代理,然后自行设置标头,这个问题X-Forwarded-For无法简单回答。

相关内容