iptables - RETURN目标

RETURN目标在iptables中用于终止数据包在特定链中的匹配过程,提高规则处理效率。当数据包匹配到一个RETURN目标的规则时,它会返回到上一级链继续匹配,或按主链的默认策略处理。文章通过示例说明了RETURN目标如何避免重复匹配,以及如何简单设置RETURN目标的规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. RETURN目标是用来做什么的?

        我们都知道,数据包在iptables规则中匹配的方式是,一条链的所有规则会从头到尾,一条一条的与数据包去匹配,直到某条规则匹配到了数据包,或者,链中的所有规则都不与数据包匹配,则将会返回该链的上一级链继续匹配,或者如果该链是主链,则数据包才会被采用默认策略。

        假设一个场景,一个数据包进入INPUT链,然后,遇到了一个匹配的规则,规则的目标是 -j X_CHAIN,然后,数据包进入X_CHAIN,突然,它匹配到了一个规则,规则的目标是 -j RETURN,则数据包将跳回INPUT链。

        假设另一个场景,一个数据包进入INPUT链,然后,遇到了一个匹配的规则,规则的目标是-j RETURN,则数据包将会被INPUT链的默认策略处理。

        所以,RETURN目标的作用是告诉系统,该类型的包不必继续和该链后面的规则继续匹配了,这样可以起到提高效率的作用。

举例

        Linux的系统运行了一个web服务器,监听80端口,另一台电脑访问它的80端口,Linux系统访问80的数据包打上mark标签2和3(只是做实验,没有实际用途)。

不使用RETURN目标的情况

[root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -j MARK --set-mark 2
[root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -j MARK --set-mark 3     
[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 34 packets, 2116 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   15   780 MARK       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 MARK set 0x2
   15   780 MARK       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 MARK set 0x3

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 26 packets, 2588 bytes)
 pkts bytes target     prot opt in     out     source               destination   

        可以看出打mark标签2和3匹配的数据包都是15个。

使用RETURN目标的情况

[root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -j MARK --set-mark 2
[root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -j RETURN
[root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -j MARK --set-mark 3
[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 36 packets, 2140 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   15   780 MARK       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 MARK set 0x2
   15   780 RETURN     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
    0     0 MARK       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 MARK set 0x3

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 28 packets, 2788 bytes)
 pkts bytes target     prot opt in     out     source               destination    

        可以看出打mark标签2和3的中间插入了一条目标是RETURN动作的规则,结果打mark标签2的规则匹配完后,遇到RETURN目标就返回了,所以第一条和第二条规则匹配的包是15个,第三条规则匹配的个数是0,打mark标签3的规则没有匹配到。

二. RETURN目标如何使用?

        RETURN目标使用比较简单,规则的目标设置为-j RETURN即可。

举例

        iptables -A INPUT -m mark --mark 0 -p tcp --dport 80 -j RETURN

三. 总结

        RETRUN目标有不让指定的数据包在当前链继续往下匹配的能力,可以提高防火墙规则的匹配效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值