所以我有一个客户端在我的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规则的最后,如何跳进新的链条将只有一条规则。 它可能是ACCEPT或REJECT 。 说…
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是位置