Featured image of post Iptables vs Nftables

Iptables vs Nftables

Abstract

Nftables è un firewall che è stato sviluppato da Netfilter, la stessa organizzazione che attualmente gestisce iptables, ed è stato introdotto a partire dal 2014 nel kernel di Linux. Il progetto nacque per porre rimedio all’obsolescenza di iptables, ormai carente dal punto di vista prestazionale e non più scalabile come un tempo. Il framework di iptables nel tempo, come tutti i progetti di lunga, è diventato eccessivamente complicato a causa della presenza di diverse varianti che forniscono le stesse funzioni ma separatamente (iptables, ip6tables, arptables ed ebtables).

Con le iptables era estremamente scomodo avere due set di regole ipv4 e ipv6, poichè iptables e ip6tables erano due applicativi separati le cui configurazioni necessitavano di rimanere sincrone.

A parte una nuova sintassi e alcuni aggiornamenti, il funzionamento di nftables è simile a quello del suo predecessore.

Chains and rules

Il framework iptables possiede tre chains predefinite: input, output e forward. Queste tre contengono un set di regole che vengono consultate ogni volta in cui vi è del traffico, sia in entrata che in uscita. Nella fase di esaminazione del traffico, nel caso in cui questo non venga corrisposto ad alcuna regola, come in uno switch case, viene usata la politica di default (ACCEPT oppure DROP).

Iptables è inefficiente nell’analizzare il traffico poichè tutti i dati di rete devono attraversare una o più chain indipendentemente dal fatto che queste siano configurate o meno, effettuando controlli non necessari.

Nftables, nel suo, ha esattamente lo stesso funzionamento. Tuttavia non ha nessuna chain predefinita, ma ne permette la creazione da zero fornendo flessibilità nella configurazione e non presenta il problema di analisi di iptables.

Differenza di sintassi

La sintassi di iptables è sempre stata intricata, contorta e di ardua apprensione. Nftables invece ha una sintassi similare ma molto più semplice.

Per creare una nuova rule si utilizza il seguente comando:

1
nft add rule family_type table_name chain_name handle handle_value statement

Ora analizziamo la differenza tra iptables e nftables.

Blocco di una connessione

Questo comando blocca la connessione in entrata dall’ip 192.168.7.5.

1
2
3
4
5
# iptables
iptables -A INPUT -s 192.168.2.1 -j DROP

# nftables
nft add rule ip filter INPUT ip saddr 192.168.7.5 counter drop

Abilitare la connessione SSH in entrata

Questo comando abilita la connessione SSH in entrata.

1
2
3
4
5
# iptables
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

# nftables
nft add rule ip filter INPUT tcp dport 22 ct state new,established counter accept

Questo comando abilita la connessione SSH in entrata per tutta la rete 192.168.155.0/24.

1
2
3
4
5
# iptables
iptables -A INPUT -p tcp -s 192.168.155.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

# nftables
nft add rule ip filter INPUT ip saddr 192.168.155.0/24 tcp dport 22 ct state new,established counter accept

Abilitare la connessione MySQL sull’interfaccia di rete eth0

Con questo comando si abilitano le connessioni sull’interfaccia di rete eth0 verso il server di MySQL.

1
2
3
4
5
# iptables
iptables -A INPUT -i eth0 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

# nftables
nft add rule ip filter INPUT iifname eth0 tcp dport 3306 ct state new,established counter accept

Abilitare il traffico HTTP e HTTPS

Con questo comando si abilita il traffico sulla porta 80 e sulla 443.

1
2
3
4
5
# iptables
iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

# nftables
nft add rule ip filter INPUT ip protocol tcp tcp dport { 80,443} ct state new,established counter accept

Conclusione

Abbiamo visto come il framework di nftables sia molto più chiaro e fruibile rispetto al vecchio iptables. Non siamo entrati nello specifico sulla creatzione di tables o chains tuttavia per chi fosse interessato lascio il link alla wiki di ArchLinux dove si può approfondire lo studio.

Realizzato con Hugo
Tema Stack realizzato da Jimmy