Linux的iptables拒绝 – 我如何启用它?

所以我有一个客户端在我的networking连接到路由器通过我的电脑arpspoof。 当我知道要停止数据包转发时,我执行:

iptables -A FORWARD -j REJECT 

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

 iptables -A FORWARD -j ACCEPT 

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

我做错了什么,或者有什么其他的理由,我应该使用不同的“接受”?

IPtables有一个规则列表,对于每个数据包,它依次检查规则列表。 一旦find与数据包相匹配的规则并指定了一个策略(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的联机帮助页。

-A标志告诉iptables将规则附加到链上,这意味着它将在您的REJECT规则下结束,并且由于第一条规则匹配,所以从不使用。

你用iptables -L FORWARD列出你的规则,你会自己看到这个。 为了摆脱你添加的规则,运行

 iptables -D FORWARD -j REJECT 

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

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 

禁用trafic或-j ACCEPT启用。

还有什么可以打开和closures路由的

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

禁用数据包转发, "1" – 使能。

订单很重要。 这将插入您的规则在顶部,而不是追加。

iptables -I FORWARD 1 -j ACCEPT

我是插入和#1是位置