为什么这些 iptables 规则不起作用

为什么这些 iptables 规则不起作用

我认为需要更详细一点。我在我的地区开了一家新咖啡馆,人们正在下载东西,这增加了我的账单,所以我想屏蔽路由器上的协议,然后为任何电脑重新启用它,如果电脑在以后需要它的话,可能是几天或几个月

我的路由器运行Openwrt 姿态调整

我阻止了 http 只是为了测试它,然后稍后使用 l7 过滤器添加协议

你好,我是 Iptables 的新手,正在摆弄它以掌握它。

这是系统

Router IP-192.168.1.10
PC1 IP-192.168.1.11
PC2 IP-192.168.1.12
Laptop IP-192.168.1.13
Mobile IP-192.168.1.14

我应用了下面的规则并且它丢弃了所有的 http 数据包。

iptables -I FORWARD -m layer7 --l7proto http -j DROP

然后我想为 PC1 启用 http 我写了下面的规则但是 http 不起作用。

iptables -I FORWARD -mlayer7 --l7proto http -s 192.168.1.11 -j ACCEPT

仅当我输入规则时才有效

iptables -I FORWARD -m layer7 --l7proto http -j ACCEPT

但现在它可以在所有系统上启用。

我应该怎么做?首先在所有系统上阻止 http,然后仅在 PC1 上启用它。

谢谢你的帮助!

输出

Chain FORWARD (policy DROP 12 packets, 2700 bytes)
pkts bytes target     prot opt in     out     source               destination
5   200 ACCEPT     all  --  *      *       192.168.1.113        0.0.0.0/0           LAYER7 l7proto http
25  1036 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           LAYER7 l7proto http

答案1

iptables -I -INPUT -p tcp ! -s [IP address here] --dport 80 -j DROP

请密切注意“!”运算符。它会丢弃所有不是来自源 IP 地址。

然而,在后来的评论中,你说:

Nathan,我想要实现的是首先阻止所有 http,然后按照我的意愿逐个重新启用任何设备

这有点不同。在这种情况下,您需要依赖排序。您需要明确拒绝所有 HTTP,然后添加一条规则多于您要接受的每个主机的删除规则。Nathan 的回答更切中要害。

答案2

请执行下列操作:

iptables -I INPUT -p tcp -s 192.168.1.11 --dport 80 -j ACCEPT iptables -I INPUT -p tcp --dport 80 -j DROP

这将允许来自该 IP 的流量通过端口 80 (http),否则将丢弃它。不确定您为什么要使用该FORWARD链。

相关内容