36
U NIVERSITÀ DEGLI STUDI DI G ENOVA MASTER IN C YBER S ECURITY AND DATA P ROTECTION Migrazione da iptables a nftables Autore: dott. Marco DE BENEDETTO Tutor accademico: prof. Mario MARCHESE Tutor aziendale: dott. Carlo BERUTTI BERGOTTO Project Work finale del Master di secondo livello in Cyber Security and Data Protection III edizione (a.a. 2016/17) 10 marzo 2019

Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

UNIVERSITÀ DEGLI STUDI DI GENOVA

MASTER IN CYBER SECURITY AND DATA PROTECTION

Migrazione da iptables a nftables

Autore:dott. Marco DE BENEDETTO

Tutor accademico:prof. Mario MARCHESE

Tutor aziendale:dott. Carlo BERUTTI BERGOTTO

Project Work finale

del

Master di secondo livello inCyber Security and Data Protection

III edizione (a.a. 2016/17)

10 marzo 2019

Page 2: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei
Page 3: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

iii

Indice

1 Introduzione 1

2 Packet Filtering in Linux 32.1 Storia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.2 Netfilter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.3 Nftables successore di iptables? . . . . . . . . . . . . . . . . . . . . . . . 6

3 Firewall Linux nella rete Galliera 73.1 Cenni storici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.2 Architettura attuale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.3 Problemi dell’infrastruttura . . . . . . . . . . . . . . . . . . . . . . . . . 93.4 Opportunità di migrazione a nftables . . . . . . . . . . . . . . . . . . . 9

4 Nftables 114.1 Caratteristiche di nftables . . . . . . . . . . . . . . . . . . . . . . . . . . 114.2 Packet flow in nftables . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124.3 Strumenti di debug e tracing . . . . . . . . . . . . . . . . . . . . . . . . . 15

5 Migrazione del Captive Portal 175.1 Captive Portal con iptables . . . . . . . . . . . . . . . . . . . . . . . . . . 175.2 Captive Portal nella versione nftables . . . . . . . . . . . . . . . . . . . 195.3 Autorizzazioni temporizzate . . . . . . . . . . . . . . . . . . . . . . . . 205.4 Aggiornamento del timeout . . . . . . . . . . . . . . . . . . . . . . . . . 215.5 Limitazione della banda . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

6 Strumenti di sviluppo e test 256.1 Virtualizzazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256.2 Debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

7 Considerazioni finali 277.1 eBPF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277.2 eBPF/XDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287.3 Conclusioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

Page 4: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei
Page 5: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

v

Elenco delle figure

2.1 Componenti di Netfilter . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3.1 Schema delle reti e dei due firewall . . . . . . . . . . . . . . . . . . . . . 8

4.1 Schema del flusso di pacchetti in nftables . . . . . . . . . . . . . . . . . 12

6.1 Macchine virtuali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

Page 6: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei
Page 7: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

vii

Elenco delle tabelle

2.1 Evoluzione dei framewrok (kernel versioni stabili) . . . . . . . . . . . . 3

6.1 Benchmark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

Page 8: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei
Page 9: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

1

Capitolo 1

Introduzione

Il progetto di seguito presentato ha avuto origine da considerazioni relative alla ne-cessità di aggiornare il sistema di firewall a protezione della rete interna dell’ospe-dale Galliera.

La LAN dell’ospedale è connessa ad internet dal 1996 e sin da allora il traffico direte da e verso l’esterno è stato regolato e monitorato da router/firewall Linux deiquali mi sono sempre occupato personalmente.

Nel tempo le esigenze di connettività sono via via aumentate ed i nostri sistemi sisono dimostrati adeguati sia per quanto riguarda le funzionalità che per prestazioni.Tuttavia nell’arco del 2017 si sono presentate alcune situazioni di criticità, causatesostanzialmente dal grande numero di regole sui firewall.

Pur avendo risolto i problemi, ho ritenuto di dover considerare questi segnalidi possibile obsolescenza del sistema, studiando le attuali alternative agli strumen-ti scelti oramai circa 17 anni fa: cioè in pratica le alternative ad iptables. In effet-ti l’alternativa c’è: si chiama nftables ed nato proprio con lo scopo di soppiantareiptables.

Il progetto, che si configura come studio di fattibilità, è consistito prima di tuttonell’approfondimento del nuovo framework. È seguita poi una fase di riscritturae di test delle regole dei due firewall in un ambiente virtuale su scenari architetta-ti ad-hoc. La sperimentazione è terminata e ha fornito elementi utili per valutarel’opportunità di mettere in atto la migrazione.

Page 10: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei
Page 11: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

3

Capitolo 2

Packet Filtering in Linux

Per inquadrare l’argomento Linux firewall ritengo possa essere interessante forni-re un breve riassunto dell’evoluzione degli strumenti per la classificazione ed ilfiltraggio dei pacchetti nel kernel Linux.

2.1 Storia

Nella tabella 2.1 vengono considerati solo i rilasci nei kernel stabili. Fino alla serie2.6.x le nuove features venivano introdotte sperimentalmente nelle versioni con ma-jor revision number dispari, ad esempio 2.3.4; a partire dalla versione 3 non esistepiù differenza tra kernel sperimentale e di produzione.

Framework/tool Stateful Anno Kernel Coder

ipfw no 1994 1.0 Alan Coxipfwadm no 1995-1999 1.2.x con x > 0- 2.0 A. Cox e Jos Vosipchains no 1999-2001 2.2 Rusty Russelliptables sì 2001- 2.4 Rusty Russellnftables sì 2014- 3.13 gli stessi di iptables

TABELLA 2.1: Evoluzione dei framewrok (kernel versioni stabili)

Le prime funzionalità di firewall sono state introdotte nel 1994 grazie al lavoro diAlan Cox che ne ha fatto il porting dal codice di BSD Unix. Questo codice costituiscela prima versione delle funzionalità di firewall all’interno del kernel Linux. Il suc-cessore di ipfw è stato ipfwadm, in realtà una riscrittura del corrispondente ipfw diBSD da parte di Alan Cox e Jos Vos. Ipfw e ipfwadm consentivano di realizzare lefunzioni di base di un firewall:

• accounting di pacchetti IP,

• firewall di ingresso,

• firewall di uscita,

Page 12: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

4 Capitolo 2. Packet Filtering in Linux

• firewall di inoltro,

• redirezione (permette di realizzare proxy trasparenti)

• masquerading (sNAT)

A partire dal kernel Linux 2.2 (1999) viene rilasciato un nuovo sistema di packet fil-tering: ipchains. Ipchains è sostanzialmente una completa riscrittura del codice diipfw di cui espande le funzionalità. In particolare ipchains gestisce ulteriori proto-colli oltre a TCP, UDP e ICMP, ed inoltre è in grado di gestire la frammentazione deipacchetti.

Anche ipchains come ipfwadm realizza però un firewall non stateful; l’unica op-zione che ha per decidere se accettare un pacchetto entrante consiste nel verificarese il bit ACK è settato (significa che si tratta di una risposta relativa ad una connes-sione già stabilita), ma questo significa fidarsi del pacchetto di cui si deve stabilire ilverdetto. Ovviamente questa politica è inerentemente poco sicura in quanto è facileinviare pacchetti costruiti ad arte per superare i filtri del firewall.

Nel kernel 2.4 assistiamo nuovamente ad una completa riscrittura delle funzio-nalità di filtro e firewall di Linux, viene introdotto il framework Netfilter (comune-mente noto come iptables).

2.2 Netfilter

Netfilter è molto più maturo rispetto ai suoi predecessori, permette di realizzarefirewall stateful con maggiori capacità di ispezione dei pacchetti e capacità di log.Alcune delle caratteristiche di Netfilter sono:

• stateless packet filtering per IPv4 e IPV6

• stateful packet filtering per IPv4 (inizialmente, in seguito aggiunto il supportoper IPv6 (2.6.15)

• Network e Port Address Translation (NAT e NAPT)

• infrastruttura flessibile ed estendibile

• API per estensioni di terze parti

• un gran numero di plugin/moduli

Netfilter riscontra subito un grande supporto da parte della comunità open sourcee diverse aziende iniziano ad offrire firewall basati su Linux in forma di prodotticommerciali con servizi di supporto a pagamento.

Il tool di configurazione di Netfilter, che è poi il nome col quale è comunementenoto il framework stesso, è iptables. In realtà gli strumenti di configurazione delframework Netfilter formano una famiglia: oltre a iptables, che gestisce regole IPv4,

Page 13: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

2.2. Netfilter 5

esistono ip6tables per regole IPV6, ebtables per realizzare firewall layer 2 (LinuxBridge) e arptables che lavora nello specifico su messaggi ARP.

Ai diversi tool corrispondono, nel kernel, porzioni di codice ad-hoc per il singoloprotocollo: IPv4, IPv6, EB (Ethernet Bridge), ARP. A volte si usa il termine Xtablesper definire l’intera famiglia.

La possibilità di aggiungere plugin ha fatto sì che nel tempo Xtables si sia arric-chito di molti moduli aggiuntivi.

A partire dal kernel 3.13 (2014) gli stessi sviluppatori di Netfilter introducononftables con l’intento di soppiantare iptables. Il nuovo framework di classificazionedi pacchetti nasce con lo scopo di superare quelli che vengono considerati difetti ocarenze di iptables.

arptables

filter

arptables

ebtables

nat/filterbroute

ebtables

ip6tables

ip6tables

iptables

iptables

natNAT

engine

L3/4

tra

cke

rs

L7

he

lpe

rs

conntrack

Connectiontracking

Xtables

Netfilter hook API

Userspace tools

Netfilter kernel components

from and to to network stack; hardware

NAT Loggingvia nf_log

ulogd2

Queueingvia nf_queue

(custom)

raw/mangle/filter raw/mangle/filter

Brid

gin

g

other networking components

nf_tables

nftiptables-nftables

FIGURA 2.1: Componenti di Netfilter:1

Dalla figura 2.1 risulta evidente la maggiore complessità e ridondanza di Xtablesrispetto a nftables. L’unica area verde dedicata a nf_tables rappresenta il codice delkernel mentre le componenti userspace sono l’utilità nft e il tool di retrocompatibilitàiptable-nftables per poter inserire regole con la vecchia sintassi.

Nftables riduce il numero di linee di codice nel kernel riorganizzando e unifi-cando quello che in iptables è replicato quattro volte per i diversi protocolli. Inoltrenftables introduce strutture dati (insiemi2, dizionari, mappe e concatenazioni) chepermettono di semplificare e ottimizzare le regole del firewall. Contestualmentemigliorano la leggibilità delle regole e le prestazioni.

Iptables prevede che ogni regola viene introdotta da un comando *tables con re-lativi argomenti; nftables invece offre un proprio linguaggio col quale viene descrit-to e configurato l’intero firewall e le regole vengono attivate atomicamente. Anchequesto migliora la leggibilità e la gestione nel tempo degli insiemi di regole.

1Sorgente (CC BY-SA 3.0).2Iptables non gestisce nativamente gli insiemi ma esiste il tool ipset che fornisce a iptables questa

funzionalità.

Page 14: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

6 Capitolo 2. Packet Filtering in Linux

2.3 Nftables successore di iptables?

Nei casi precedenti all’uscita di un nuovo framework (ipfwadm, ipchains, iptables)la migrazione si rendeva necessaria anche perché il vecchio veniva dichiarato ob-soleto e non più supportato. Questo non è ancora accaduto con nftables e tutto fapensare che in questo caso il percorso sarà diverso; vedremo in seguito come si possaprospettare la transizione da iptables al suo successore.

Page 15: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

7

Capitolo 3

Firewall Linux nella rete Galliera

3.1 Cenni storici

Come anticipato nell’introduzione, la LAN dell’ospedale Galliera è collegata ad in-ternet dal 1996 e da sempre tutti i principali servizi di rete sono stati gestiti da mac-chine Linux delle quali mi sono personalemente occupato. Non fanno eccezione iservizi di firewall (filtering e NAT) che nel 1996 furono realizzati con ipfwadm.

L’uso del firewall nei primi anni era limitato all’implementazione di filtri per iltraffico in ingresso verso i servizi esposti a internet e al masquerading (SNAT) degliindirizzi IPv4 interni (di classe riservata).

Ad ogni evoluzione dei sistemi di firewall di Linux abbiamo provveduto ad ag-giornare i sistemi convertendo di volta in volta le regole e approfittando delle nuovefunzionalità introdotte.

3.2 Architettura attuale

Nel tempo è cresciuto il numero di sottoreti collegate, di servizi esposti e di conse-guenza la complessità delle regole configurate.

La situazione attuale consiste di due firewall iptables, uno esterno ed uno inter-no. Il firewall esterno regola il traffico tra internet, DMZ e reti locali; quello internodisciplina il traffico tra le reti locali e l’esterno.

Page 16: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

8 Capitolo 3. Firewall Linux nella rete Galliera

F

e

M

e

L

i

t

i

n

N

v

r

a

I

tW

n

F

� �

t

r

o

i lwl

a

C

D

D

W

F W

Z

A

n

-

e

L

oE

l

n

N

n

n

eW R

e

R

e

r

g

a

l

w

P

F

N

r

I

W

e

t

F

A

s ro

t

W

e

r

e

e

ie

i

F l

e

a

n

C

P

l

S

FIGURA 3.1: Schema delle reti e dei due firewall

Il firewall esterno è anche il terminatore delle connessioni VPN (IPsec, OpenVPN eWireGuard) e implementa una serie di regole “blacklist” i cui indirizzi provengonoda:

• ”FireHol Level1”1 (oltre 7000 sottoreti),

• ”Ransomware Tracker”2 (circa 400 indirizzi)

• fail2ban su ssh: blacklist auto-generata in base ai tentativi falliti di connessionevia ssh (circa 9000 indirizzi al momemnto)

• lista di indirizzi di botnet autoprodotta da script che analizzano tentativi dibruteforce tipicamente su servizi di posta (oltre 12.000 indirizzi)

Il totale delle regole supera le 20 mila.Il firewall interno invece gestisce le regole del captive portal: si tratta di abilitare

il traffico verso internet dei dispositivi wireless di coloro che si sono registrati tramiteinterfaccia web. Il sistema di registrazione e abilitazione, che ho realizzato con lacollaborazione di un collega, agisce classificando i pacchetti in base al mac address:i pacchetti con mac adddress abilitato vengono inoltrati regolarmente, i rimanentivengono marcati3 e deviati verso la pagina web che propone la registrazione.

Registriamo 80/90 nuovi dispositivi al giorno e sono 100.000 quelli che hannousufruito del servizio a partire dal 2012. Non avendo specificato termini di scadenza

1https://iplists.firehol.org/?ipset=firehol_level12https://ransomwaretracker.abuse.ch/downloads/RW_IPBL.txt3L’associazione del “mark” al pacchetto è realizzata all’interno del kernel, il pacchetto resta

inalterato.

Page 17: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

3.3. Problemi dell’infrastruttura 9

la lista di mac address non decresce mai; ad esempio al momento sono presenti oltre23 mila indirizzi ethernet. Di tanto in tanto si eseguono interventi di cancellazionedelle autorizzazioni più vecchie.

3.3 Problemi dell’infrastruttura

Nella sezione precedente ho messo in evidenza le dimensioni degli insiemi di indi-rizzi perché, durante il 2017, proprio la gestione di tante regole ha portato alla lucealcune carenze della soluzione implementata.

Per ogni indirizzo era prevista una regola4, cosa che comportava scorrere unalista di (decine di) migliaia di regole per poter classificare un pacchetto.

Questo approccio non è efficiente in quanto il lavoro del firewall cresce linear-mente col numero di regole e il throughput ne risente. Tipicamente la soluzione inquesti casi consiste nell’usare una struttura dati di tipo hash. Iptables non prevedestrutture dati di questo tipo; esiste però uno strumento esterno, ipset, che lo suppor-ta in questa funzionalità permettendo di ridurre decine di migliaia di regole ad ununica regola (nello specifico una regola per ogni insieme).

I problemi dovuti all’eccessivo numero di regole sono stati quindi risolti usandoipset su entrambe i firewall5.

3.4 Opportunità di migrazione a nftables

L’uso dei set di indirizzi ha risolto i problemi, tuttavia ho voluto verificare cosacomportasse la migrazione da iptables a nftables; in termini di impegno necessariorispetto ai vantaggi offerti.

Nftables si propone come framework completamente nuovo, più che come evo-luzione di iptables, l’interfaccia di configurazione è diventata simile ad un linguag-gio di programmazione e la struttura di tabelle e catene non è più vincolata dalframework. Ciò significa dover riprogrammare tutte le logiche all’interno del nuo-vo framwork. Anche se esistono i tool di traduzione di regole, parte del lavoro vaeseguita manualmente.

4Di tipo REJECT per le blacklist e di tipo RETURN per la gestione della rete wifi free.5L’introduzione dei set ha richiesto la revisione del codice del captive portal e dei programmi di

generazione di blacklist.

Page 18: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei
Page 19: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

11

Capitolo 4

Nftables

Nel seguito utilizzeremo la convenzione per cui righe come le seguenti rappresenta-no uno script di configurazione di nftables:

1 table ip filter {2 chain input {type filter hook input priority 0; policy drop;3 ip saddr 42.0.0.0/ accept;4 }5 }

Queste invece rappresentano comandi, eseguiti da linea di comando da root, conrelativo output:

# nft list ruleset | grep -w "comment.*DEBUG"ip saddr @testsources nftrace set 1 comment "DEBUG: XXX remove in production"

4.1 Caratteristiche di nftables

Vediamo quali sono le principali novità introdotte da nftables.

• supporto nativo per dual stack IPv4 e IPv6

• supporto nativo per strutture dati (importanti per le prestazioni): insiemi,mappe, dizionari e concatenazioni

• interessanti strumenti di debug e tracing

• aggiunta dell’hook ingress per migliorare le prestazioni

• layout di regole flessibile, partendo da un insieme vuoto, rispetto al classicolayout statico di iptables (filter/INPUT, nat/PREROUTING, . . . )

• contatori opzionali e azioni multiple in una singola regola (ad esempio si puòincrementare un contatore, scrivere nel log e eseguire NAT nella stessa regola)

• migliori opzioni di gestione dell’insieme di regole, aggiornamenti delle regolecompletamente atomici e incrementali

Page 20: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

12 Capitolo 4. Nftables

Si possono quindi inserire regole che valgono contestualemnte sia per IPv4 che perIPv6, mentre le strutture dati consentono di migliorare le prestazioni e la leggibilitàdelle regole, oltre a non richiedere il supporto di tool esterni.

Sono previsti utili strumenti di log e debug: ad esempio è possibile tracciarel’intero percorso di un singolo pacchetto attraverso le regole e la funzione di monitorpermette di osservare in tempo reale le modifiche alle regole di firewall. Molto utileper la gestione è inoltre la possibilità di introdurre commenti associati alle regole:chiedendo al kernel di elencare le regole attive appaiono anche i relativi commenti;ciò è diverso dall’avere il commento nel codice sorgente che nel frattempo potrebbeessere stato modificato o addirittura perso.

Vediamo un semplice esempio: vogliamo verificare se qualcuna tra le regoleattualmente caricate ha nel commento la stringa “DEBUG”:

# nft list ruleset | grep -w "comment.*DEBUG"ip saddr @testsources nftrace set 1 comment "DEBUG: XXX remove in production"

4.2 Packet flow in nftables

e

R

u

r

c

o

P

e

r

s

D

i

l

s

o

t

n

e

R

u�

i

e

t

k

D

a

n

r

w

i

g

o

r

N

t

n

e

i

o

i

c

s

t

o

i

u

i

p

t

n

u

s

g

i

L

c

i

d

o

w

r

g

s

t

s

n

e

s

s

o

o

N

p

g

s

t

n

n

e

o

r

a

i

p

c

r

p

o

k

g

t

u

r

n

u

o

o

r

w

u

t

t

f

o

FIGURA 4.1: Schema del flusso di pacchetti in nftables

Le regole vengono organizzate in catene che a loro volta sono contenute in tavole. Letavole sono associate ad una delle famiglia che determina il tipo di traffico visibile

Page 21: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

4.2. Packet flow in nftables 13

nella tavola. Le famiglie sono: ip (per il traffico IPv4), ip6 (per IPv6), inet (sia IPv4che IPv6), arp, bridge e netdev (vede tutto il traffico).

Lo schema 4.1 rappresenta i possibili percorsi di un pacchetto e l’asterisco evi-denzia gli hook ai quali si possono associare le catene:

• ingress

• prerouting

• input

• output

• forwarding

• output

• postrouting

La possibilità di intervenire precocemente sul pacchetto, appena il driver dell sche-da di rete lo passa al livello superiore, è utile per gestire attacchi tipo DDoS o perlimitare la banda senza appesantire il lavoro del kernel: questo è reso possibile dal-l’hook ingress che interviene prima del prerouting. Catene associate all’hook ingresssono definite in tavole della famiglia netdev. Scartare i pacchetti a questo livello èdue volte più efficiente rispetto al drop in prerouting.

I pacchetti che sono destinati a qualche processo locale (cioè sono indirizzati al-l’host stesso) sono gestiti tramite l’hook input ed analogamente quelli generati daprocessi locali tramite l’hook output.

Il traffico che deve essere inoltrato fra le due reti viene gestito tramite l’hookforward.

Il NAT interviene in prerouting (DNAT) e postrouting (SNAT).Il layout iniziale di nftables è semplicemente l’insieme vuoto; l’amministratore è

libero di configurare tavole (table) e catene (chain)1 nel modo più adatto al problemada risolvere.

In iptables i contatori dei pacchetti, transitati da ogni catena, non si possono di-sabilitare; con nftables si può e sono disabilitati per default: attivandoli solo quandonecessario possono migliorare le prestazioni.

Poter indicare più azioni per una singola regola rende più leggibile e consistenteil codice; con iptables spesso è necessario saltare ad un’altra catena contenente le di-verse azioni. Ad esempio, vediamo due soluzioni iptables per scartare un pacchettoregistrando l’operazione nei log:

# iptables -t filter -A OUTPUT -d 10.0.0.1 -j LOG # Log, continue to next rule# iptables -t filter -A OUTPUT -d 10.0.0.1 -j DROP # Drops the same packet

1Le tavole sono contenitori di catene che a loro volta contengono regole.

Page 22: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

14 Capitolo 4. Nftables

oppure

# iptables -t filter -N LOGGING # Create non-base chain for logging# iptables -t filter -A LOGGING -j LOG # Add rule to logging chain to LOG# iptables -t filter -A LOGGING -j DROP # Add rule to logging chain to DROP# iptables -t filter -A OUTPUT -d 10.0.0.1 -j LOGGING # Jump LOGGING if match

con nftables è sufficiente una sola regola:

# nft add rule ip filter output ip daddr 10.0.0.1 log drop

Un esempio minimale di configurazione per un server web può essere il seguente:

CODICE 4.1: Semplice esempio per server web

1 table inet filter {2 chain input {3 type filter hook input priority 0;4

5 # accept any localhost traffic6 iif lo accept7

8 # accept traffic originated from us9 ct state established,related accept

10

11 # accept common local services12 tcp dport { ssh, http, https } ct state new accept13

14 # count and drop any other traffic15 counter drop16 }17 }

Notare, riga 9, che le connessioni già stabilite o relative a connessioni già stabilite,informazione ricavata dalla conntrack table, sono accettate. I servizi aperti all’ester-no sono ssh, http e https, tutto il resto viene scartato (drop) senza l’invio "ICMP hostunreachable". Inoltre i pacchetti rifiutati vengono contati (counter).

CODICE 4.2: Semplice esempio di router/firewall

1 table inet inet-filter {2 set my_ipv4_addrs {3 type ipv4_addr;4 elements = { 1.1.1.1, 1.2.3.4}5 }6 set my_ipv6_addrs {7 type ipv6_addr;8 elements = { fe00::1, fe00::2}9 }

10 chain forward {11 type filter hook forward priority 0; policy drop;

Page 23: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

4.3. Strumenti di debug e tracing 15

12 ct state established,related counter accept13 ct state invalid counter drop14 tcp dport {22, 80, 443} ct state new counter accept15 ip daddr @my_ipv4_addrs counter accept16 ip6 daddr @my_ipv6_addrs counter accept17 }18 }

Questo esempio descrive il comportamento di un semplice router/firewall. La ta-vola è associata ai protocolli IPv4 e IPv6 (inet) e definisce due insiemi di indirizzi(righe 2 e 7). Al solito viene accettato traffico relativo a connessioni attive (riga 13)mentre viene scartato il traffico non valido (causato da stealth port scan, da probleminella conntrack table o da anomalie benigne). Oltre ad accettare connessioni versoqualsiasi server ssh e http(s), un verdetto positivo è previsto anche per qualsiasi con-nessione verso i server elencati ei due insiemi my_ipv4_addrs e my_ipv6_addrs. Perognuna delle categorie sopra elencate viene attivato il contatore.

4.3 Strumenti di debug e tracing

Ritengo che il sistema di tracing offerto da nftables sia di ottima qualità; è fondamen-tale per la rapida individuazione dei bug durante la sperimentazione e lo sviluppodei ruleset. Il tracing viene attivato impostando una metainformazione relativa alpacchetto: nftrace=1.

# nft add rule filter forward udp dport 53 meta nftrace set 1

Dal momento che transita dalla catena di forward, ogni pacchetto destinato ad unDNS server riporterà i dettagli del suo percorso attraverso l’insieme di regole.

Per osservare il resoconto del “viaggio” del pacchetto è necessario attivare il mo-nitor da console: i pacchetti con nftrace settato invieranno al monitor le informazio-ni con i dettagli relativi al percorso seguito. Questo ad esempio è il percorso di unpacchetto destinato ad un DNS server:

# nft monitortrace id e7d627c0 ip captive forward packet: iif "eth1" oif "eth0" ether saddr ⤦

Ç 00:16:3e:05:12:55 ether daddr 00:16:3e:35:e7:80 ip saddr 193.168.100.159 ip ⤦Ç daddr 8.8.8.8 ip dscp cs0 ip ecn not-ect ip ttl 63 ip id 36018 ip length 59 ⤦Ç udp sport 40220 udp dport domain udp length 39 @th,64,96 ⤦Ç 49749720051147984142130479104

trace id e7d627c0 ip captive forward rule udp dport domain nftrace set 1 (verdict ⤦Ç continue)

trace id e7d627c0 ip captive forward verdict continuetrace id e7d627c0 ip captive forwardtrace id e7d627c0 ip captive nat_postrouting verdict continuetrace id e7d627c0 ip captive nat_postrouting

Page 24: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei
Page 25: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

17

Capitolo 5

Migrazione del Captive Portal

Per captive cortal si intende una configurazione della rete in cui il dispositivo chesi collega la prima volta viene reindirizzato ad una pagina web tramite la quale siidentifica ottenendo l’autorizzazione all’uso della rete.

Nel nostro caso l’identificazione avviene fornendo il numero di cellulare al qualeviene inviato un codice via SMS. L’utente restituisce questo codice attraverso la stes-sa pagina del captive portal e così facendo il dispositivo viene autorizzato: il macaddress viene aggiunto dinamicamente tra quelli che il firewall non deve bloccare.

Lo schema di verifica e autorizzazione del traffico è il seguente:

1. il pacchetto viene analizzato per verificare se il mac address è stato autorizzato

• sì: allora finisce l’analisi e il pacchetto viene inoltrato

• no: il pacchetto viene marcato (0x63)

2. in fase di prerouting, se il pacchetto è marcato ed la porta di destinazione èhttp allora viene reindirzzato (DNAT) alla pagina del captive portal

3. negli altri casi (pacchetto marcato e traffico non http) allora il pacchetto vienescartato in fase di forwarding

5.1 Captive Portal con iptables

La configurazione di iptables che realizza quanto descritto sopra è la seguente:

CODICE 5.1: Mangle per wifi free

1 # iptables -L -t mangle2 Chain PREROUTING (policy ACCEPT)3 target prot opt source destination4 internet all -- 192.168.16.0/20 anywhere5

6 Chain internet (1 references)7 target prot opt source destination8 RETURN all -- anywhere anywhere match-set captive_ok src9 MARK all -- anywhere anywhere MARK set 0x63

10

11 # iptables -L -t filter

Page 26: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

18 Capitolo 5. Migrazione del Captive Portal

12 Chain FORWARD (policy DROP)13 ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED14 DROP all -- anywhere anywhere mark match 0x6315

16 # iptables -L -t nat17 Chain PREROUTING (policy ACCEPT)18 DNAT tcp -- anywhere anywhere mark match 0x63 tcp dpt:http to:192.168.31.119

20 # ipset list captive_ok | head -n 1521 Name: captive_ok22 Type: hash:mac23 Revision: 024 Header: hashsize 8192 maxelem 6553625 Size in memory: 53974426 References: 127 Members:28 02:42:42:D9:26:9F29 02:42:42:2F:F6:C830 02:42:42:E5:5B:4E31 02:42:42:8A:9E:C732 02:42:42:87:C5:A933 02:42:42:0C:56:3034 02:42:42:8B:5C:F235 02:42:42:88:90:C936 ...

Il listato 5.1 rappresenta la configurazione del firewall limitatamente alle regole stret-tamente necessarie a realizzare la funzionalità di captive portal. Il fatto di aver eli-minato le regole non pertinenti il caso in esame può far sembrare inutili o ridondantialcune di quelle elencate.

Le prime nove righe sono relative alla marcatura in fase di prerouting:

(riga 4) il traffico proveniente dalla rete wifi (192.168.16.0/20) verrà analizzatodalla catena internet (salta alla riga 8)

(riga 8) se il mac address sorgente è contenuto nel set captive_ok ritorna

(riga 9) marca il pacchetto con il valore 0x63 (99 decimale)

La tavola filter, riga 11:

(riga 12) di default scarta i pacchetti che non soddisfano una delle regole

(riga 13) accetta il traffico relativo a connessioni già attivo

(riga 14) scarta i pacchetti marcati con il valore 0x63

La tavola di NAT ha il compito di indirizzare il traffico http verso il sito del captiveportal. Le righe dalla 20 in poi sono relative all’insieme captive_ok, quello che con-tiene i mac address autorizzati1 L’intestazione indica che si tratta di un insieme dimac address e a seguire sono elencati gli elementi dell’insieme.

1Qui abbiamo usato indirizzi fittizi.

Page 27: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

5.2. Captive Portal nella versione nftables 19

5.2 Captive Portal nella versione nftables

Un’implementazione della logica del captive portal in nftables è la seguente:

CODICE 5.2: Captive portal con nftables

1 define WIFINET = 192.168.100.0/242 define CAPTIVE_IP = 192.168.100.1963

4 table ip captive {5 set captive_ok { type ether_addr; }6 chain filter_prerouting {7 type filter hook prerouting priority 0; policy accept;8 ip saddr $WIFINET ether saddr @captive_ok return9 ip saddr $WIFINET mark set 0x63

10 }11 chain nat_prerouting {12 type nat hook prerouting priority 100; policy accept;13 mark 0x63 tcp dport http dnat $CAPTIVE_IP14 }15 chain nat_postrouting {16 type nat hook postrouting priority 100; policy accept;17 }18 chain forward {19 type filter hook forward priority 0; policy accept;20 ct state established,related accept21 mark 0x63 drop22 }23 }

Possiamo intanto notare due cose:

• il linguaggio prevede la definizione di variabili

• le due catene, filter_prerouting e nat_prerouting, sono di tipo diverso (unafiltra e l’altra esegue il NAT) ma sono agganciate allo stesso hook (prerouting):la priorità definisce quale deve essere l’ordine di consultazione

L’attivazione di un dispositivo si effettua inserendone il mac address nell’insiemecaptive_ok:

# nft add element captive captive_ok {00:16:3e:05:12:55}

Passiamo ora a descrivere alcune funzionalità specifiche di nftables.

Page 28: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

20 Capitolo 5. Migrazione del Captive Portal

5.3 Autorizzazioni temporizzate

Vogliamo che l’autorizzazione all’uso della rete wifi scada dopo 15 giorni. Per fareciò dobbiamo modificare la definizione del set, alla riga 5 del listato 5.2, introducen-do un timeout2 in questo modo:

5 set captive_ok { type ether_addr; timeout 15d; }

Ogni elemento inserito nell’insieme verrà eliminato automaticamente dopo 15 gior-ni. È possibile verificare in ogni istante quanto tempo resta prima della scadenza:

# nft add set captive captive_ok_timeout { type ether_addr\; timeout 15d\; }# nft list set captive captive_ok_timeouttable ip captive {

set captive_ok_timeout {type ether_addrtimeout 15d

}}# nft add element captive captive_ok_timeout {6c:0b:84:91:7d:a4}# sleep 5 && nft list set captive captive_ok_timeouttable ip captive {

set captive_ok_timeout {type ether_addrtimeout 15delements = { 6c:0b:84:91:7d:a4 expires 14d23h59m54s }

}}

Verifichiamo che ogni elemento disponga di un proprio timer indipendente:

# nft add element captive captive_ok_timeout {02:0a:76:09:41:8b}# nft list set captive captive_ok_timeouttable ip captive {

set captive_ok_timeout {type ether_addrtimeout 15delements = { 02:0a:76:09:41:8b expires 14d23h59m57s,

6c:0b:84:91:7d:a4 expires 14d23h56m4s }}

}

2Durante la sperimentazione ho identificato un bug che al momento risulta ancora aperto. Non siriescono ad impostare timeout > 24d20h31m23s.Vedi https://bugzilla.netfilter.org/show_bug.cgi?id=1237

Page 29: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

5.4. Aggiornamento del timeout 21

Alternativamente o in aggiunta al timeout di default, è possibile definire un set incui ogni elemento può essere esplicitamente dichiarato con il proprio timeout:

# nft add set captive captive_ok_timeout_flag { type ether_addr\; flags timeout\; ⤦Ç timeout 15d\; }

# nft add element captive captive_ok_timeout_flag {02:0a:76:09:41:8b}# nft list set captive captive_ok_timeout_flagtable ip captive {

set captive_ok_timeout_flag {type ether_addrtimeout 15delements = { 02:0a:76:09:41:8b expires 14d23h59m57s }

}}# nft add element captive captive_ok_timeout_flag {02:0a:88:01:c3:51 timeout 42m}# nft list set captive captive_ok_timeout_flagtable ip captive {

set captive_ok_timeout_flag {type ether_addrtimeout 15delements = { 02:0a:76:09:41:8b expires 14d23h58m51s,

02:0a:88:01:c3:51 timeout 42m expires 41m58s }}

}

La scadenza automatica degli elementi degli insiemi semplifica la gestione del siste-ma in quanto non è necessario intervenire con altri strumenti per eliminare i macaddress scaduti.

5.4 Aggiornamento del timeout

In realtà sarebbe auspicabile un comportamento più intelligente: se un utente è unospite frequente3 vorremmo evitare di dovergli chiedere la registrazione ogni 15giorni; vogliamo invece far scadere l’autorizzazione 15 giorni dopo l’ultimo utiliz-zo del servizio. Per ottenere ciò è necessario aggiornare il timeout ogni volta che siosserva transitare un pacchetto generato dal singolo client.

Nftables è in grado di aggiornare dinamicamente i set in funzione del percor-so del pacchetto: proprio la funzionalità che ci serve. Apportiamo quindi questamodifica allo script 5.2:

6 chain filter_prerouting {7 type filter hook prerouting priority 0; policy accept;8 ip saddr $WIFINET ether saddr @captive_ok set update ether saddr timeout 15d ⤦

Ç @captive_ok return

3Ad esempio perché dipendente.

Page 30: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

22 Capitolo 5. Migrazione del Captive Portal

9 ip saddr $WIFINET mark set 0x6310 }

La riga numero 8 del listato 5.2 adesso non solo ritorna, di fatto autorizzando ilpacchetto, ma contestualmente aggiorna l’elemento reimpostandone la validità a 15giorni.

Realizzare applicativamente questa funzionalità avrebbe significato doversi con-frontare con almeno tre domini diversi: le regole del firewall, il database delle auto-rizzazioni e i log. Una soluzione affidabile non sarebbe stata di facile realizzazione.

5.5 Limitazione della banda

Potrebbe essere necessario in certi casi imporre qualche limite alla banda dedicataagli utenti della rete wifi. Anche in questo caso nftables offre una soluzione cherisulta semplice da implementare nel linguaggio di definizione delle regole.

Il caso più semplice consiste nel limitare la banda occupata globalmente dallarete wifi. Facendo sempre riferimento allo script 5.2, riscriviamo la catena di forwardin questo modo:

18 chain forward {19 type filter hook forward priority 0; policy accept;20 limit rate over 8 mbytes/second drop21 ct state established,related accept22 mark 0x63 drop23 }

Avendo introdotto la riga 20 imponiamo che il traffico inoltrato non possa superare8 mbytes, i pacchetti in eccesso vengono scartati. Questa operazione risulta però piùefficiente4 se eseguita in ingress. In effetti nella configurazione delle regole per ilcaptive portal ho scelto questo approccio.

18 table netdev wifirate {19 chain download {20 # interfaccia verso internet21 type filter hook ingress device eth2 priority 0;22 limit rate over 8 mbytes/second counter drop23 }24 chain upload {25 # interfaccia verso wifi26 type filter hook ingress device eth1 priority 0;27 limit rate over 8 mbytes/second counter drop28 }29 }

4Vedi ad esempio https://netdevconf.org/1.2/slides/oct6/08_nftables_Load_Balancing_with_nftables_II_Slides.pdf

Page 31: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

5.5. Limitazione della banda 23

La tabella wifirate limita la banda entrante dall’interfaccia eth2, download da inter-net, e la banda entrante dall’interfaccia eth1, cioè l’upload verso internet.Quella che segue è una variante che garantisce che la limitazione si applichi soloalla rete wifi e che permette di oltrepassare il limite per brevi periodi se necessario(burst):

20 ip daddr $WIFINET limit rate over 6 mbytes/second burst 10 mbytes/second drop

Una regola ancora più raffinata è la seguente. Qui sfruttiamo i meter e la concatena-zione:

20 ip daddr $WIFINET meter rate-meter { ip saddr . ip daddr limit rate over 3 ⤦Ç mbytes/second burst 5 mbytes/second } drop

L’operatore “.” concatena i due indirizzi, sorgente e destinazione, generando lachiave dell’elemento al quale si applica il limite di 3 megabyte al secondo.

Queste sono solo alcune delle potenzialià di nftables, ma sono quelle che risulta-no più interessanti per i nostri scopi.

Page 32: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei
Page 33: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

25

Capitolo 6

Strumenti di sviluppo e test

6.1 Virtualizzazione

Per realizzare i test delle regole in un ambiente simulato, ho configurato tre servervirtuali libvirt+lxc, cioè sostanzialmente tre Linux container con sistema operativoDebian 9.4 (sia per i guest che per l’host); l’hardware consiste di un laptop Intel i5dual core.

Una delle tre macchine, chiamata fw, simula il firewall tra una LAN e una retepubblica. La seconda macchina, chiamata pc, rappresenta un client all’interno diuna rete locale mentre la terza simula un server in internet, chiamato wikipedia.

Lo strato di virtualizzazione della rete è quello offerto da libvirt; sono statedefinite le reti loc e net rispettivamente per la LAN e per internet.

1

.

6

N

2

1

.

0

9

10

t

1

p

2

4

6

r

d

/

2

4

0 1 0

W

2

9

41

.

9

C

1

1

.

0

1

.

/

W

0

0

I

e

4

/

k

n

.

i

2

4

t

0 1 5

2

P

/

1 08

0

1

A

.

1

0

i

5

.

0

n

.

i

e

9

2

e

a

3

1 .. 0

F

.

1

2

6

L

FIGURA 6.1: Macchine virtuali

In questa configurazione le prestazioni della rete sono state valutate con iperf(1) ewget(1). Nel primo test, routing, la macchina fw agisce come semplice router. Neltest mark è attiva la verifica dell’appartenenza del mac address all’insieme degliindirizzi autorizzati ma l’insieme è costituito da un solo elemento. Nel test mark-fulll’insieme è costituito da 23.000 elementi. Il risultato sembra confermare che nftablespuò gestire insiemi grandi dimensioni senza eccessive difficoltà1.

1Ovviamente non possiamo attribuire un valore assoluto al test. Quello che ci interessa evidenziareè che che non si ravvisano differenze sostanziali nei tre casi.

Page 34: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

26 Capitolo 6. Strumenti di sviluppo e test

Configurazione iperf wget 4GB

routing 32.6 4.5mark 30.3 4.4mark-full 30.2 4.4

TABELLA 6.1: Benchmark

6.2 Debug

Il debug come accennato in precedenza è stato facilitato dal sistema di packet tra-cing. Ovviamente sono stati fondamentali anche i tool tradizionali, uno su tuttitcpdump.

Volendo scendere a livello più basso si può arrivare a verificare il bytecode iniet-tato nel kernel quando si inserisce una regola:

1 # nft --debug=netlink add rule atable arule ip saddr 10.0.0.0/8 accept2 ip atable arule3 [ payload load 4b @ network header + 12 => reg 1 ]4 [ bitwise reg 1 = (reg=1 & 0x000000ff ) ^ 0x00000000 ]5 [ cmp eq reg 1 0x0000000a ]6 [ immediate reg 0 accept ]

Il payload è il pacchetto in esame.

• alla riga 3 vengono caricati nel registro numero 1, 4 byte a partire dalla dodi-cesima posizione dell’header del pacchetto: cioè l’indirizzo IPv4 sorgente

• alla riga 4 viene applicata la netmask per caricare nel registro 1 il byte piùsignificativo dell-indirizzo

• alla riga 5 il registro 1 viene confrontato con il valore 0xa (10 decimale)

se il confronto ha successo il pacchetto viene accettato.

Page 35: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

27

Capitolo 7

Considerazioni finali

Nonostante gli indiscutibili vantaggi di nftables rispetto ad iptables, non sembra chela sostituzione possa avvenire a breve. La difficoltà di nftables nello scalzare iptablesdipende dal fatto che iptables nei sui 17/18 anni di vita si è diffuso molto (datacenter,virtualizzazione, container, . . . ) ed ha arricchito le sue funzionalità, magari in modonon elegante ma comunque efficace. Per certi versi la situazione assomiglia a quellatra IPv4 e IPv6.

Paradigmatica a questo proposito è la decisione presa da WikiMedia Founda-tion dopo aver discusso sull’argomento netfilter software at WMF: iptables vs nftables1.La proposta di migrare l’infrastruttura di WMF è stata avanzata da Arturo Borrero,mantainer del pacchetto nftables per Debian e operator del “cloud team” di Wiki-media. Lui stesso, dopo aver previsto che la migrazione completa richiederebbe 1 senon 2 anni, conclude che non è il momento:

EOF. I propose we follow up in the future.

Come nel caso di WikiMedia per molti il ragionamento sembra essere lo stesso: “tut-to sta funzionando con iptables, non si evidenziano problemi, lo sforzo per passare a nftablesè importante: non conviene.”.

7.1 eBPF

Quello che invece sembra rappresentare il futuro è eBPF: enanched Berkeley PacketFiltering2. L’articolo su Linux Weekly News del 19 febbraio 2018 3 dal titolo “BPFcomes to firewalls” dice tra l’altro:

. . . Miller4 said in the discussion that nftables failed to address the performanceproblems in Linux’s packet-filtering implementation, driving users toward user-space networking technologies instead. There is a real possibility that nftablescould end up being one of those experiments that is able to shed some light onthe problem space but never takes over in the real world.

1https://phabricator.wikimedia.org/T1879942eBPF fa molto di più che filtrare pacchetti: è anche in grado di fare raw tracing in modo simile a

quello di DTrace e SystemTap.Un buon punto di partenza è https://github.com/iovisor/bcc

3https://lwn.net/Articles/747551/4Si tratta di David Miller, uno dei mantainer dello stack TCPI/IP di Linux

Page 36: Migrazione da iptables a nftables · 1 Introduzione 1 2 Packet Filtering in Linux 3 ... rete da e verso l’esterno è stato regolato e monitorato da router/firewall Linux dei

28 Capitolo 7. Considerazioni finali

7.2 eBPF/XDP

Quando abbiamo visto i possibili utilizzi dell’hook ingress consideravamo un van-taggio in termini di prestazioni il fatto di essere “più vicini” al driver della scheda direte. XDP (eXpress Data Path) si spinge oltre demandando (offloading) il filtraggio,e altro, direttamente al firmware della scheda di rete (vedi https://www.iovisor.org/technology/xdp).

Vengono già prodotte e commercializzate le cosiddette SmartNIC5, schede di reteprogettate appositamente per l’offloading.

Qualcuno non vede di buon occhio questo approccio perché teme si possa tratta-re di tentativi di “kernel bypass” ma gli sviluppatori di soluzioni eBPF/XDP forni-scono rassicurazioni in questo senso6.

7.3 Conclusioni

Nonostante il fermento intorno alle nuove soluzioni di packet filtering è indubbioche iptables non verrà abbandonato nel breve periodo. Le ricadute pratiche dellavoro di sperimentazione svolto si limiteranno all’introduzione di nftables sul fi-rewall interno in virtù delle funzionalità di cui abbiamo discusso nella sezione 5.1;non ritengo utile portare avanti la migrazione del firewall esterno.

5Ad esempio https://www.netronome.com/products/smartnic/overview/6https://www.netronome.com/blog/avoid-kernel-bypass-in-your-network-infrastructure/