我不明白RETURN
目标在 iptables 命令中的作用。
疑点由此而来指导它说:
链是一组按顺序检查数据包的规则。当数据包与其中一项规则匹配时,它会执行关联的操作,并且不会根据链中的其余规则进行检查。
因此,如果数据包与规则匹配并且它停止检查其他规则,为什么我需要RETURN
?
例如我在互联网上找到了这个:
iptables -A PREROUTING -t mangle -i wlan0 -s 192.168.1.10 -j MARK --set-mark 30;
iptables -A PREROUTING -t mangle -i wlan0 -s 192.168.1.10 -j RETURN;
为什么我需要RETURN
?如果数据包匹配第一条规则,那么它会自动停止执行其他规则。
答案1
数据包遍历一条链,直到到达ACCEPT
、DROP
、REJECT
或RETURN
。他们不会在比赛中停止,除非该比赛包含终止动作。在您的示例中,匹配第一条规则的数据包将被标记,但随后将由第二条规则检查(并可能处理)。
仅供参考,以下是相关部分手册页:
防火墙规则指定数据包和目标的标准。如果数据包不匹配,则检查链中的下一条规则;如果匹配,则下一个规则由目标值指定,该目标可以是用户定义链的名称或特殊值ACCEPT
、DROP
[、REJECT
]QUEUE
或之一RETURN
。
ACCEPT
意思是让数据包通过。DROP
表示将数据包丢弃在地板上,即丢弃它并且不发送任何响应- [
REJECT
用于发送回错误数据包以响应匹配的数据包:否则相当于DROP
so是终止TARGET,结束规则遍历。] QUEUE
意味着将数据包传递到用户空间。RETURN
意味着停止遍历该链并在上一个(调用)链中的下一个规则处恢复。如果到达内置链的末尾或者带有目标的内置链中的规则RETURN
匹配,则链策略指定的目标决定数据包的命运。
针对您的具体关切,我想说的是你的向导具有误导性。除非“关联操作”是五个终端操作之一,否则数据包将继续流经链,直到到达RETURN
末端的隐式操作。