Nginx Iptables字符串匹配以阻止反向代理后面的IP?

Nginx Iptables字符串匹配以阻止反向代理后面的IP?,nginx,firewall,iptables,sysadmin,Nginx,Firewall,Iptables,Sysadmin,我在反向代理(Cloudflare)后面安装了nginx服务器,希望根据标头中发送的xforwarded ip阻止ip 我尝试了以下iptables字符串匹配规则: iptables-A输入-m字符串--string“1.1.1.1”--algobm--to 1024-j拖放 然而,这似乎没有任何作用 为什么字符串匹配不起作用?我确信真正的ip是以X-Forwarded-For或CF连接ip的形式在数据包中发送的 内核是3.4.x,iptables是1.4.7,因此没有问题。正如您所提到的,CF

我在反向代理(Cloudflare)后面安装了nginx服务器,希望根据标头中发送的xforwarded ip阻止ip

我尝试了以下iptables字符串匹配规则:

iptables-A输入-m字符串--string“1.1.1.1”--algobm--to 1024-j拖放

然而,这似乎没有任何作用

为什么字符串匹配不起作用?我确信真正的ip是以X-Forwarded-For或CF连接ip的形式在数据包中发送的


内核是3.4.x,iptables是1.4.7,因此没有问题。

正如您所提到的,CF连接IP是在CloudFlare背后获得真正IP的最佳方式。这比X-Forwarded-For要好,因为如果您的服务器被放置在负载平衡器或另一个反向代理(X-Forwarded-For甚至在其RFC中支持逗号分隔的列表)之后,可以更改X-Forwarded-For

CloudFlare应该只将安全流量和web流量传递给,因此您可以在其他IP上列出白名单并启用IPTables。然后,您可以在相关CloudFlare站点的防火墙选项卡中阻止IP,然后在IP防火墙下查看。然后,非CloudFlare流量可以应用IPTables


我们在Apache服务器上使用official,以便将IP地址正确地发送到web服务器,并最终发送到web应用程序本身。在NGinX上,您可以尝试。

基本上,最好在CloudFlare级别阻止IP。如果您希望以编程方式(例如,使用Fail2Ban)执行此操作,最好使用官方API。我已经在cloudflare级别阻止IP,但它们的API是有限的,并且IP数量有一个最大配额。我想在内核级别阻止ips,我的问题是关于iptables字符串匹配的,不过还是谢谢你的建议。你能试试:iptables-A INPUT-m string-algo bm-string“1.1.1.1”-j DROP这是我的iptables文件:这可能有帮助:
iptables-I INPUT-m string-algo bm--string“1.1.1”-j DROP
(-I而不是-A)--如果您有其他规则,此规则将成为第一个要检查的规则。