iptables
我在CentOS 7.7 网络服务器上阻止某些 IP 地址访问 HTTP/HTTPS 端口时遇到问题。
问题是当我将 IP 地址添加到iptables
并确认它在规则中时,它不会阻止该 IP 地址访问 HTTP/HTTPS。然而做阻止它们执行其他所有操作(ping、SSH、telnet 等)。
笔记:
该系统上没有 NAT 或转发。
只有
lo
和eth0
接口。网站在 Cloudflare 上,但是请阅读底部的音符。
这些是我目前的规则(需要阻止的 IP 为 1.2.3.4):
# iptables -L -v --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 783 120K ACCEPT all -- lo any anywhere anywhere
2 15 780 drop all -- eth0 any 1.2.3.4 anywhere
3 0 0 ACCEPT icmp -- any any anywhere anywhere icmp echo-reply
4 0 0 ACCEPT icmp -- any any anywhere anywhere icmp destination-unreachable
5 0 0 ACCEPT icmp -- any any anywhere anywhere icmp time-exceeded
6 0 0 ACCEPT icmp -- any any anywhere anywhere icmp echo-request limit: avg 10/sec burst 5
7 0 0 drop icmp -- any any anywhere anywhere
8 224 18088 ACCEPT tcp -- eth0 any anywhere anywhere tcp dpt:http
9 432 58244 ACCEPT tcp -- eth0 any anywhere anywhere tcp dpt:https
10 0 0 drop all -- eth0 any 1.2.3.4 anywhere
11 260 204K ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
12 275 19648 drop all -- any any anywhere anywhere
Chain FORWARD (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 2771 packets, 634K bytes)
num pkts bytes target prot opt in out source destination
Chain drop (4 references)
num pkts bytes target prot opt in out source destination
1 290 20428 DROP all -- any any anywhere anywhere
如上所述,这将阻止 IP 1.2.3.4 访问我的服务器上的所有内容,除了访问我的网站之外。
我能想到的唯一可能导致问题或故障的事情是我的网站使用 Cloudflare。但即便如此,我也有mod_cloudflare 模块已安装,这基本上意味着它显示“真实访问者 IP 地址”和不是 Cloudflare 的 IP 地址在 Apache 日志中。
我测试的方法是,像上面一样将 1.2.3.4 添加到防火墙,确认它在规则和tailf
Apache 日志中的存在,然后我看到该 IP 地址仍在抓取我的网站。
有人知道我可能做错了什么吗?
编辑#1:根据帖子的更新,我已将移至drop 1.2.3.4
下方,ACCEPT anywhere
但这仍然无法阻止 IP 地址访问服务器上的 HTTP/HTTPS。我已将我的新iptables
规则粘贴在上面,将 drop 放在 ACCEPT 之前和之后。
编辑#2:这似乎是 Cloudflare 独有的问题。我刚刚在一个不使用 Cloudflare DNS 的域上测试了这个问题,它按预期阻止了来自 IP 地址的 HTTP/HTTPS 访问。
答案1
mod_cloudflare_module 仅适用于 Apache 或您的 Web 服务器,用于查看源 IP。不适用于 IPTables。
IPTables 不知道这样的模块。
也就是说,您正在阻止然后接受 eth0 上的任何内容。可能是因为这个(不确定)。此外,eth0 实际上是绑定到您的 Web 服务(httpd 或其他)的接口/ip 来响应请求
我将保存该配置以开始,并尝试执行以下操作: