我有一台服务器,位于反向代理后面,我无法控制。我想使用 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,这样新规则才能生效。这就是这个方案的坏处。这样重启会很慢。
列入拒绝名单
另一个解决方案是使用以下过滤器:
我从未使用过它,所以恐怕您必须阅读文档并了解如何设置并实现这一切……但是,它应该可以全速运行。fail2ban 系统中的脚本可以负责更新该动态列表。
答案2
您可以使用 fail2ban 操作nginx-block-map
,请参阅nginx-块映射.conf了解详情。
请注意,通过过滤标X-Forwarded-For
头,入侵者可以非常轻松地操纵请求以避免被禁止(在此标头中为每个新请求设置不同的值)。入侵者是位于代理后面还是只是模拟代理,然后自行设置标头,这个问题X-Forwarded-For
无法简单回答。