Linux iptables被拒绝-如何重新启用它?


8

所以我的网络中有一个客户端通过我的计算机通过arpspoof连接到路由器。当我知道要停止数据包转发时,我执行:

iptables -A FORWARD -j REJECT

这是我所期望的。但是当我尝试做类似的事情时:

iptables -A FORWARD -j ACCEPT

我无法像一开始那样设法使数据包通过。

我在做错什么吗?还是应该使用与“接受”不同的其他论点?


4
通过你使用的方式-A,也许你想使用-P设置P(当在链中没有其他规则适用默认操作)olicy。例如,iptables -P FORWARD DROP(不能为REJECT)。
JoL

“该问题应证明合理的系统管理技能”是什么意思?:)
Marco Marco

Answers:


35

IPtables有一个规则列表,对于每个数据包,它按顺序检查规则列表。一旦找到匹配数据包的规则并指定了策略(ACCEPT,REJECT,DROP),就确定匹配数据包的命运。不再检查任何规则。

这意味着运行命令的顺序很重要。使用时iptables -A,您会在规则列表的末尾添加一个规则,因此最终将得到一个如下所示的规则列表:

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
ACCEPT     all  --  anywhere             anywhere

由于REJECT规则来之前ACCEPT规则,它被首先触发,因此转发不会发生。

因此,您将需要删除REJECT规则而不是添加ACCEPT规则。要删除REJECT规则,请运行

iptables -D FORWARD -j REJECT 

有关更多信息,请阅读iptables手册页。


18

-A标志告诉iptables将规则附加到链上,这意味着它最终将在您的REJECT规则下,并且由于第一个规则匹配,因此从未使用过。

您列出了您的规则,iptables -L FORWARD您将自己看到。要摆脱添加的规则,请运行

iptables -D FORWARD -j REJECT 

直到链中不再有这样的规则。


1

FORWARD规则的末尾要跳入新的链条,这仅仅是一条规则,该怎么办?可能是ACCEPTREJECT。说...

iptables -N accept-chain
iptables -A accept-chain -j ACCEPT
iptables -A FORWARD -j accept-chain

在这之后,你可以在改变这一规律accept-chain类似

iptables -R accept-chain 1 -j REJECT

禁用流量或-j ACCEPT启用。

还可以通过什么来打开和关闭路由

echo "0" > /proc/sys/net/ipv4/ip_forward

用于禁用数据包转发,以及"1"-用于启用。


0

顺序很重要。这会将您的规则插入顶部而不是附加。

iptables -I FORWARD 1 -j ACCEPT

-我要插入,#1是位置

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.