Capiamo ed usiamo Iptables – Parte 1°

Linux Add comments

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.

Condividi il post coi tuoi amici:
  • Print this article!
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • BarraPunto
  • BlinkList
  • blogmarks
  • co.mments
  • E-mail this story to a friend!
  • Fark
  • Fleck
  • FriendFeed
  • Gwar
  • HelloTxt
  • Identi.ca
  • laaik.it
  • LinkaGoGo
  • LinkArena
  • LinkedIn
  • Live
  • MSN Reporter
  • MySpace
  • Netvibes
  • NewsVine
  • Turn this article into a PDF!
  • Ping.fm
  • Reddit
  • Segnalo
  • Slashdot
  • StumbleUpon
  • Technorati
  • Twitter
  • Wikio IT
  • Yahoo! Bookmarks
  • Yigg
  • Blogosphere News
  • DZone

Articoli (forse) correlati:

  1. Capiamo ed usiamo Iptables – Parte 2°
  2. Come filtrare a livello 7 con iptables
  3. Bloccare IP di determinati paesi via IPtables
  4. usiamo la ram come disco rigido
  5. Mophant: Usiamo un solo client per bittorrent e edonkey

8 Responses to “Capiamo ed usiamo Iptables – Parte 1°”

  1. Davide T. Says:

    Io sarei partito da un Io sarei partito da un livello più basso per la prima parte di questa lunga narrazione. Cioè io che da poco sto iniziando a seguire un corso di Reti di Telecomunicazioni qualcosa l’ho afferrata( ancora in dettaglio non siamo però arrivati al Livello 2 e 3 dello standard OSI), ma chi non è del settore o comunque non mastica di questi concetti?
    Comunque davvero ottima iniziativa, condividere il proprio sapere su certi argomenti è il massimo che possa accadere nella blogosfera ;)

  2. M0rF3uS Says:

    mmm livello più basso mmm livello più basso ancora? tipo? Credo che il livello più basso sia la spiegazione del tcp/ip :? sarebbe troppo prolissa la cosa poi….

  3. Davide T. Says:

    No ma la spiegazione va No ma la spiegazione va benissimo, certo per un utente che sa già il fatto suo in questo campo.

  4. M0rF3uS Says:

    dammi un suggerimento no? dammi un suggerimento no? cosa manca

  5. Davide T. Says:

    No attenzione non manca No attenzione non manca nulla, anzi, sei completissimo nell’esposizione da un punto di vista prettamente “tecnico”. Ma forse c’è quel troppo di tecnico che fa entrare un lettore che non c’ha mai avuto a fare con queste cose nel pallone totale, tanto che alla fine del post potrebbe pensare( provo a immedesimarmi) “eh si allora? non c’ho capito una mazza!” e si perde le prossime puntate su un argomento, per me personalmente, interessante. Spero di essermi spiegato bene ;)

  6. M0rF3uS Says:

    mmm si….hai ragione non mmm si….hai ragione non sono abituato ad esprimermi “terra terra” è un difetto che mi ha fatto notare più di una persona :O

  7. M0rF3uS Says:

    aggiungo una nota va… aggiungo una nota va…

  8. Davide T. Says:

    Non è un dono di tutti Non è un dono di tutti purtroppo ;)

Leave a Reply

 

CSS XHTML