iptables

Ubuntu Iptables Come controllare il traffico di rete usando iptables?

Ubuntu Iptables Come controllare il traffico di rete usando iptables?
“… A utilità Unix in spazio utente che offre agli amministratori di sistema la possibilità di configurare le regole di filtraggio dei pacchetti IP implementate dal modulo filtro di rete del kernel." Iptables funge da firewall utilizzando regole di filtraggio dei pacchetti basate su vari criteri come indirizzo IP, porta e protocolli.

Questa guida discuterà come configurare e utilizzare le regole iptables su un sistema Ubuntu per proteggere la tua rete. Che tu sia un utente Linux alle prime armi o un amministratore di sistema esperto, da questa guida e in un modo o nell'altro imparerai qualcosa di utile su iptables.

Iptables è preinstallato su Ubuntu e sulla maggior parte delle distribuzioni basate su Debian. Ubuntu include anche il firewall GUFW, un'alternativa grafica che puoi usare per lavorare con iptables.

NOTA: Per utilizzare e configurare iptables, avrai bisogno dei privilegi sudo sul tuo sistema. Puoi saperne di più su sudo dal seguente tutorial.

Ora che sai cos'è Iptables, tuffiamoci dentro!

Come utilizzare iptables per gestire il traffico IPv4?

Per utilizzare Iptables per la rete IPv4 e la gestione del traffico, è necessario comprendere quanto segue:

Il comando Iptables

Iptables offre una selezione di opzioni che ti consentono di personalizzare e ottimizzare le regole di iptables. Discutiamo alcuni di questi parametri e vediamo cosa fanno.

NOTA: Puoi configurare un insieme di regole che gestiscono un sottoinsieme specifico, noto come catene iptables.

Parametri IPtables

Prima di iniziare a creare e configurare le regole di iptables, cerchiamo di comprendere le basi di iptables, come la sintassi generale e gli argomenti predefiniti.

Considera il comando seguente:

sudo iptables -I INPUT -s 192.168.0.24 -j GOCCIA

Il comando sopra dice a iptables di creare una regola nella catena. La regola elimina tutti i pacchetti dall'indirizzo IP 192.168.0.24.

Esaminiamo il comando, riga per riga, per capirlo meglio.

Iptables offre una selezione di parametri che è possibile utilizzare per configurare varie regole. I vari parametri che puoi utilizzare per configurare le regole di iptables includono:

Parametro della regola di Iptables Descrizione
-s -source Specificare l'origine, che può essere un indirizzo, un nome host o un nome di rete.
-p -protocollo Specifica il protocollo di connessione; ad esempio, TCP, UDP, ecc.
-d -destinazione Specifica la destinazione, che può essere un indirizzo, un nome di rete o un nome host.
-j-salta Imposta l'azione che iptables deve eseguire dopo aver trovato un pacchetto.
-o -out-interfaccia Imposta l'interfaccia attraverso la quale iptable invia il pacchetto.
-i-in-interfaccia Imposta l'interfaccia utilizzata per stabilire i pacchetti di rete.
-c -set-contatori Consente all'amministratore di impostare i contatori di byte e pacchetti per una regola specifica.
-g -goto catena Il parametro specifica che l'elaborazione deve continuare nella catena impostata dall'utente al ritorno.
-f -frammento Dice a iptables di applicare la regola solo al secondo e ai successivi frammenti dei pacchetti frammentati.

Opzioni Iptables

Il comando iptables supporta un'ampia gamma di opzioni. Alcuni comuni includono:

Opzione Descrizione
-A -append Aggiunge una regola alla fine di una catena specificata
-D -elimina Rimuove una regola dalla catena specificata
-F -scala Rimuove tutte le regole, una alla volta
-L-lista Mostra tutte le regole nella catena specificata
-io -inserisco Inserisce una regola nella catena specificata (passata come numero, quando non è specificato alcun numero; la regola viene aggiunta in alto)
-C-controlla Query per una corrispondenza di regole; requisito in una regola specifica
-v -verboso Visualizza maggiori dettagli se utilizzato con il parametro -L
-N-nuova-catena Aggiunge una nuova catena definita dall'utente
-X -delete-catena Rimuove una specifica catena definita dall'utente

Tabelle Iptables

Il kernel Linux ha tabelle predefinite che ospitano una serie di regole correlate. Queste tabelle predefinite hanno una serie di catene predefinite, ma gli utenti possono personalizzare le regole aggiungendo regole definite dall'utente.

NOTA: Le tabelle predefinite dipenderanno molto dalla configurazione del kernel e dai moduli installati.

Ecco le tabelle iptables predefinite:

1: Le tabelle dei filtri

La tabella dei filtri è una tabella predefinita che contiene le catene utilizzate per il filtraggio dei pacchetti di rete. Alcune delle catene predefinite in questa tabella includono:

Catena Descrizione
Ingresso Iptables usa questa catena per qualsiasi pacchetto in entrata nel sistema, i.e., pacchetti che vanno ai socket della rete locale.
Produzione Iptables usa la catena di output per i pacchetti generati localmente, i.e., pacchetti in uscita dal sistema.
Inoltrare Questa catena è quella utilizzata da Iptables per i pacchetti instradati o inoltrati tramite il sistema.

2: Le tabelle NAT

NAT o Network Address Table è un dispositivo di routing utilizzato per modificare gli indirizzi IP di origine e di destinazione in un pacchetto di rete. L'uso principale della tabella NAT è la connessione di due reti in un intervallo di indirizzi privati ​​con la rete pubblica.

NAT è stato sviluppato per supportare il mascheramento di indirizzi IP reali, consentendo agli intervalli di indirizzi IP privati ​​di raggiungere la rete esterna. Questo aiuta a proteggere i dettagli sulle reti interne dalla rivelazione nelle reti pubbliche.

La tabella NAT viene utilizzata quando un pacchetto avvia una nuova connessione.

Iptables ha una tabella predefinita per l'indirizzamento NAT. Questa tabella ha tre catene principali:

Catena Descrizione
PRECAUZIONI Consente la modifica delle informazioni sui pacchetti prima di arrivare nella catena INPUT utilizzata per i pacchetti in entrata
PRODUZIONE Riservato ai pacchetti creati localmente, i.e., prima che si verifichi il routing di rete
POSTOUTING Consente la modifica dei pacchetti in uscita - Pacchetti in uscita dalla catena OUTPUT

Il diagramma seguente mostra una panoramica di alto livello di questo processo.

Usa il comando qui sotto per visualizzare le tue tabelle di routing NAT.

iptables -t nat -n -v -L

3: I tavoli Mangle

Il tavolo mangle viene utilizzato principalmente per la modifica speciale dei pacchetti. In parole povere, viene utilizzato per modificare le intestazioni IP di un pacchetto di rete. La modifica dei pacchetti può includere la modifica di un valore TTL del pacchetto, la modifica di hop di rete validi per un pacchetto, ecc.

La tabella contiene le seguenti catene predefinite:

Catena Descrizione
PRECAUZIONI Riservato per i pacchetti in arrivo
POSTOUTING Utilizzato per i pacchetti in uscita
INGRESSO Utilizzato per i pacchetti che arrivano direttamente nel server
PRODUZIONE Usato per i pacchetti locali
Inoltrare Riservato ai pacchetti instradati attraverso il sistema

4: Le tavole grezze

Lo scopo principale della tabella non elaborata è configurare le eccezioni per i pacchetti non destinati a essere gestiti dal sistema di tracciamento. La tabella raw imposta un contrassegno NOTRACK sui pacchetti, richiedendo alla funzione conntrack di ignorare il pacchetto.

Conntrack è una funzionalità di rete del kernel Linux che consente al kernel Linux di tenere traccia di tutte le connessioni di rete, consentendo al kernel di identificare i pacchetti che costituiscono un flusso di rete.

La tabella grezza ha due catene principali:

Catena Descrizione
PRECAUZIONI Riservato ai pacchetti ricevuti dalle interfacce di rete
PRODUZIONE Riservato per i pacchetti avviati da processi locali

5: Il tavolo della sicurezza

L'uso principale di questa tabella è l'impostazione del meccanismo di sicurezza interno Security Enhancement for Linux (SELinux) che contrassegna i pacchetti. Il contrassegno di sicurezza può essere applicato per connessione o pacchetto.

Viene utilizzato per le regole di controllo dell'accesso obbligatorio ed è la seconda tabella a cui si accede dopo la tabella dei filtri. Offre le seguenti catene predefinite:

Catena Descrizione
INGRESSO Riservato per i pacchetti in arrivo al sistema
PRODUZIONE Utilizzato per i pacchetti creati localmente
INOLTRARE Utilizzato per i pacchetti instradati attraverso il sistema

Dopo aver esaminato gli Iptables predefiniti, facciamo un ulteriore passo avanti e discutiamo come lavorare con le regole di iptables.

Come lavorare con le regole di iptables?

Le regole di Iptables vengono applicate in ordine crescente. Ciò significa che la prima regola in un insieme specifico viene applicata per prima, seguita dalla seconda, quindi dalla terza e così via, fino all'ultima.

A causa di questa funzione, iptables impedisce di aggiungere regole in un set utilizzando il parametro -A; devi usare la -I, seguita dal numero o svuotandola per aggiungere in cima alla lista.

Visualizzazione di Iptables

Per visualizzare i tuoi iptables, usa il comando iptables -L -v per IPv4 e ip6tables -L -v per IPv6.

Inserimento di regole

Per inserire le regole in un insieme, è necessario posizionarle nell'ordine esatto, rispettando le regole utilizzate dalla stessa catena. Puoi visualizzare l'elenco delle tue regole iptables con il comando come discusso sopra:

sudo iptables -L -v

Ad esempio, per inserire una regola che consenta connessioni in entrata alla porta 9001 su TCP, dobbiamo specificare il numero della regola alla catena INPUT aderendo alle regole di traffico per il web.

sudo iptables -I INPUT 1 -p TCP --dport 9001 -m state --state NEW -j ACCEPT

Una volta visualizzati gli iptables correnti, dovresti vedere la nuova regola nel set.

sudo iptables -L -v

Sostituzione delle regole

La funzionalità di sostituzione funziona in modo simile all'inserimento, tuttavia utilizza il comando iptables -R. Ad esempio, per modificare la regola sopra e impostare la porta 9001 per negare, noi:

sudo iptables -R INPUT 1 -p TCP --dport 9001 -m state --state NEW -j REJECT

Eliminazione di una regola

Per eliminare una regola, passiamo il numero della regola. Ad esempio, per eliminare la regola sopra, possiamo specificare come:

sudo iptables -D INGRESSO 1

Nella maggior parte delle distribuzioni Linux, iptables è vuoto sia per IPv4 che per IPv6. Quindi, se non hai aggiunto alcuna nuova regola, otterrai un output simile a quello mostrato di seguito. Questo è rischioso perché significa che il sistema consente tutto il traffico in entrata, in uscita e instradato.

Vediamo come configurare iptables:

Come configurare iptables?

Esistono numerosi modi per configurare le regole di iptables. Questa sezione usa esempi per mostrarti come impostare le regole usando indirizzi IP e porte.

Blocco e autorizzazione del traffico per porte

È possibile utilizzare una porta specifica per bloccare o consentire tutto il traffico su un'interfaccia di rete. Considera i seguenti esempi:

sudo iptables -A INPUT -j ACCEPT -p TCP --destination-port 1001 -i wlan0

I comandi precedenti consentono il traffico sulla porta 1001 TCP sull'interfaccia wlan0.

sudo iptables -A INPUT -j DROP -p TCP --destination-port 1001 -i wlan0

Questo comando fa l'opposto del comando precedente in quanto blocca tutto il traffico sulla porta 1001 su wlan0.

Ecco un'attenta ispezione del comando:

NOTA: Iptables non comprende gli alias dell'interfaccia di rete. Pertanto, in un sistema con più di un'interfaccia virtuale, sarà necessario definire l'indirizzo di destinazione manualmente ed esplicitamente.

Per esempio:

sudo iptables -A INPUT -j DROP -p TCP --destination-port 1001 -i wlan0 -d 192.168.0.24

Indirizzi IP in whitelist e blacklist

Puoi creare regole firewall usando iptables. Un esempio è interrompendo tutto il traffico e consentendo il traffico di rete solo da indirizzi IP espliciti.

Esempio:

iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT
iptables -A INPUT -i lo -m comment --comment "Consenti connessioni loopback" -j ACCEPT
iptables -A INPUT -p icmp -m comment --comment “Consenti a Ping di funzionare come previsto” -j

ACCETTARE

iptables -A INGRESSO -s 192.168.0.1/24 -j ACCETTO
iptables -A INGRESSO -s 192.168.0.0 -j ACCETTA
iptables -P INPUT DROP
iptables -P FORWARD DROP

La prima riga imposta una regola per consentire a tutti gli indirizzi IP di origine nel 192.168.0.1/24 sottorete. Puoi anche utilizzare CIDR o indirizzi IP individuali. Nel seguente comando, impostiamo la regola per consentire tutto il traffico connesso alle connessioni esistenti. Nei comandi finali, impostiamo una politica per INPUT e FORWARD per eliminare tutto.

Utilizzo di iptables su IPv6

Il comando Iptables funziona solo su IPv4. Per usare iptables su IPv6, devi usare il comando ip6tables. Ip6tables utilizza tabelle raw, filter, security e mangle. La sintassi generale per ip6tables è simile a iptables e supporta anche le opzioni corrispondenti di iptables come append, delete, ecc.

Considerare l'utilizzo delle pagine di manuale di ip6tables per ulteriori informazioni.

Esempio di set di regole iptables per la sicurezza della rete

La creazione di regole firewall adeguate dipenderà principalmente dal servizio in esecuzione su un sistema e dalle porte in uso. Tuttavia, ecco alcune regole di configurazione di rete di base che puoi utilizzare per proteggere il tuo sistema:

1: consentire il traffico dell'interfaccia di loopback e rifiutare tutti i loopback provenienti da altre interfacce

iptables -A INPUT -i lo -j ACCEPT (puoi anche usare ip6tables)
iptables -A INGRESSO ! -io lo -s 127.0.0.0 -j REJECT (applicabile anche ip6tables)

2: nega tutte le richieste di ping

iptables -A INPUT -p icmp -m state --state NEW --icmp-type 8 -j REJECT

3: Consenti connessioni SSH

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT

Questi sono comandi di esempio che puoi usare per proteggere il tuo sistema. Tuttavia, la configurazione dipenderà molto da cosa o da chi si desidera accedere ai vari servizi.

ATTENZIONENota: se preferisci disabilitare completamente IPv6, assicurati di rimuovere il commento dalla riga in quanto ciò rallenterà il processo di aggiornamento:

precedenza ::ffff:0:0/96 100 trovato in /etc/gai.conf .

Questo perché il gestore di pacchetti APT risolve il dominio mirror in IPv6 a causa di apt-get update.

Come distribuire le regole di iptables?

Per distribuire i tuoi iptables su Ubuntu o altri sistemi basati su Debian, inizia creando due file, ip4 e ip6, per i rispettivi indirizzi IP.

In entrambi i file, aggiungi le regole che desideri applicare nei file corrispondenti: regole IPv4 al file ip4 e regole IPv6 al file ip6.

Successivamente, dobbiamo importare le regole usando il comando:

sudo iptables-restore < /tmp/ip4 (replace filename for IPv6)

Quindi, puoi verificare se le regole sono state applicate usando il comando:

sudo iptables -L -v

Una guida rapida a iptablesper

Ubuntu e le comuni distribuzioni basate su Debian vengono fornite con un pacchetto iptables persistente che consente di applicare facilmente le regole del firewall al riavvio. Il pacchetto fornisce file che è possibile utilizzare per impostare le regole per IPv4 o IPv6 e possono essere applicati automaticamente all'avvio.

Puoi anche usare le regole del firewall usando UFW o GUFW. Considera il seguente tutorial per imparare a usare UFW.

Come installare iptables-persistent?

Assicurati di avere iptables persistente installato sul tuo sistema. Usa dpkg per verificare se hai installato il pacchetto.

In caso contrario, utilizzare il seguente comando:

sudo apt-get install iptables-persistent

Ti verrà chiesto due volte di salvare entrambe le regole IPv4 e IPv6 correnti. Fare clic su Sì per salvare entrambe le regole.

Fare clic su Sì per salvare IPv6.

Una volta completata l'installazione, verifica di avere la sottodirectory iptables, come mostrato nell'immagine qui sotto.

Ora puoi usare le regole.v4 e regole.v6 per aggiungere regole iptables e verranno applicate automaticamente da iptables-persistent. I file sono semplici file di testo che puoi facilmente modificare utilizzando qualsiasi editor di testo di tua scelta.

Conclusione

In questo tutorial, abbiamo trattato le basi di iptables. Iniziare a lavorare con iptables, comandi di base, tabelle iptables predefinite e parametri.

Da quanto hai appreso, dovresti essere in grado di utilizzare iptables per creare regole firewall che aiutino a proteggere il tuo sistema.

Porte open source di motori di gioco commerciali
Ricreazioni del motore di gioco gratuite, open source e multipiattaforma possono essere utilizzate per riprodurre titoli di giochi vecchi e abbastanza...
I migliori giochi da riga di comando per Linux
La riga di comando non è solo il tuo più grande alleato quando usi Linux, ma può anche essere una fonte di intrattenimento perché puoi usarla per gioc...
Le migliori app di mappatura del gamepad per Linux
Se ti piace giocare su Linux con un gamepad invece di un tipico sistema di input di tastiera e mouse, ci sono alcune app utili per te. Molti giochi pe...