我有一个在Cloudflare后面的Ubuntu上运行Apache的Web服务器。我想阻止一个用户使用Web服务器的iptables。在这里我想实现iptables的字符串匹配功能并丢弃连接。下面是我的规则,但不起作用:
iptables -I INPUT -m string --string "x-forwarded-for: 216.244.66.205" --algo bm --to 65535 -j DROP
添加此规则后,客户端仍然能够访问服务器。
我知道Cloudflare的客户端IP的特定标头是cf-connecting-ip。我可以用它来阻止客户端。下面是工作正常的规则:
iptables -I INPUT -m string --string "cf-connecting-ip: 216.244.66.205" --algo bm --to 65535 -j DROP
从Cloudflare到Web服务器的流量是HTTP(端口80)。
我有一个负载平衡器(haproxy),一些域通过它运行,而不是Cloudflare。这就是为什么我想使用XFF,因为cf-connecting-ip是特定于Cloudflare的,两者都支持XFF。
我可以看到Cloudflare正确地附加了cf-connecting-ip和XFF头文件。
第一次
不知何故,iptables能够检测到字符串cf-connecting-ip,但不能检测到x-forwarded-for。
任何帮助都将不胜感激。
2条答案
按热度按时间91zkwejq1#
HTTP标头位于应用层,而IPTables位于TCP/IP堆栈的下层。IPTables看不到您要筛选的数据。
对于Cloudflare背后的网站,您应该配置IPTables,使其仅允许Cloudflare IP地址通过,并使用Cloudflare防火墙阻止客户端IP地址。
tjvv9vkg2#
回答自己的问题,希望它能帮助别人。
该问题是由于字母大小写的差异造成的。服务器以不同的方式传递字母,与提供的字母不匹配。
我只需要添加一个额外的选项
--icase
,它忽略大小写(不区分大小写的匹配)。现在的命令是: