Capiamo ed usiamo Iptables – Parte 1°
Con oggi parte una delle mie solite guide per principianti del mondo GNU/Linux, questa volta vedremo cosa è e cosa possiamo fare con iptables. Non sono un guru di iptables, essendo sempre abituato a lavorare con appliance dedicati, però noto che nonostante le milioni di guide presenti su internet si presentano sempre utenti (come il nostro amico NeOs) che vogliono fare determintate cose con le loro macchine, ma non hanno la competenza necessaria per farlo, quindi ho deciso di dare il mio contributo condividendo quanto so con voi…

chi ha già seguito i miei tutorial sa che deve avere pazienza, in quanto mi piace partire da un preambolo di carattere storico/teorico per cercare di rendere più chiaro possibile tutta la serie di tutorial.
Attenzione: come giustamente Davide nei commenti mi fa notare, il post potrebbe risultare a qualcuno troppo tecnico, se cosi fosse siete invitati a usare forum o commenti per qualsiasi domanda.
Cosa è iptables:
E’ oramai uso comune definire iptables come il firewall di linux, questo è sbagliato perchè iptables non è il firewall, bensi un interfaccia di configurazione a linea di comando del vero e proprio firewall di linux, che è netfilter.
Netfilter è un componente del kernel linux, che consente l’analisi e la manipolazione dei pacchetti di dati che passano all’interno di una macchina, coinvolta nel traffico all’interno di una rete.
Con netfilter possiamo realizzare un firewall di funzionalità avanzata, con filtraggio stateful sui pacchetti, configurazioni complesse per il NAT, o la configurazione dei pacchetti per la rotazione del traffico.
Iptables non è esistito da sempre, anzi è abbastanza recente, in origine veniva usato ipfwadmn, introdotto con i kernel della versione 2.0; in seguito ci fu ipchains, introdotto con i kernel della versione 2,2; ed infine nel 2000, con i kernel versione 2,4 e 2,6 (e successivi), ci fu l’introduzione di iptables.
Iptables, come già detto, è il programma che ci consente di fare tutto questo tramite netfilter, dato l’uso comune da ora in poi con “iptables” verrà intesa l’intera infrastruttura netfilter+iptables.
netfilter: i principi base di un firewall
In una rete, quindi anche in internet, i dati che spediamo/riceviamo circolano sotto forma di pacchetti[fn]più precisamente frame, più piccoli dei pacchetti, ma anche qui la convenzione comune è quella di chiamarli pacchetti[/fn] di dimensioni fisse; con netfilter (e con un firewall in generale) è possibile intercettare tali pacchetti e gestirli come meglio crediamo, controllando il contenuto di ogni pacchetto, e comportarsi in un modo piuttosto che in un altro, a seconda delle nostre esigenze. Ad esempio è possibile negare che un pacchetto proveniente da un determinato indirizzo ip, entri nella nostra rete locale, o vada da un pc ad un altro della stessa rete. Tale ragionamento si può fare anche per le porte o per i protocolli usati.
Iptables è organizzato in catene ed in tabelle, nelle catene viene definito come i pacchetti vengono trattati durante le varie fasi delle connessioni; le tabelle oltre che raggruppare le catene, raggruppano anche i tipi diversi di operazioni che è possibile compiere sui pacchetti.
Le catene:
Le catene sono delle ACL, formate generalmente da regole con due parti principali: le caratteristiche che un pacchetto deve avere per far innescare la regola (in gergo “far matchare una regola“), e le azioni che devono essere messe in atto quando la regola viene innescata (si dice l’obiettivo della regola). Oltre a questo viene definita alle tabelle una politica di default, che determina come netfilter deve agire quando il pacchetto non fa matchare nessuna delle catene contenute; questa viene appunto chiamata catena di default (o meglio politica di default).
In generale le regole di base vengono definite con i campi IPsorgente -> IPdestinazione:porta, a volte però può essere necessario collegare una catena ad un altra, senza un limite di concatenamento fra catene, e quindi il pacchetto arriverà a destinazione solo se rispetterà tutte le regole concatenate.
Le tabelle:
Ci sono 3 tipi di tabelle predefinite, con delle catene di dafault che consentono di lasciar passare tutto i pacchetti che attraversano la macchina. L’utente può creare altre tabelle/catene o cancellarne.
- Tabella di filtro
è la tabella principale, detemina il filtraggio dei pacchetti, decide quindi quali pacchetti devono passare e quali no, le catene di default sono:
- INPUT: Riguarda tutti i pacchetti che entrano nella macchina.
- OUTPUT: Riguarda tutti i pacchetti generati dalla macchina.
- FORWARD: Tutti i pacchetti che attraversano la macchina 1 ma sono destinati alla macchina 2, e non sono stati generati dalla macchina 1, con questa catena possiamo definire l’instradamento del traffico tra interfaccie diverse della macchina.
- Tabella NAT
con questa tabella possiamo manipolare i pacchetti modificandone gli indirizzi sorgente/destinazione e le porte, di modo che tutti i pacchetti di quella connessione subiscano il medesimo trattamento, utile per far condividere ad esempio un unica connessione internet tra tutti i pc della nostra rete interna. Le catene contenute sono:
- PREROUTING: questa è la prima catena che i pacchetti incontrano (se presente), quando attraversano la macchina, viene utilizzata per modificarne l’indirizzo destinatario (effettuare DNAT[fn]Destination NATting[/fn] in gergo).
- POSTROUTING: Simile alla catena di prerouting solo che viene utilizzata per modificare l’indirizzo sorgente dei pacchetti (effettuara SNAT[fn]Source NATting[/fn] in gergo)
- OUTPUT: Con questa catena possiamo fare DNAT sui pacchetti generati dalla macchina.
- Tabella MANGLE
con questa tabella possiamo modificare le opzioni dei pacchetti (i cosiddetti flag[fn]è possibile trovare una breve e semplice spiegazione di cosa sono i flag dei pacchetti qui. (in inglese)[/fn] ), è possibile ad esempio stabilire policy di qualità del servizio. Questa è la tabella più completa perchè contiene tutte le catene predefinite:
- PREROUTING: analizza tutti i pacchetti in entrata del sistema, prima ancora di definire se il pacchetto deve essere instradato o se è destinato alla macchina stessa.
- INPUT: analizza tutti i pacchetti in entrata destinati alla macchina
- FORWARD: analizza l’instradamento dei pacchetti di cui la macchina non ne è ne destinazione ne sorgente.
- OUTPUT: analizza tutti i pacchetti generati dalla macchina.
- POSTROUTING: analizza tutti i pacchetti che escono dalla macchina, quindi sia quelli in OUTPUT che in FORWARD.
Per oggi è tutto, la prossima volta vedremo come usare le regole, quali obiettivi possiamo definire e come possiamo analizzare lo stato delle connessioni che vengono instaurate da/verso la macchina.
Articoli (forse) correlati:
- Capiamo ed usiamo Iptables – Parte 2°
Eccoci stasera con la seconda parte della nostra guida su IpTables. Oggi vediamo i parametri più comuni che si utilizzano... - Come filtrare a livello 7 con iptables
Uno dei problemi maggiori che i sysadmin si trovano ad affrontare è quello di instaurare un ottimo filtraggio per la... - Bloccare IP di determinati paesi via IPtables
Siete stanchi dei continui attacchi al vostro server? Siete riusciti a capire che gli ip vengono generalmente sempre dallo... - Mophant: Usiamo un solo client per bittorrent e edonkey
Se anche tu fai parte della schiera degli "scaricatori assassini" leggi attentamente quello che sta per seguire, ti semplificherà la... - usiamo la ram come disco rigido
Tmpfs è un tipo particolare di filesystem unix che ci consente di creare device a blocchi temporanei. Con...
-
Davide T.
-
M0rF3uS
-
M0rF3uS
-
Davide T.
-
M0rF3uS
-
Davide T.
-
M0rF3uS
-
Davide T.







