iptables 和 RETURN 目标

zer*_*uno 24 iptables

我不明白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;
Run Code Online (Sandbox Code Playgroud)

为什么我需要RETURN?如果数据包与第一个规则匹配,则它会自动停止执行其他规则。

roa*_*ima 44

包穿越链直到他们打ACCEPTDROPREJECT,或RETURN。他们不会在比赛中停止,除非比赛包含终止动作。在您的示例中,匹配第一个规则的数据包将被标记,但随后将被第二个规则检查(并可能处理)。

仅供参考,以下是手册页中的相关部分:

防火墙规则指定数据包和目标的标准。如果数据包不匹配,则链中的下一个规则是检查的;如果它不匹配,则下一个规则是由目标的值,其可以是用户定义的链的名称或特殊值中的一个指定的ACCEPTDROP[,REJECT],QUEUERETURN

  • ACCEPT 意味着让数据包通过。
  • DROP 意味着将数据包丢弃在地板上,即丢弃它并且不发送任何响应
  • [REJECT用于响应匹配的数据包发回错误数据包:否则相当于DROPso是一个终止TARGET,结束规则遍历。]
  • QUEUE 意味着将数据包传递到用户空间。
  • RETURN意味着停止遍历此链并在前一个(调用)链中的下一个规则处继续。如果到达内置链的末端或与目标RETURN匹配的内置链中的规则,则链策略指定的目标将决定数据包的命运。

针对您的具体担忧,我会说您的指南具有误导性。除非“关联动作”是五个终端动作之一,否则数据包将继续流经链,直到它们到达隐含RETURN的末尾。

  • 啊,现在我更了解 DROP 了。这就解释了为什么我的桌子下面也没有腿部空间。 (5认同)
  • 值得注意的是,用户定义链的默认操作是 RETURN。 (2认同)