Я совершенно не могу понять, каковы последствия отсутствия правила RETURN в конце определенных пользователем цепочек iptables. Очевидно, что ключевые слова «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
будет сделано неявно. Так ли это?
Почему это работает? Я бы ожидал какой-то ошибки или хотя бы сообщения журнала о падении выполнения цепочки.
Когда iptables достигает конца пользовательской цепочки, поток возвращается к следующему правилу в вызывающей цепочке. Следовательно, ВОЗВРАТ неявный; его не нужно указывать явно.