16.3. Opzioni utilizzate nei comandi di iptables

Per predisporre le regole che consentono al kernel di filtrare i pacchetti, bisogna eseguire il comando iptables. Se si usa il comando iptables occorre specificare le opzioni seguenti:

Percé una regola iptables sia valida, le opzioni a essa applicate devono essere raggruppate in modo logico, in base allo scopo e alle condizioni delle regole in generale.

16.3.1. Tabelle

Un aspetto davvero importante di iptables è la possibilità di utilizzare molteplici tabelle per decidere del destino di un determinato pacchetto, in base al tipo di pacchetto preso in considerazione e a seconda di cosa se ne intende fare. Grazie alla natura di iptables, si possono creare tabelle specifiche che vengono poi memorizzate nella directory /etc/modules/<versione-kernel>/kernel/net/ipv4/netfilter, dove <versione-kernel> corrisponde al numero della versione del kernel.

La tabella di default, chiamata filter, contiene le catene standard integrate INPUT, OUTPUT e FORWARD, che sono pressoche´ identiche alle catene standard in uso con ipchains. iptables, però, per default contiene altre due tabelle che si occupano di specifici processi del filtraggio dei pacchetti. La tabella nat può essere usata per modificare gli indirizzi di provenienza e di destinazione registrati nei pacchetti; la tabella mangle consente di effettuare manipolazioni particolari sui pacchetti.

Ogni tabella contiene catene predefinite che svolgono le operazioni necessarie a seconda dello scopo prefisso; tuttavia, si possono facilmente configurare nuove catene all'interno di ciascuna tabella.

16.3.2. Struttura

Molti comandi di iptables presentano la struttura seguente:

iptables [-t <table-name>] <command> <chain-name> <parameter-1> \
         <option-1> <parameter-n> <option-n>

In questo esempio, 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> è il centro del comando e ordina un'azione specifica da svolgere, come per esempio aggiungere o cancellare un regola da una determinata catena, la quale viene specificata dall'opzione <nome-catena>. Questa opzione è seguita da coppie di parametri e opzioni che determinano come funziona la regola e cosa accade quando un pacchetto la soddisfa.

Per quanto riguarda la struttura di un comando iptables, è importante ricordare che, diversamente dalla maggior parte degli altri comandi, la sua lunghezza e la sua complessità 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 di iptables, è utile tener presente che l'impiego di alcuni parametri e di alcune opzioni può comportare la necessità di utilizzare ulteriori parametri e opzioni per specificare più dettagliatamente la precedente richiesta di opzione. Per creare una regola che sia valida, dovete continuare in questo modo finché non avrete soddisfatto tutti i parametri e tutte le opzioni che richiedono ulteriori gruppi di opzioni.

Per vedere un elenco esauriente delle strutture del comando iptables, digitate iptables -h.

16.3.3. Comandi

I comandi indicano a iptables di svolgere un'azione specifica. Per ogni stringa di comando di iptables è consentito un solo comando. Fatta eccezione per il comando help, tutti i comandi sono scritti con i caratteri maiuscoli.

I comandi di iptables sono i seguenti:

16.3.4. Parametri

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.

16.3.5. Opzioni estese

Diversi protocolli di rete forniscono speciali opzioni configurabili in modi particolari per corrispondere a un determinato pacchetto che utilizza, appunto, uno di quei protocolli. Naturalmente, 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.

16.3.5.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 un range di numeri di porta. Nel file /etc/services potete trovare i nomi e gli alias dei servizi di rete e i numeri di porta che utilizzano. Per specificare questa opzione potete usare anche --dport.

    Per indicare una specifica gamma di numeri di 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 (!), scrivendolo dopo l'opzione --dport, per indicare a iptables di prendere in considerazione 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 in base a particolari bit o flag, impostati per corrispondere con una regola. L'opzione --tcp-flags accetta due parametri. Il primo parametro è la maschera, che indica i flag da esaminare per quel pacchetto. Il secondo parametro si riferisce ai flag che devono essere impostate per poter corrispondere.

    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 prende in considerazione solo i 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 (!).

16.3.5.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 di un servizio, un numero di porta o un range di numeri di porta. L'opzione di corrispondenza --destination-port é sinonimo di --dport. Per conoscere i vari modi di impiego relativi all'opzione --dport, leggete la Sezione 16.3.5.1.

  • --sport — Specifica la porta sorgente del pacchetto UDP, utilizzando il nome di un servizio, un numero di porta o un range di numeri di porta. In sostituzione, potete anche usare l'opzione --source-port. Per conoscere i vari modi di impiego relativi all'opzione --sport, leggete la la Sezione 16.3.5.1. option.

16.3.5.3. Protocollo ICMP

Queste opzioni sono disponibili per l'Internet Control Message Protocol (ICMP) (-p icmp):

  • --icmp-type — determina il nome o il numero del tipo di ICMP che soddisfa la regola. Potete visualizzare un elenco di nomi validi per i tipi di ICMP digitando il comando iptables -p icmp -h.

16.3.5.4. Moduli con opzioni estese aggiuntive

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 da voi dei moduli aggiuntivi per ottenere altre opzioni.

Poichè i moduli esistenti sono numerosi, andiamo a presentarvi solo quelli più famosi e diffusi.

  • Il modulo limit vi consente di porre un limite al numero di pacchetti che soddisfano una certa regola. Questo risulta particolarmente utile nelle registrazioni 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.

    Il modulo limit abilita le seguenti opzioni:

    • --limit — stabilisce il numero massimo di confronti da effettuare sui pacchetti in un determinato lasso di tempo, specificato da un numero e da un'unità di tempo nel formato <numero>/<tempo>. Per esempio, --limit 5/hour indica che in un'ora sono consentiti al massimo cinque confronti.

      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 la 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.

16.3.6. 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:

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, leggete la Sezione 16.3.5.4.

Vi sono numerose estensioni di moduli di 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 Linux:

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.

16.3.7. 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: