iptables-legacy + iptables-nft = iptables-broken ?
Rafael David Tinoco
rafaeldtinoco at ubuntu.com
Wed Jan 27 21:52:27 UTC 2021
OK.. I think I found the issue... sorry for the noise.
TL/DR version:
all the iptables targets working in compatibility mode (-j NFLOG, -j TRACE, etc) might face issues and not work correctly when using nf-tables by default (nft_compat -> x_tables over nftables).
Explanation:
If I execute my tool with "iptables-legacy" and have a iptables-legacy rules only firewall.. it works perfectly.... Now, if I have a iptables-nft rules only firewall and run my tool with "iptables-nft".. it does not work:
TCPv4 [ 1] src = 10.250.97.1 (port=1024) to dst = 10.250.97.143 (port=22) (confirmed)
table: mangle, chain: OUTPUT, type: rule, position: 4
table: mangle, chain: POSTROUTING, type: policy
table: filter, chain: OUTPUT, type: rule, position: 4
TCPv6 [ 0] src = fe80::da:ddff:fe1a:bcd (port=1024) to dst = fe80::5054:ff:fe8d:ad04 (port=22) (confirmed)
table: mangle, chain: OUTPUT, type: rule, position: 4
table: mangle, chain: POSTROUTING, type: policy
table: filter, chain: OUTPUT, type: rule, position: 4
versus
TCPv4 [ 1] src = 10.250.97.1 (port=1024) to dst = 10.250.97.143 (port=22) (confirmed)
table: mangle, chain: OUTPUT, type: policy
table: mangle, chain: POSTROUTING, type: policy
table: filter, chain: OUTPUT, type: policy
TCPv6 [ 5] src = fe80::da:ddff:fe1a:bcd (port=1024) to dst = fe80::5054:ff:fe8d:ad04 (port=22) (confirmed)
table: mangle, chain: OUTPUT, type: policy
table: mangle, chain: POSTROUTING, type: policy
table: filter, chain: OUTPUT, type: policy
meaning that in the later case the flow was said to be processed by:
Table: filter, chain: OUTPUT default policy
but if we look closely:
$ sudo iptables -t filter -L OUTPUT -n --line-numbers
# Warning: iptables-legacy tables present, use iptables-legacy to see them
Chain OUTPUT (policy DROP)
num target prot opt source destination
1 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT icmpv6-- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0
So it is hard to understand if the flow was processed by:
Table: filter, chain: OUTPUT default's policy OR
Table: filter, chain: OUTPUT, rule: #4
Let's remove the rule:
$ sudo iptables -t filter -D OUTPUT -p tcp -j ACCEPT
and yes, the flow stops working.
It means that the TRACE iptables target cannot work with nf-tables (or nf-tables-compat). I'll have to use nf-tables tracing features eventually.
Cheers o/
-rafaeldtinoco
More information about the ubuntu-devel
mailing list