Esercitazione su Nftables

Esercitazione Su Nftables



Questo tutorial spiega come lavorare con il firewall Nftables Linux. Questo contenuto è ottimizzato sia per utenti esperti che per nuovi utenti Linux.

Nftables è un componente del kernel Linux che fornisce funzionalità firewall. È il sostituto di Iptables.







Dopo aver letto questo tutorial, capirai le regole di Nftables e sarai in grado di creare il tuo firewall. Non sono necessarie conoscenze precedenti su Iptables.



Tutti gli esempi in questo tutorial contengono schermate, il che rende facile per tutti gli utenti Linux, indipendentemente dal loro livello di conoscenza, comprenderli e implementarli.



Iniziare con Nftables

Prima di iniziare, crea e apri un file utilizzando un editor di testo come nano o vi per iniziare a digitare le prime regole di Nftables in base al seguente esempio. Non copiare e incollare; digita tutto.





nano firewall.nft

L'esempio in questo tutorial è piuttosto semplice e mostra un firewall restrittivo in cui tutto il traffico IPv4 viene eliminato ad eccezione del loopback e delle porte specifiche.



Nello screenshot precedente, ho usato la prima riga per definire la mia rete locale (192.168.0.0/16) come LinuxHintNet.

definire LinuxHintNet = 192.168.0.0 / 16

Nella seconda riga, definisco un gruppo di porte (80,443 e 22). Chiamo questo gruppo AllowPorts perché ho intenzione di consentire il traffico attraverso di loro. AllowPorts è un nome arbitrario.

definisci AllowPorts   = { 80 , 443 , 53 , 22 }

Quindi, aggiungo una tabella, che è un contenitore o un gruppo di catene e regole; entrambi sono spiegati di seguito. Le tabelle aiutano le regole e le catene ad essere organizzate. Ho chiamato la tabella nell'esempio 'Restrictive' perché contiene una politica restrittiva e il suo nome è arbitrario.

L'IP prima del nome della tabella indica che le regole della tabella delle code verranno applicate solo al traffico IPv4. Puoi utilizzare inet invece di IP per applicare regole ai protocolli IPv4 e IPv6. Oppure puoi sostituire IP con IP6 solo per IPv6.

Ricorda, restrittivo è un nome che ho definito arbitrariamente. Puoi nominare la tabella come vuoi.

Nel mio caso, applico le regole solo a IPv4, come mostrato di seguito.

aggiungi tabella ip restrittivo

Per entrambi i protocolli, utilizzare quanto segue:

aggiungi tabella inet restrittiva

Quindi aggiungiamo la prima catena di base, che chiamo arbitrariamente Incoming perché è correlata al traffico in entrata. Tuttavia, puoi nominarlo come vuoi.

La seguente catena di base elimina tutto il traffico in entrata per impostazione predefinita:

  • add chain ip Restrictive Incoming: questa sezione aggiunge la catena Restrictive Incoming da applicare a IPv4
  • filtro di tipo: definisce il tipo di catena come filtro poiché filtrerà il traffico. Altri possibili tipi di catena sono route o NAT
  • hook input: si riferisce ai pacchetti in arrivo
  • priorità 0: la priorità della catena di base definisce l'ordine delle catene di base
  • policy drop: la policy drop, per impostazione predefinita, scarta tutti i pacchetti
Aggiungi catena ip Entrata restrittiva { genere priorità di ingresso del gancio del filtro 0 ; calo della politica; }

Come puoi vedere nello screenshot seguente, ho creato altre due catene di base simili alle precedenti, Restrictive Redirect e Restrictive Outgoing. La differenza è l'hook definito per ciascuno (hook forward e hook output). Spiegarli è ripetitivo.

Dopo le tre catene di base, possiamo continuare con le regole di Nftables per consentire il traffico di loopback.

Aggiungo le seguenti righe per il traffico in entrata e in uscita sull'interfaccia di loopback.

aggiungi regola ip Restrictive Incoming iifname lo counter accept

aggiungi regola ip Restrictive Incoming oifname lo counter accept

Ora aggiungo quattro regole che accettano il traffico TCP e UDP in uscita e in entrata attraverso tutte le porte incluse nella variabile $AllowPorts definita all'inizio del file.

aggiungi regola ip Sport TCP in entrata restrittivo $AllowPorts contro accettare

aggiungi regola ip TCP in uscita restrittivo dport $AllowPorts contro accettare

aggiungi regola ip Sport udp in entrata restrittiva $AllowPorts contro accettare

aggiungi regola ip Porta udp in uscita restrittiva $AllowPorts contro accettare

Puoi vedere lo script completo di seguito.

Una volta terminata la digitazione di tabelle, catene e regole, chiudi il documento e salva le modifiche.

# Nelle prime due righe definisco la mia rete locale (LinuxHintNet) e un insieme di porte (80,
#443,22)per abilitare il traffico attraverso di essi nelle regole seguenti.
definire LinuxHintNet = 192.168.0.0 / 16
definisci AllowPorts   = { 80 , 443 , 53 , 22 }
#Dichiaro una nuova tabella che conterrà catene e regole. Io chiamo questa tabella 'restrittiva'.
#L''ip' applica le regole solo a IPv4. Per IPv6, usa solo 'ip6' e usa 'inet' per entrambi i protocolli.
aggiungi tabella ip restrittivo
# Dopo aver creato la tabella, creo tre catene, Incoming, Redirect e Outgoing,
#I loro nomi sono arbitrari. Tutti eliminano il traffico in entrata, in uscita e di inoltro per impostazione predefinita.
aggiungi catena ip Entrata restrittiva { genere priorità di ingresso del gancio del filtro 0 ; calo della politica; }
aggiungi catena ip Reindirizzamento restrittivo { genere priorità di aggancio del filtro in avanti 0 ; calo della politica; }
aggiungi catena ip Uscita restrittiva { genere priorità di uscita del gancio filtro 0 ; calo della politica; }
# Implemento due regole per consentire il traffico di loopback.
aggiungi regola ip Restrictive Incoming iifname lo counter accept
aggiungi regola ip Restrictive Incoming oifname lo counter accept
# Implemento le regole per consentire il traffico attraverso le porte definite nella variabile AllowPorts.
aggiungi regola ip Sport TCP in entrata restrittivo $AllowPorts contro accettare
aggiungi regola ip TCP in uscita restrittivo dport $AllowPorts contro accettare
aggiungi regola ip Sport udp in entrata restrittiva $AllowPorts contro accettare

aggiungi regola ip Porta udp in uscita restrittiva $AllowPorts contro accettare

Per attivare il firewall, eseguire il comando seguente:

sudo nft -f firewall.nft

Puoi controllare le tue regole eseguendo il seguente comando:

sudo set di regole dell'elenco nft

Questo è un firewall restrittivo di base.

Conclusione:

Come puoi vedere, Nftables è molto più amichevole di Iptables e gli utenti possono imparare Nftables più velocemente di Iptables. Poiché Iptables è stato interrotto e molte distribuzioni utilizzano Nftables come firewall predefinito, inclusa Debian. Gli utenti esperti di Iptables potrebbero voler dare un'occhiata allo strumento Iptables-nftables-compat, che traduce Iptables in Nftables. Questo può aiutarli a capire le differenze.

Gli utenti professionali come gli amministratori di sistema tendono a continuare a lavorare con Iptables; evita di ignorare Nftables per risparmiare tempo migliorando il filtraggio. Spero che questo articolo sia stato abbastanza semplice da convincerti a provare Nftables.