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 GOCCIAIl 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.
- Il primo comando iptables chiama l'utilità della riga di comando iptables.
- Il prossimo è -I argomento usato per l'inserimento. L'argomento di inserimento aggiunge una regola all'inizio della catena iptables e quindi viene assegnata una priorità più alta. Per aggiungere una regola a un numero specifico nella catena, usa l'argomento -I seguito dal numero a cui deve essere assegnata la regola.
- L'argomento -s aiuta a specificare la fonte. Quindi, usiamo l'argomento -s seguito dall'indirizzo IP.
- Il parametro -j con iptables specifica il salto a un target specifico. Questa opzione imposta l'azione che Iptables deve eseguire una volta che c'è un pacchetto corrispondente. Iptables offre quattro obiettivi principali per impostazione predefinita, questi includono: ACCEPT, DROP, LOG e REJECT.
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 -L3: 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 -vAd 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 ACCEPTUna 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 REJECTEliminazione 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 1Nella 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 wlan0I comandi precedenti consentono il traffico sulla porta 1001 TCP sull'interfaccia wlan0.
sudo iptables -A INPUT -j DROP -p TCP --destination-port 1001 -i wlan0Questo comando fa l'opposto del comando precedente in quanto blocca tutto il traffico sulla porta 1001 su wlan0.
Ecco un'attenta ispezione del comando:
- Il primo argomento (-A) aggiunge una nuova regola alla fine della catena della tabella.
- L'argomento INPUT aggiunge la regola specificata alla tabella.
- L'argomento DROP imposta l'azione da eseguire rispettivamente come ACCEPT e DROP. Ciò significa che una volta che un pacchetto viene abbinato, viene eliminato.
- -p specifica il protocollo come TCP e consente il passaggio del traffico su altri protocolli.
- -porta di destinazione imposta la regola per accettare o eliminare tutto il traffico destinato alla porta 1001.
- -io
dice a iptables di applicare la regola al traffico proveniente dall'interfaccia wlan0.
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.24Indirizzi 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 ACCEPTiptables -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 ACCETTOiptables -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 REJECT3: Consenti connessioni SSH
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPTQuesti 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 -vUna 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.