iptables 用户链中缺少 RETURN 跳转 - 会发生什么?

Kar*_*box 7 iptables

我无法找出用户定义的 iptables 链末尾缺少 RETURN 规则的后果是什么。显然,“iptables [missing] return [jump]”确实是非常糟糕的关键字。

联机帮助页和我可以挖掘的任何博客或 howto 只是告诉我做了什么-j RETURN(这很明显),但不会告诉我如果缺少它会发生什么。此外,我似乎无法建立健全的实验规则来尝试...

iptables -N userchainA
iptables -A INPUT -j userchainA
iptables -N userchainB
iptables -A INPUT -j userchainB
iptables -A INPUT -j ACCEPT

iptables -A userchainA ... # anything here, that DOES NOT MATCH
#### no explicit return from userchainA!

iptables -A userchainB ... # anything here, that DOES NOT MATCH
iptables -A userchainB -j RETURN 
Run Code Online (Sandbox Code Playgroud)

鉴于这些规则,任何事情都可以正常工作。数据包穿过所有链并最终命中,ACCEPT from INPUT就好像(丢失的)-j RETURN来自userchainA将隐式完成。是这种情况吗?

为什么这是有效的?我会期望某种错误或至少是关于链执行下降的日志消息。

Mic*_*ton 8

当 iptables 到达用户定义链的末端时,流程将返回到调用链中的下一个规则。因此 RETURN 是隐式的;不需要明确给出。

  • 抱歉,大卫,但只有内置链才能设置策略;用户定义的表,例如这个问题中的表,不能。检查“iptables -P”上的手册页。 (2认同)