iptables动作和跳转

概述

动作target/跳转jump告诉一条规则当报文完全匹配该条规则的时候,应该怎么处理此报文。系统里面有很多基本的target,例如ACCEPT和DROP等等。但是在我们介绍这些target之前,我们一起简要的看一下jump是如何工作的。

Jump其实和target工作方式完全一样,只是jump需要在同一表内指定一条链。我们之前已经解释过,用户自定义的链通过-N命令创建,例如我们首先创建一个tcp_packets链,用如下命令:

iptables -N tcp_packets

接着我们在增加一个到这条链的跳转

iptables -A INPUT -p tcp -j tcp_packets

接着我们从INPUT链跳转到tcp_packets链,并且开始tcp_packets链的遍历。假如报文到达链的尾部(即未匹配上任何工作),就返回到父链的下一条规则继续执行。假如一个报文在子链里面被一条规则匹配上,那就相当于在父链里面匹配,它不会在返回父链继续遍历规则。请注意这个报文会和其他正常流程一样在所有其他的链里面遍历。

target指定我们要对包做的操作,比如DROP和ACCEPT,还有很多,我们后面会介绍。不同的target有不同的结果。

ACCEPT target

ACCEPT target不需要任何才是,一旦一个报文满足了匹配规则,它就会被ACCEPT。这样本条规则被匹配上之后,它就不会继续在本链或者本表的其他链中遍历。但是请注意,系统中可能还有其他的表,报文也有可能在那儿被丢弃。

DROP target

顾名思义,如果包符合条件,这个target就会把它丢掉,也就是说包的生命到此结束,不会再向前走一步,效果就是包被阻塞了。在某些情况下,这个target会引起意外的结果,因为它不会向发送者返回任何信息,也不会向路由器返回信息,这就可能会使连接的另一方的sockets因苦等回音而亡,解决这个问题的较好的办法是使用REJECT target,因为它在丢弃包的同时还会向发送者返回一个错误信息,这样另一方就能正常结束。

REJECT target

REJECT和DROP基本一样,区别在于它除了阻塞包之外,还向发送者返回错误信息。现在,此target还只能用在INPUT、FORWARD、OUTPUT和它们的子链里,而且包含 REJECT的链也只能被它们调

Was this helpful?

0 / 0

发表回复 0