我完全无法找出用户定义的 iptables 链末尾缺少 RETURN 规则的后果。显然,“iptables [missing] return [jump]” 是真正糟糕的关键字。
我能找到的手册页和任何博客或操作指南都只是告诉我该怎么-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
有了这些规则,一切都会顺利进行。数据包穿过所有链并最终到达,ACCEPT from INPUT
就好像(缺失的)-j RETURN
来自userchainA
会隐式完成一样。是这样吗?
为什么这样做有效?我本来以为会出现某种错误,或者至少会出现一条有关执行链失败的日志消息。
答案1
当 iptables 到达用户定义链的末尾时,流程返回到调用链中的下一个规则。因此,RETURN 是隐含的;不需要明确给出。