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

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

因此,我让网络中的客户端通过我的计算机使用 arpspoof 连接到路由器。当我知道要停止数据包转发时,我执行:

iptables -A FORWARD -j REJECT

一切正如我预期的那样。但是当我尝试执行以下操作时:

iptables -A FORWARD -j ACCEPT

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

我做错了什么吗?或者我应该使用除“接受”以外的其他论点吗?

答案1

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 手册页。

答案2

-A标志告诉 iptables 将规则附加到链中,这意味着它最终会归于你的REJECT规则之下,并且由于第一条规则匹配,所以它永远不会被使用。

你可以使用以下命令列出你的规则iptables -L FORWARD,然后你就会亲眼看到。要删除你添加的规则,请运行

iptables -D FORWARD -j REJECT 

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

答案3

那么在规则末尾输入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"- 用于启用。

答案4

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

iptables -I FORWARD 1 -j ACCEPT

-I 是插入,#1 是位置

相关内容