17.3. Opzioni utilizzate all'interno dei comandi iptables

Le regole per il filtraggio dei pacchetti vengono adottate usando il comando iptables. Quando si usa il comando iptables occorre utilizzare i seguenti aspetti del pacchetto come criterio di base:

Per maggiori informazioni su opzioni specifiche le quali indirizzano questi apetti, consultare la Sezione 17.3.4 e la Sezione 17.3.5.

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 resto di questa sezione spiega le opzioni usate più comunemente per il comando iptables.

17.3.1. Struttura delle opzioni di iptables

Molti comandi di iptables presentano la struttura seguente:

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

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 che richiedono ulteriori gruppi di opzioni.

Per visualizzare un elenco completo delle strutture del comando iptables, digitate iptables -h.

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

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

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

17.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 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 (!), 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 bit specifici o flag, impostati per corrispondere con 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 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 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 (!).

17.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 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 17.3.4.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 17.3.4.1. option.

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

17.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 17.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 campoa 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 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.

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

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

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.

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