我有nginx服务器支持反向代理(Cloudflare),并希望根据标头中发送的xforwarded ip来阻止ips。
我尝试了以下iptables字符串匹配规则:
iptables -A INPUT -m string --string" 1.1.1.1" --algo bm - 到1024 -j DROP
然而,这似乎无能为力。
为什么字符串匹配不起作用?我确定真正的ip是在数据包中发送的,可以是X-Forwarded-For或CF-Connecting-IP。
内核是3.4.x和iptables 1.4.7,所以没有问题。
答案 0 :(得分:0)
正如您所提到的,CF-Connecting-IP是获得CloudFlare背后真正IP的最佳方式。这比X-Forwarded-For更好,因为如果你的服务器被置于负载均衡器或其他反向代理后面(X-Forwarded-For甚至支持其RFC中的逗号分隔列表),则可以更改。
CloudFlare应该只将安全流量和网络流量传递到CloudFlare supported web server ports,因此您可以将CloudFlare IPs列入白名单并在其他IP上启用IPTable。然后,您可以在相关CloudFlare站点的“防火墙”选项卡中阻止IP,然后在IP防火墙下查看。然后,非CloudFlare流量可以应用IPTable。
我们在Apache服务器上使用官方Mod_CloudFlare,以便正确地将IP地址提供给我们的Web服务器,最终到达Web应用程序本身。在NGinX上,您可以尝试ngx_http_realip_module。