Introduzione

Iptables è un firewall che svolge un ruolo essenziale nella sicurezza della rete per la maggior parte dei sistemi Linux. Questo tutorial si concentrerà su un aspetto diverso della gestione del firewall: elencare ed eliminare delle regole.

In questo tutorial, tratteremo come eseguire le seguenti attività di iptables:

  • Elenco delle regole
  • Cancella contatori di pacchetti e byte
  • Elimina regole
  • Svuota catene (elimina tutte le regole in una catena)
  • Svuota tutte le catene e le tabelle, elimina tutte le catene e accetta tutto il traffico
Nota: quando si lavora con i firewall, fare attenzione a non bloccarsi dal proprio server bloccando il traffico SSH (porta 22, per impostazione predefinita). Se si perde l'accesso a causa delle impostazioni del firewall, potrebbe essere necessario connettersi ad esso tramite la console del proprio provider. Una volta connesso tramite la console, è possibile modificare le regole del firewall per consentire l'accesso SSH (o consentire tutto il traffico). Se le regole del firewall salvate consentono l'accesso SSH, un altro metodo è riavviare il server.

Prerequisiti

Prima di iniziare a utilizzare questa esercitazione, è necessario disporre di un account superutente non root separato, un utente con privilegi di sudo, impostato sul server. Se è necessario configurarlo, seguire la guida appropriata:

Vediamo come elencare prima le regole. Esistono due modi diversi per visualizzare le regole di iptables attive: in una tabella o come elenco di specifiche delle regole. Entrambi i metodi forniscono all'incirca le stesse informazioni in diversi formati.

Elencare le regole per specifica

Per elencare tutte le regole di iptables attive in base alle specifiche, eseguire il comando iptables con l'opzione -S:

sudo iptables -S
-P FORWARD DROP
-P OUTPUT ACCEPT
-N ICMP
-N TCP
-N UDP
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT

Come puoi vedere, l'output assomiglia ai comandi utilizzati per crearli. Questo sarà anche simile ai file di configurazione delle regole di iptables, se lo hai mai usato iptables-persistent o iptables save.

Elencare una catena specifica

Se si desidera limitare l'output a una catena specifica (INPUT, OUTPUT, TCP e così via), è possibile specificare il nome della catena subito dopo l'opzione -S. Ad esempio, per mostrare tutte le specifiche della regola nella catena TCP, eseguire questo comando:

sudo iptables -S TCP
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT

Diamo un'occhiata al modo alternativo di visualizzare le regole di iptables attive, come una tabella di regole.

Elencare le regole come tabelle

Elencare le regole di iptables nella vista tabella può essere utile per confrontare regole diverse tra loro,

Per generare tutte le regole di iptables attive in una tabella, eseguire il comando iptables con l'opzione -L:

sudo iptables -L

Questo produrrà tutte le regole attuali ordinate per catena.

Se si desidera limitare l'output a una catena specifica (INPUT, OUTPUT, TCP e così via), è possibile specificare il nome della catena subito dopo l'opzione -L.

Diamo un'occhiata a una catena INPUT di esempio:

sudo iptables -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere
DROP       all  --  anywhere             anywhere             ctstate INVALID
UDP        udp  --  anywhere             anywhere             ctstate NEW
TCP        tcp  --  anywhere             anywhere             tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
ICMP       icmp --  anywhere             anywhere             ctstate NEW
REJECT     udp  --  anywhere             anywhere             reject-with icmp-port-unreachable
REJECT     tcp  --  anywhere             anywhere             reject-with tcp-reset
REJECT     all  --  anywhere             anywhere             reject-with icmp-proto-unreachable

La prima riga di output indica il nome della catena (INPUT, in questo caso), seguito dalla sua politica di default (DROP). La riga successiva è composta dalle intestazioni di ciascuna colonna della tabella ed è seguita dalle regole della catena. Vediamo cosa indica ogni intestazione:

  • target: se un pacchetto corrisponde alla regola, il target specifica cosa deve essere fatto con esso. Ad esempio, un pacchetto può essere accettato, eliminato, registrato o inviato a un'altra catena per essere confrontato con più regole
  • prot: Il protocollo, come ad esempio tcp, udp, icmp, o all
  • opt: Raramente utilizzato, questa colonna indica le opzioni IP
  • source: l'indirizzo IP di origine o sottorete del traffico, oppure anywhere
  • destinazione: l'indirizzo IP o la sottorete del traffico di destinazione, oppure anywhere

L'ultima colonna, che non è etichettata, indica le opzioni di una regola. Cioè, qualsiasi parte della regola che non è indicata dalle colonne precedenti. Potrebbe trattarsi di qualsiasi cosa, dalle porte di origine e di destinazione, allo stato di connessione del pacchetto.

Mostra conteggi pacchetti e dimensione aggregata

Quando si elencano le regole di iptables, è anche possibile mostrare il numero di pacchetti e la dimensione aggregata dei pacchetti in byte, corrispondenti a ciascuna regola particolare. Ciò è spesso utile quando si cerca di farsi un'idea approssimativa di quali regole corrispondono ai pacchetti. Per fare ciò, basta usare insieme l'opzione -L e -v.

Ad esempio, diamo un'occhiata alla catena INPUT di nuovo, con l'opzione -v:

sudo iptables -L INPUT -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
 284K   42M ACCEPT     all  --  any    any     anywhere             anywhere             ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere
    0     0 DROP       all  --  any    any     anywhere             anywhere             ctstate INVALID
  396 63275 UDP        udp  --  any    any     anywhere             anywhere             ctstate NEW
17067 1005K TCP        tcp  --  any    any     anywhere             anywhere             tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
 2410  154K ICMP       icmp --  any    any     anywhere             anywhere             ctstate NEW
  396 63275 REJECT     udp  --  any    any     anywhere             anywhere             reject-with icmp-port-unreachable
 2916  179K REJECT     all  --  any    any     anywhere             anywhere             reject-with icmp-proto-unreachable
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:ssh ctstate NEW,ESTABLISHED

Si noti che l'elenco ora ha due colonne aggiuntive pkts e bytes.

Ora che sai come elencare le regole del firewall attivo in vari modi, diamo un'occhiata a come resettare i contatori di pacchetti e byte.

Ripristinare conteggi pacchetti e dimensioni aggregate

Se vuoi cancellare, o azzerare, i contatori di pacchetti e byte per le tue regole, usa l'opzione -Z. Si resettano anche se si verifica un riavvio. Questo è utile se vuoi vedere se il tuo server sta ricevendo nuovo traffico che corrisponde alle tue regole esistenti.

Per cancellare i contatori per tutte le catene e le regole, utilizzare l'opzione -Z da sola:

sudo iptables -Z

Per cancellare i contatori per tutte le regole in una catena specifica, utilizzare l'opzione -Z e specificare la catena. Ad esempio, per cancellare i contatori di catene INPUT eseguire questo comando:

sudo iptables -Z INPUT

Se si desidera cancellare i contatori per una regola specifica, specificare il nome della catena e il numero della regola. Ad esempio, per azzerare i contatori per la prima regola nella catena INPUT, eseguire questo:

sudo iptables -Z INPUT 1

Ora che sai come resettare il pacchetto iptables e i contatori di byte, diamo un'occhiata ai due metodi che possono essere usati per eliminarli.

Eliminare una regola per Specification

Uno dei modi per eliminare le regole di iptables è è per rule Specification. Per fare ciò, è possibile eseguire il comando iptables con l'opzione -D seguita dalla specifica della regola. Se si desidera eliminare le regole utilizzando questo metodo, è possibile utilizzare l'output dell'elenco delle regole iptables -S per un aiuto.

Ad esempio, se si desidera eliminare la regola che elimina i pacchetti in entrata non validi (-A INPUT -m conntrack --ctstate INVALID -j DROP), è possibile eseguire questo comando:

sudo iptables -D INPUT -m conntrack --ctstate INVALID -j DROP

Si noti che l'opzione -A, che viene utilizzata per indicare la posizione della regola al momento della creazione, deve essere esclusa qui.

Eliminare una regola per catena e numero

L'altro modo per eliminare le regole di iptables è tramite la sua catena e il numero di riga . Per determinare il numero di riga di una regola, elencare le regole nel formato tabella e aggiungere l'opzione --line-numbers:

sudo iptables -L --line-numbers
Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
2    ACCEPT     all  --  anywhere             anywhere
3    DROP       all  --  anywhere             anywhere             ctstate INVALID
4    UDP        udp  --  anywhere             anywhere             ctstate NEW
5    TCP        tcp  --  anywhere             anywhere             tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
6    ICMP       icmp --  anywhere             anywhere             ctstate NEW
7    REJECT     udp  --  anywhere             anywhere             reject-with icmp-port-unreachable
8    REJECT     tcp  --  anywhere             anywhere             reject-with tcp-reset
9    REJECT     all  --  anywhere             anywhere             reject-with icmp-proto-unreachable
10   ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh ctstate NEW,ESTABLISHED
...

Ciò aggiunge il numero di riga a ciascuna riga della regola, indicata dall'intestazione num.

Una volta che sai quale regola vuoi eliminare, annota la catena e il numero di riga della regola. Quindi eseguire il comando iptables -D seguito dalla catena e dal numero della regola.

Ad esempio, se vogliamo eliminare la regola di input che elimina i pacchetti non validi, possiamo vedere che è la regola 3 della catena INPUT. Quindi dovremmo eseguire questo comando:

sudo iptables -D INPUT 3

Ora che sai come eliminare le singole regole del firewall, esaminiamo come è possibile svuotare catene di regole.

Catene Flush (svuotare)

Iptables offre un modo per eliminare tutte le regole in una catena o svuotare una catena. Questa sezione tratterà la varietà di modi per farlo.

Nota: fare attenzione a non bloccarsi fuori dal server, tramite SSH, svuotando una catena con una politica predefinita di drop o deny . In tal caso, potrebbe essere necessario connettersi ad esso tramite la console per correggere l'accesso.

Svuotare una catena singola

Per svuotare una catena specifica, che eliminerà tutte le regole nella catena, è possibile utilizzare l'opzione -F o l'equivalente --flush e il nome della catena per svuotare.

Ad esempio, per eliminare tutte le regole della catena INPUT, eseguire questo comando:

sudo iptables -F INPUT

Svuotare tutte le catene

Per svuotare tutte le catene, che elimineranno tutte le regole del firewall, è possibile utilizzare l'opzione -F, o l'equivalente --flush, da solo:

sudo iptables -F

Svuotare tutte le regole, Eliminare tutte le catene e Accettare tutto

Questa sezione ti mostrerà come svuotare tutte le regole, le tabelle e le catene del firewall e consentire tutto il traffico di rete.

Nota: questo disabiliterà il tuo firewall. Seguire questa sezione solo se si desidera ricominciare da capo la configurazione del firewall.

Innanzitutto, impostare i criteri predefiniti per ciascuna delle catene integrate su ACCEPT. Il motivo principale per farlo è assicurarsi che non si verrà bloccati dal server tramite SSH:

sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

Quindi svuota le tabelle nat e mangle, svuota tutte le catene (-F) ed elimina tutte le catene non predefinite (-X):

sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -F
sudo iptables -X

Il firewall consentirà ora tutto il traffico di rete. Se elenchi ora le tue regole, vedrai che non ce ne sono e restano solo le tre catene predefinite (INPUT, FORWARD e OUTPUT).

Conclusione

Dopo aver seguito questo tutorial, dovresti conoscere come elencare ed eliminare le regole del tuo firewall iptables.

Ricorda che qualsiasi modifica di iptables tramite il comando iptables è temporanea e deve essere salvata per persistere attraverso i riavvii del server.