18.3. Opzioni utilizzate all'interno dei comandi iptables
Le regole per il filtraggio dei pacchetti vengono adottate usando il comando iptables. In questo contesto occorre utilizzare i seguenti aspetti del pacchetto come criterio di base:
Tipo di pacchetto — Indica quale tipo di pacchetto viene filtrato dal comando.
Fonte del pacchetto/destinazione — Indica al comando quali pacchetti filtrare in base alla loro fonte o destinazione.
Target — Indica quali azioni vengono adottate sui pacchetti che rispondono ai criteri sopra elencati.
Perch� una regola iptables sia valida, le opzioni ad essa applicate devono essere raggruppate in modo logico, in base allo scopo e alle condizioni delle regole in generale. Il remainder di questa sezione spiega le opzioni usate pi� comunemente per il comando iptables.
18.3.1. Struttura delle opzioni di iptables
Molti comandi di iptables presentano la struttura seguente:
L'opzione <nome-tabella> permette all'utente di selezionare una tabella diversa da quella di default filter da utilizzare con il comando. L'opzione <comando> ordina un'azione specifica da eseguire, come per esempio aggiungere o cancellare un regola specificata dall'opzione <nome-catena>. Questa opzione � seguita da coppie di parametri e opzioni che definiscono cosa accade quando un pacchetto corrisponde alla regola.
Guardando alla struttura di un comando iptables, � importante ricordare che, diversamente dalla maggior parte degli altri comandi, la lunghezza e la complessit� di un comando iptables possono cambiare a seconda dello scopo prefisso. Un semplice comando per rimuovere una regola da una catena pu� essere molto corto, mentre un comando creato per filtrare pacchetti da una determinata sottorete per mezzo di parametri e opzioni particolari pu� raggiungere una discreta lunghezza. Nel creare comandi iptables, � utile tener presente che l'impiego di alcuni parametri e di alcune opzioni pu� richiedere la necessit� per altri parametri e opzioni, di specificare in modo pi� dettagliato la precedente richiesta di opzione. Per creare una regola valida, dovete continuare in questo modo finch� non avrete soddisfatto tutti i parametri e tutte le opzioni in questione.
Per visualizzare un elenco completo delle strutture del comando iptables, digitate iptables -h.
18.3.2. Opzioni di comando
Le opzioni di comando indicano a iptables di svolgere un'azione specifica. Per ogni comando iptables � permesso solo una opzione di comando. Fatta eccezione per il comando help, tutti i comandi sono scritti con i caratteri maiuscoli.
I comandi di iptables sono i seguenti:
-A — Aggiunge la regola iptables alla fine della catena specificata. Questo comando viene utilizzato per aggiungere semplicemente una regola, nei casi in cui l'ordine delle regole nella catena non ha importanza.
-C — verifica una particolare regola prima di aggiungerla alla catena specificata dall'utente. Questo comando vi pu� aiutare nella creazione di regole di iptables complicate, indicandovi di volta in volta i parametri e le opzioni da aggiungere.
-D — Cancella una regola da una determinata catena in base al numero (per esempio il 5 per cancellare la quinta regola contenuta nella catena). Potete anche digitare l'intera regola e iptables canceller� la regola nella catena corrispondente.
-E — Rinomina una catena definita dall'utente, senza intaccare la struttura della tabella.
-F — svuota la catena selezionata, cancellando di fatto tutte le regole in essa contenute. Se non viene specificata alcuna catena, questo comando cancella tutte le regole di ogni catena.
-h — Fornisce un elenco di strutture di comando molto utili e un breve compendio di parametri e opzioni.
-I — Inserisce una nuova regola in un determinato punto specificato da un valore intero definito dall'utente. Se non specificate alcun numero, iptables inserir� il vostro comando all'inizio della catena.
Attenzione
Quando utilizzate l'opzione -A o -I siate a conoscenza che le regole all'interno di una catena sono importanti per determinare quali regole vengono applicate in base al pacchetto.
-L — elenca tutte le regole contenute nella catena specificata dopo il comando. Per ottenere un elenco di tutte le regole di tutte le catene contenute nella tabella di default filter, non specificate alcuna catena o tabella. Per elencare tutte le regole di una specifica catena contenuta in una determinata tabella, dovete utilizzare la seguente sintassi:
iptables -L <chain-name> -t <table-name>
All'interno della Sezione 18.3.6, troverete la descrizione per le opzioni aggiuntive per l'opzione del comando -L che, tra l'altro, fornisce i numeri delle regole e consente descrizioni pi� complesse.
-N — crea una nuova catena con un nome specificato dall'utente.
-P — Imposta la policy di default per una determinata catena, cos� se un pacchetto arriva alla fine di una catena e nessuna delle regole � stata soddisfatta, il pacchetto stesso viene inviato al target specificato, come ad esempio ACCEPT o DROP.
-R — Sostituisce una regola presente in una catena specificata. Dopo il nome della catena dovete inserire il numero della regola da sostituire. La prima regola presente in una catena corrisponde alla regola numero uno.
-X — cancella una catena specificata dall'utente. In nessun caso � permesso cancellare una catena integrata di una tabella.
-Z — Azzera i contatori byte e dei pacchetti in tutte le catene per una determinata tabella.
18.3.3. Opzioni del parametroiptables
Dopo aver specificato certi comandi di iptables, compresi quelli utilizzati per aggiungere, cancellare, inserire o sostituire delle regole all'interno di una determinata catena, vi occorrono alcuni parametri per procedere con la creazione della regola di filtraggio dei pacchetti.
-c — azzera i contatori per una particolare regola. Questo parametro accetta le opzioni PKTS e BYTES per specificare quale contatore azzerare.
-d — Imposta l'hostname di destinazione, l'indirizzo IP o la rete di un pacchetto che corrisponde alla regola. Nello specificare una rete, i seguenti formati di indirizzo IP/maschera di rete sono supportati:
N.N.N.N/M.M.M.M — Dove N.N.N.N � la portata dell'indirizzo IP e M.M.M.M � la maschera di rete.
N.N.N.N/M — Dove N.N.N.N � la portata dell'indirizzo IP e M � la bitmask.
-f — fa s� che questa regola sia valida solo per i pacchetti frammentati.
Usando il punto esclamativo (!) dopo questo parametro, solo i pacchetti non frammentati vengono soddisfatti.
-i — Serve per impostare l'interfaccia di rete per i pacchetti in ingresso (per esempio eth0 o ppp0), da utilizzare con una particolare regola. Con iptables, questo parametro opzionale pu� essere utilizzato solo per le catene INPUT e FORWARD se si opera nella tabella filter e con la catena PREROUTING se si opera nelle tabelle nat e mangle.
Questo parametro supporta anche le seguenti opzioni speciali:
Punto esclamativo (!) — Inverte la direttiva, ci� significa che ogni interfaccia specificata viene esclusa da questa regola.
Segno pi� (+) — Un carattere wildcard che viene usato per indicare tutte le interfacce che corrispondono a una determinata stringa. Per esempio, il parametro -i eth+ applica questa regola a tutte le interfacce ethernet ma esclude qualsiasi altra interfaccia, per esempio ppp0.
Se utilizzate il parametro -i senza specificare alcuna interfaccia, la regola riguarder� tutte le interfacce.
-j — Salta direttamente su di un target specifico quando un pacchetto soddisfa una certa regola. Target validi da utilizzare dopo l'opzione -j includono le opzioni standard (ACCEPT, DROP, QUEUE e RETURN) e anche opzioni estese reperibili attraverso i moduli caricati per default con il pacchetto RPM iptables di Red Hat Enterprise Linux per esempio, LOG, MARK e REJECT, per citarne alcune. Per maggiori informazioni consultate la pagina man di iptables.
Potete anche indirizzare un pacchetto che soddisfa questa regola ad una catena definita dall'utente al di fuori della catena attuale, questo vi permette di utilizzare altre regole per il controllo di tale pacchetto
Se non viene specificato alcun target, il pacchetto oltrepassa la regola senza che succeda nulla. Tuttavia, il contatore per questa regola sale di una unit�.
-o — Serve per impostare l'interfaccia di rete per i pacchetti in uscita, da utilizzare con un regola. Pu� essere usato solo con le catene OUTPUT e FORWARD se si opera nella tabella filter e con la catena POSTROUTING se si opera nelle tabelle nat e mangle. Le opzioni di questo parametro sono le stesse del parametro relativo all'interfaccia di rete per i pacchetti in ingresso (-i).
-p — Imposta il protocollo IP per la regola, che pu� essere icmp, tcp, udp o all, per coprire ogni possibile protocollo. Inoltre, si possono utilizzare anche altri protocolli meno diffusi, di cui � disponibile un elenco in /etc/protocols. Se non viene specificata questa opzione durante la creazione della regola, l'opzione di default � all.
-s — Imposta l'indirizzo sorgente per un particolare pacchetto, utilizzando la stessa sintassi del parametro di destinazione (-d).
18.3.4. Opzioni di corrispondenza iptables
Diversi protocolli di rete forniscono speciali opzioni di corrispondenza configurabili in modo particolare per corrispondere a un determinato pacchetto che utilizza, appunto, uno di quei protocolli. Tuttavia, bisogna prima specificare il protocollo nel comando iptables, per esempio usando -p tcp<nome-protocollo>, (dove <nome-protocollo> � il protocollo target), per rendere disponibili le opzioni relative a quel protocollo.
18.3.4.1. Protocollo TCP
Le opzioni speciali disponibili per il protocollo TCP (-p tcp) sono:
--dport — definisce la porta di destinazione per il pacchetto. Per configurare questa opzione, potete usare il nome di un servizio di rete (come www o smtp), un numero di porta o una gamma di numeri della porta. Nel file /etc/services potete trovare i nomi e gli alias dei servizi di rete e i numeri della porta utilizzati. Per specificare questa opzione potete usare anche --dport.
Per indicare una specifica gamma di numeri della porta, scrivete i due numeri separati dai due punti (:), per esempio potete specificare -p tcp --dport 3000:3200. La gamma massima consentita � 0:65535.
Potete anche utilizzare il punto esclamativo (!), dopo l'opzione --dport, per far corrispondere tutti i pacchetti che non utilizzano quel servizio di rete o quella porta.
--sport — determina la porta sorgente del pacchetto, utilizzando le stesse opzioni di --dport. Per specificare questa opzione potete usare anche --source-port.
--syn — rende la regola applicabile a tutti i pacchetti TCP adibiti all'apertura di una connessione (pi� noti come pacchetti SYN). Il punto esclamativo (!) posto come flag dopo l'opzione --syn indica che devono essere esaminati tutti pacchetti non SYN.
--tcp-flags — Permette di filtrare i pacchetti TCP con una gamma di bit specifica o flag, impostati per soddisfare una regola. L'opzione --tcp-flags accetta due parametri. Il primo parametro � la maschera, che imposta i flag da esaminare nel pacchetto. Il secondo parametro si riferisce al flag che deve essere impostato per poter corrispondere correttamente.
I flag possono essere:
ACK
FIN
PSH
RST
SYN
URG
ALL
NONE
Per esempio, una regola di iptables contenente l'opzione -p tcp --tcp-flags ACK,FIN,SYN SYN corrisponde solo ai pacchetti TCP in cui � impostato il flag SYN, ma non i flag ACK e FIN.
Il punto esclamativo (!) posto dopo --tcp-flags viene utilizzato per invertire l'effetto dell'opzione di corrispondenza (match)
--tcp-option — cerca la corrispondenza con un particolare pacchetto in cui sono impostate delle opzioni TCP specifiche. Anche in questo caso si pu� invertire l'effetto mediante il punto esclamativo (!).
18.3.4.2. Protocollo UDP
Le opzioni estese disponibili per il protocollo UDP (-p udp) sono:
--dport — Specifica la porta di destinazione del pacchetto UDP, usando il nome del servizio, un numero di porta o una gamma di numeri della porta. L'opzione di corrispondenza --destination-port � sinonimo di --dport.
--sport — Specifica la porta sorgente del pacchetto UDP, utilizzando il nome del servizio, il numero della porta oppure una gamma di numeri.L'opzione di corrispondenza --source-port � sinonimo di--port.
18.3.4.3. Protocollo ICMP
Le seguenti opzioni di corrispondenza sono disponibili per l'Internet Control Message Protocol (ICMP) (-p icmp):
--icmp-type — Imposta il nome o il numero del tipo di ICMP che soddisfa la regola. Potete riprendere un elenco di nomi ICMP validi digitando il comando iptables -p icmp -h.
18.3.4.4. Moduli con opzioni di corrispondenza aggiuntivi
Ulteriori opzioni speciali, si possono reperire attraverso i moduli che si caricano tramite il comando iptables. Per usare uno di questi moduli, dovete caricarlo per nome inserendo l'opzione -m <nome-modulo> (sostituendo <module-name> con il nome del modulo).
Molti di questi moduli sono disponibili per default. Potete persino creare moduli aggiuntivi per ottenere funzionalit� aggiuntive.
Il seguente elenco riporta i moduli pi� comunemente usati:
Il modulo limit — Vi consente di porre un limite al numero di pacchetti che soddisfano una certa regola. Questo risulta particolarmente utile insieme con il target LOG per ridurre la quantit� di pacchetti da esaminare, onde impedire l'arrivo di un'ondata di messaggi di log e un consumo eccessivo di risorse di sistema. Consultare la Sezione 18.3.5 per maggiori informazioni sul target LOG.
Il modulo limit abilita le seguenti opzioni:
--limit — Stabilisce il numero massimo di confronti da effettuare sui pacchetti in un determinato campo a di tempo, specificato da un numero e da una unit� di tempo nel formato <numero>/<tempo>. Per esempio, utilizzando --limit 5/hour indica che in un'ora sono consentiti al massimo 5confronti.
Se il numero e l'unit� di tempo non vengono specificati, il valore predefinito � 3/hour.
--limit-burst — impone un limite al numero di pacchetti che possono soddisfare una determinata regola. Questa opzione va associata all'opzione --limit e pu� essere associata a un numero per impostare il limite sopracitato.
Se non viene specificato alcun numero, soltanto cinque pacchetti potranno soddisfare tale regola.
Il modulo state — Abilita la corrispondenza dello stato.
Il modulo state abilita le seguenti opzioni:
Il modulo --state — prende in considerazione pacchetti con i seguenti stati di connessione:
ESTABLISHED — il pacchetto � associato ad altri pacchetti in una connessione stabilita.
INVALID — il pacchetto non corrisponde ad alcuna connessione conosciuta.
NEW — il pacchetto sta creando una nuova connessione oppure fa parte di una connessione bidirezionale non vista in precedenza.
RELATED — il pacchetto sta creando una nuova connessione in qualche modo legata a una connessione esistente.
Questi stati di connessione possono essere combinati tra loro e usati in contemporanea. Occorre scriverli separati da una virgola, come in questo esempio: -m state --state INVALID,NEW.
Il modulo mac — Abilita la corrispondenza dell'indirizzo dell'hardware MAC.
Il modulo mac abilita la seguente opzione:
--mac-source — � il corrispondente di un indirizzo MAC della scheda dell'interfaccia di rete che ha inviato il pacchetto. Per escludere un indirizzo MAC da una regola, posizionare un punto esclamativo (!) dopo l'opzione --mac-source.
Per conoscere le altre opzioni aggiuntive reperibili attraverso i moduli, consultate la pagina man di iptables.
18.3.5. Opzioni relative ai target
Vi sono molti target attribuibili a un pacchetto dopo che ha soddisfato una determinata regola. Il loro compito � quello di decidere che cosa fare del pacchetto e di svolgere, se necessario, ulteriori operazioni, come per esempio registrare l'azione. Inoltre, ogni catena ha un suo target di default, che entra in gioco nel caso in cui un pacchetto non soddisfi nessuna delle regole in essa contenute o quando nessuna della regole che il pacchetto ha soddisfato specificano un target.
Ecco riportati i target standard:
<catena-definita-dall'utente> — Sostituire <catena-definita-dall'utente> con il nome di una catena all'interno di questa tabella. Questo target invia il pacchetto alla catena del target.
ACCEPT — autorizza il pacchetto a procedere verso la propria destinazione o verso un'altra catena.
DROP — Abbandona il pacchetto, senza informare il richiedente. Il sistema che ha inviato il pacchetto non riceve alcun messaggio di mancata accettazione.
QUEUE — accoda il pacchetto verso lo spazio utente.
RETURN — arresta il controllo del pacchetto mediante le regole della catena corrente. Se un pacchetto con target RETURN soddisfa una regola contenuta in una catena chiamata da un'altra catena, allora viene rimandato alla prima catena, dove la regola riprende il controllo da dove l'aveva lasciato. Se la regola RETURN � utilizzata all'interno di una catena integrata e il pacchetto non pu� tornare alla catena precedente, il target predefinito per la catena corrente decide quale azione intraprendere.
In aggiunta a questi target standard vi sono altri target che si possono utilizzare con delle estensioni chiamate moduli dei target. Per maggiori informazioni in merito a questi ultimi, consultate la Sezione 18.3.4.4.
Vi sono numerose estensioni di moduli del target, molte delle quali si adattano solo a specifiche tabelle o situazioni. Quelli che seguono sono due dei moduli di target pi� diffusi, inclusi per default in Red Hat Enterprise Linux:
LOG — Registra tutti i pacchetti che soddisfano questa regola. Poich� i pacchetti sono registrati dal kernel, il file /etc/syslog.conf determina dove vengono memorizzate queste voci di log (per default, nel file /var/log/messages.
Dopo il target LOG si possono usare varie opzioni per determinare il modo in cui deve avvenire la registrazione:
--log-level — Stabilisce il livello di logging dell'evento.Potete trovare un elenco dei livelli di priorit� nella pagina man syslog.conf.
--log-ip-options — Vengono registrate tutte le opzioni impostate nell'intestazione di un pacchetto IP.
--log-prefix — Antepone una stringa che pu� arrivare fino a 29 caratteri. � utile anche per scrivere filtri per il syslog da usare insieme alla registrazione dei pacchetti.
--log-tcp-options — Vengono registrate tutte le opzioni impostate nell'intestazione di un pacchetto TCP.
--log-tcp-sequence — scrive nel log il numero di sequenza TCP per il pacchetto.
REJECT — Rispedisce un pacchetto di errore al sistema che l'ha inviato, dopodich� abbandona il pacchetto (DROP).
Il target REJECT accetta --reject-with <tipo> (dove <tipo> � il tipo di rigetto) il quale abilita pi� informazioni dettagliate da ritornare al pacchetto di errore. Il messaggio port-unreachable � il default del<tipo> di errore fornito quando non viene usata un altra opzione. Per ottenere un elenco completo delle opzioni <tipo> disponibili, consultate la pagina man di iptables.
Sempre nella pagina man di iptables potete trovare altre estensioni di target, tra cui alcune molto utili per eseguire il masquerading mediante la tabella nat o per alterare i pacchetti mediante la tabella mangle.
18.3.6. Elenco delle opzioni
Il comando elenco di default, iptables -L, fornisce una panoramica di base delle catene di regole correnti della tabella predefinita filter. Altre opzioni consentono di ottenere ulteriori informazioni:
-v — Visualizza output complessi, come per esempio il numero di pacchetti e di byte che hanno attraversato ciascuna catena, il numero di pacchetti e di byte che hanno soddisfatto ciascuna regola e le interfacce disponibili per quella regola.
-x — espande i numeri fino a visualizzare il loro valore esatto. Se il sistema � occupato, il contatore di pacchetti e byte relativo a una certa catena mostra un output abbreviato, ponendo K (per le migliaia), M (per i milioni) o G (per i miliardi) alla fine del numero. Questa opzione impone la visualizzazione completa del numero.
-n — visualizza gli indirizzi IP e i numeri di porta in formato numerico invece che nel formato di default (con hostname e servizio di rete).
--line-numbers — Elenca le regole contenute in ogni catena vicino al loro ordine numerico. Questa opzione � utile se si vuole cancellare una specifica regola in una catena o stabilire in quale posizione della catena inserire una certa regola.