Když povolím port 80, tak jsou otevřené oba porty 80 i 8080.
To je v pořádku. Přesměrování portu neřeší žádné „otevření“ či zavření“ portu. Přesměrování portu dělá jenom to, že v příchozím paketu přepíše číslo portu a v odchozím paketu to udělá opačně.
Podle mne ten váš zápis v nftables dělá to, že u paketů, které mají cílový port nastaven na 8080, změní cílový port na 80, IP adresu zachová. Na firewallu pak ale nemáte port 80 povolený, takže se paket zahodí.
Pokud nechcete, aby port 80 byl dostupný „z venku“, musíte zařídit, aby aplikace naslouchala jen na localhostu, v NATu paketům neměnit jen port, ale také je přesměrovat na localhost. A když komunikaci na firewallu zakazujete, musíte pak ten lokální port 80 povolit.
Princip je stejný, jako u iptables – tam byl také NAT nezávislý na firewallu a to, že jste NATem někam paket přesměroval ještě neznamenalo, že projde i firewallem.