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…

Capiamo ed usiamo Iptables   Parte 1°

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.


Altri articoli che potrebbero interessarti

Come filtrare a livello 7 con iptables Uno dei problemi maggiori che i sysadmin si trovano ad affrontare è quello di instaurare un ottimo filtraggio...
Bloccare IP di determinati paesi via IPtables Forse non tutti sanno che i vari indirizzi ip non vengono assegnati a caso, ma ogni paese, ogni stato,...
Migrazione effettuata più altre chicche Updated: Come non detto altre perle in fondo all'articolo... In molti mi hanno fatto notare come...
Aperte posizioni per redattori Il Portalinux è alla continua ricerca di collaboratori che siano disposti a scrivere articoli e/o guide...
Rilasciato il firmware open source per schede wi-fi Broadcom Saranno felici gli utenti Linux di schede wireless di casa Broadcom, di leggere questa notizia; il 9...

About the Author

M0rF3uS al secolo Alex è un ggiovine 25enne appassionato di informatica e linux. Lavora come Network and System Administrator e nel tempo libero gioca un pò con la sua fotocamera (Canon EOS 1000D) riuscendo a volte, per sbaglio, a fare qualche scatto decente. Completano il corredo, degli hobbies "vorrei ma non posso" ossia l'astronomia e l'astronautica....si è uno di quelli che da grande vorrebbe fare l'astronauta (povero coglione vero?).