LINUX.ORG.RU

Совместимость правил iptables и nft

 ,


0

2

Играюсь тут с nftables и iptables-compat, и вот что обнаружилось.

После настройки правил через iptables-compat, они не отображаются в nft, ошибка netlink:

root@peka:/# iptables-compat -F
root@peka:/# iptables-compat -P INPUT DROP
root@peka:/# iptables-compat -A INPUT -i lo -j ACCEPT
root@peka:/# iptables-compat -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
root@peka:/# iptables-compat-save
# Generated by xtables-save v1.6.0 on Wed May  8 16:52:27 2019
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Wed May  8 16:52:27 2019
root@peka:/# nft list ruleset
table ip filter {
	chain INPUT {
		type filter hook input priority 0; policy drop;
		counter packets 0 bytes 0 accept 
		counter packets 0 bytes 0 accept 
	}

	chain FORWARD {
		type filter hook forward priority 0; policy accept;
	}

	chain OUTPUT {
		type filter hook output priority 0; policy accept;
	}
}
netlink: Error: Relational expression size mismatch


netlink: Error: unknown expression type 'match'


root@peka:/# 

И наоборот тоже криво - если настроить через nft, а потом посмотреть iptables-compat-save, в данном случае одно правило отобразилось верно, другое нет (вместо ctstate просто ACCEPT):
root@peka:/# nft flush ruleset
root@peka:/# nft add table ip filter
root@peka:/# nft add chain ip filter INPUT { type filter hook input priority 0 \; policy drop \; }
root@peka:/# nft add rule ip filter INPUT iifname lo accept
root@peka:/# nft add rule ip filter INPUT ct state {established, related} accept
root@peka:/# nft list ruleset
table ip filter {
	chain INPUT {
		type filter hook input priority 0; policy drop;
		iifname "lo" accept 
		ct state { related, established} accept 
	}
}
root@peka:/# iptables-compat-save
# Generated by xtables-save v1.6.0 on Wed May  8 16:53:05 2019
*filter
:INPUT DROP [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -j ACCEPT
COMMIT
# Completed on Wed May  8 16:53:05 2019
root@peka:/# 
root@peka:/# 

И это тривиальный случай с двумя простыми правилами.
ЧСХ, никаких ошибок в iptables-save, просто отображается совершенно другое правило (и так, глядя на его выхлоп, можно долго думать, чего это ничего не работает).

Это так и должно быть? Если правила нового iptables несовместимы с nft, в чем его (iptables-compat) смысл? Понятно, что он загружает правила в ядерный nft, но зачем? Тем более, если вносится такая путаница.
Да, понятно, что не все правила можно представить в виде синтаксиса iptables (логично - иначе не было бы смысла велосипедить nft). Но почему не работает обратный случай?
Был бы нормальный юзкейс - загрузить правила в iptables и сохранить конфиг nft, и в нём уже добавлять новые фишки nftables. А так получается буквально тот же iptables без новых возможностей, только реализованный в ядре другим модулем. Но зачем, когда есть работающий и проверенный временем iptables (который теперь будет iptables-legacy)?

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.