Sei sulla pagina 1di 21

Reti

Reti
Il Livello di Trasporto

Copyright 2006-2009 by Andrea Diamantini <adjam7@gmail.com> Quest'opera stata rilasciata sotto la licenza Creative Commons Attribuzione-Non commerciale-Condividi allo stesso modo 2.5 Italia. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-ncsa/2.5/it/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA

Reti

Il Livello di Trasporto

Il livello di trasporto gestisce la conversazione tra mittente e destinatario, nascondendo tutti i dettagli relativi al trasporto delle informazioni lungo la rete. Di solito le implementazioni del livello quattro sono squisitamente software, evidenziando come il livello sia un trat d'union fra i bassi livelli del modello OSI, orientati alla gestione del canale, dell'hardware e dei dispositivi e i livelli hardware, orientati alla gestione di tutti i software e protocolli di rete. Altro dato importante da notare e come i dati relativi a questo livello siano gestiti solo dagli elaboratori e semplicemente trasportati lungo i router e il canale. Questo significa che protocolli di livello 1, 2 , 3 anche molto diversi fra loro, per via del canale da percorrere, dellhardware da utilizzare e della particolare configurazione delle reti in cui sono connessi mittente e destinatario, portano comunque gli stessi dati dal livello 4 in poi, permettendo a questo di offrire una serie di primitive standard verso i livelli superiori. Il livello di trasporto, analogamente a quello di rete, offre servizi connessi o non connessi e affidabili o non affidabili e gestisce i dati separandoli in unit chiamate TPDU (Transport Data Protocol Unit). Nel caso di servizio non connesso e non affidabile, il livello si preoccupa solo di togliere lintestazione dalle TDPU in arrivo, ricostruire il dato originale e consegnarlo al programma che lo richiedeva, come scritto nelle intestazioni. Non c controllo sulla perdita o mancanza di dati. Nel caso di servizi di trasporto connessi e affidabili, il livello garantisce che i pacchetti arrivino tutti e in modo ordinato e la connessione garantisce che eventuali pacchetti persi da un livello di rete non affidabile possano essere richiesti di nuovo.

Primitive del livello di trasporto


Il livello di trasporto fornisce assistenza ai livelli superiori per aprire, utilizzare e chiudere una connessione. Le applicazioni dunque devono solo richiamare le primitive del livello di trasporto, senza preoccuparsi di problemi come la ritrasmissione di pacchetti o la gestione di una connessione. Le primitive essenziali sono:

Reti

LISTEN CONNECT DISCONNECT SEND RECEIVE

Permette ad una applicazione server di mettersi in ascolto su una porta specificata per aspettare connessioni dai client Permette ad una applicazione client di stabilire una connessione con un socket prefissato. Permette ad una applicazione client o server di chiudere una connessione. Permette ad una applicazione client o server di inviare dati Permette ad una applicazione client o server di ricevere dati

La creazione di una connessione utilizza il metodo three way handshake ideato per ovviare alla possibilit di dover gestire pi connessioni contemporaneamente. Il client invia una richiesta di connessione (passo 1) contenente un identificativo A. Se il server riceve questa notifica, questi risponde con un ack (passo 2) contenente una conferma per A, sotto forma di un nuovo identificativo B. infine il mittente pu attivare la connessione inviando una sequenza (passo 3) contenente gli identificativi AB.

Questo scambio di informazioni permette a client e server di eliminare problemi derivanti da richieste multiple sovrapposte e in generale protegge la rete dallinvio di pacchetti per connessioni inesistenti. La chiusura di una connessione pu avvenire in modo simmetrico, asimmetrico oppure concordato. La chiusura simmetrica implica che ogni stazione chiude la connessione in una direzione, quindi il traffico tra le due si interrompe quando vengono lanciate due disconnect, una dal server e una dal client. La

Reti

chiusura asimmetrica implica che ogni stazione pu chiudere la connessione quando vuole, un po come in una telefonata. La chiusura concordata utilizza il metodo three way handshake per concordare una chiusura: una stazione manda un segnale di chiusura e fa partire un timer (passo 1); la seconda quando riceve il segnale invia una conferma e chiude la connessione (passo 2). Se la conferma arriva a destinazione, la prima stazione chiude la connessione, altrimenti lo fa comunque allo scadere del tempo cronometrato dal timer. Analogamente dopo ogni pacchetto inviato le stazioni fanno partire un timer oltre il quale chiudere la connessione se non si riceve o invia nulla nel frattempo. Questa strategia viene messa in atto per evitare di tenere in piedi connessioni eterne fra stazioni che non trasmettono mai. Per mantenere in piedi le connessioni quindi, il protocollo TCP invia pacchetti vuoti (dummy) ad intervalli regolari.

Qualit del Servizio


QoS (Quality of Service) e un servizio aggiuntivo introdotto nel livello di trasporto che permette di specificare appunto la qualit del servizio richiesta. L'utilit di siffatto servizio si nota soprattutto nelle reti medio/grandi, dove c' un pi che discreto traffico di dati e alcune connessioni necessitano di una qualit comunque elevata. La qualit in evidenza la velocit di trasferimento dei dati. Sostanzialmente si pu specificare un range di valori entro il quale definire la qualit del servizio per differenziare a dovere le diverse necessit. Ad esempio, se un server di posta consegna una mail con mezzo secondo di ritardo (ma anche con mezzo minuto) nessuno se ne accorge o ci fa caso: questa trasmissione pu accontentarsi del valore pi basso della scala. Se un applicazione di video streaming trasmette ogni frame video con un ritardo di mezzo secondo, allora s che la gente se ne accorge: una tale trasmissione dovr richiedere il pi alto livello di qualit del servizio! Le stazioni trasmissive negoziano allinizio per concordare i parametri da utilizzare e se non si raggiunge un accordo la connessione pu anche essere rifiutata. Tipici parametri sono: ritardo massimo per la creazione della connessione numero di byte trasferiti al secondo (throughput) velocit di consegna tasso di errore ammesso

Reti tipo di protezione contro le intercettazioni dati priorit della connessione probabilit che la connessione venga interrotta in caso di congestione

Indirizzamenti di Trasporto
Il protocollo di trasporto per suddividere il traffico in entrata e uscita fra le varie applicazioni che ne richiedono utilizza il meccanismo delle porte logiche. Le porte sono il mezzo essenziale che permette ai protocolli di trasporto di gestire flussi multipli di dati attraverso una unica connessione fisica alla rete. Per fare un paragone con la vita reale immaginiamo di spedire una lettera ad un amico. Se il destinatario vivesse in una abitazione indipendente e ne fosse lunico inquilino, sulla busta sarebbe sufficiente indicare il suo indirizzo. Questa situazione per piuttosto inusuale in quanto, pi probabilmente, egli vivr in un palazzo con altri condomini oppure condivider labitazione con altri parenti. Ognuno di questi pu ricevere posta al medesimo indirizzo e quindi per individuare univocamente il destinatario sar necessario specificare anche il suo nome completo. Allo stesso modo indicheremo sulla busta le informazioni riguardanti il mittente per poter ricevere una risposta. Una cosa analoga avviene per le comunicazioni in rete attraverso la suite TCP/IP. Ogni macchina sar individuata sulla rete da un indirizzo IP ma poich molteplici possono essere i servizi offerti dal sistema e molte le connessioni contemporanee e necessario un metodo per separare i singoli flussi di dati ed indirizzarli verso il corretto programma di gestione. A chi non capitato per esempio di navigare e contemporaneamente di scaricare la posta elettronica o usare un programma p2p? Come fa il sistema a riconoscere a chi sono diretti i dati in arrivo? Il problema viene risolto attraverso le porte che, in un paragone con lesempio precedente, fanno le veci del nome del mittente e del destinatario. flussi di dati distinti allinterno della stessa macchina sono caratterizzati da porte diverse. Una connessione tra due computer viene quindi univocamente identificata dalle coppie: 1. indirizzo IP : porta del mittente 2. indirizzo IP : porta del destinatario che rappresentano i dati indispensabili per la creazione di un socket, il punto di accesso software alle comunicazioni.

Reti

Protocolli di Trasporto nella suite TCP/IP

La suite di protocolli TCP/IP offre a livello di trasporto due protocolli: TCP (transmission Control Protocol) connesso e affidabile UDP (User Datagram Protocol) non connesso e non affidabile

Ognuno di questi fornisce il proprio servizio in maniera analoga per quanto riguarda linterfaccia verso i livelli superiori, utilizzando un identificatore a 16 bit (numeri da 0 a 65535). Le porte possono essere assegnate al protocollo TCP o al protocollo UDP. Questo fa si che possano esistere in totale 65.536 x 2 = 131.072 porte diverse. In linea di principio i numeri di porta potrebbero essere scelti arbitrariamente durante la connessione tra due computer ma, come vedremo dallanalisi che segue, la cosa si rivela decisamente poco pratica. Ogni comunicazione sulla rete presume che inizialmente una delle due macchine coinvolte nello scambio di dati non faccia altro che attendere un contatto dallesterno. Questa macchina viene indicata con il nome di server. Un sistema che contatta il server viene invece definito client. Sar sempre il client quindi a fare il primo passo per instaurare una connessione. Se un computer collegato ad un rete desidera comunicare con un altro sistema deve necessariamente sapere lindirizzo completo della macchina remota. In questo caso quindi il client deve essere a conoscenza sia dell'IP sia della porta su cui il server si aspetta di ricevere i dati relativi al servizio di interesse. Se il server scegliesse la porta in modo casuale nessuno saprebbe come raggiungerlo. Per questo motivo nasce lesigenza di standardizzare e rendere pubblici i numeri di porta relativi ai pi comuni servizi disponibili (server) su internet e sulle reti in genere. In questo modo un client che volesse accedere ad un qualsiasi server HTTP saprebbe a priori di doversi collegare alla porta TCP numero 80. Un server di posta SMTP sar sempre raggiungibile sulla sua porta TCP 25 cos come un server FTP user la TCP 21 e un DNS la porta UDP 53. Contrariamente al caso precedente il client non ha mai lesigenza di rendere pubblico il suo indirizzo completo prima della connessione perch questo verr automaticamente comunicato al server nel momento in cui verr contattato. In questo caso quindi il numero di porta del client pu essere scelto arbitrariamente dal sistema tra quelli al momento disponibili. LInternet Assigned Numbers Authority (IANA) lente che ha tra i suoi scopi la standardizzazione delle porte e laggiornamento costante di un documento, chiamato ports-number, contenente lelenco

Reti

dei servizi registrati e delle relative porte utilizzate. A questo scopo, nel suddetto documento, lo spazio delle 65536 porte UDP e TCP stato suddiviso in tre parti: 1. Well Known Ports (da 0 a 1023) Sono porte assegnate univocamente e sono riservate ai servizi server standard di cui si parlato in precedenza. I client non dovrebbero mai usare queste porte. 2. Registered Ports (da 1024 a 49151) Lutilizzo di questo insieme di porte generalmente libero nonostante contenga dei servizi registrati. Non esistono vincoli restrittivi a riguardo tanto che tutti i client usano normalmente le porte a partire dalla numero 1024 per collegarsi ad un sistema remoto. 3. Dynamic and/or Private Ports (da 49152 a 65535) Nessun servizio e registrato in questarea. Il suo utilizzo e assolutamente libero. Le Well Known Ports sono quindi porte riservate unicamente ai server. Le rimanenti porte (102465535), spesso chiamate porte alte, possono essere usate liberamente sia dai client che dai server senza particolari restrizioni. Di seguito si indicano alcune delle Well Known Ports pi comuni. Lelenco completo pu essere reperito nel documento pubblicato da IANA al seguente indirizzo web (http://www.iana.org/assignments/port-numbers).

Porta logica 7 21/tcp 22/tcp 23/tcp 25/tcp 42 53 80/tcp 110/tcp 143/tcp 161 389/tcp 443/tcp ECHO FTP (file transfer protocol) SSH (Secure SHell) TELNET

Protocollo di rete

SMTP (Simple Mail Transfer Protocol) WINS (Windows Internet Naming Service) DNS (Domain Name Service) HTTP (Hyper Textual Transfer protocol) POP3 (Post Office Protocol, v3) IMAP (Internet Message Access protocol) SNMP (Simple Network Management Protocol) LDAP (Lightweight Directory Access Protocol) HTTPS (Secure HTTP)

Reti

Il protocollo TCP
TCP fornisce un metodo per garantire una consegna sicura e ordinata delle informazioni. TCP utilizza dunque metodi connessi e affidabili e stabilisce connessioni punto a punto fra mittente e destinatario. Questo implica dunque anche limpossibilit di supportare broadcasting e multicasting. TCP riceve un flusso di dati da una applicazione e lo divide in TPDU grandi solitamente 1500 byte, ma comunque non pi di 64 Kb e li passa poi al livello di rete, di cui utilizza sempre il protocollo IP. Lintestazione del pacchetto TCP e di 20 byte, organizzati nel modo seguente:

Porta mittente (2 byte) Posizione primo byte dati (4 byte) Posizione prossimo byte dati (4 byte) Lunghezza header (4bit) (vuoto) (6 bit) CRC (2 byte) flag di stato (6 bit)

Porta destinatario (2 byte)

Window size (2 byte) Urgent Pointer (2 byte)

Dove i campi assumono il seguente significato: la porta mittente e destinatario sono le porte logiche TCP del mittente e del destinatario La posizione primo byte dati indica il numero di sequenza del primo byte di dati del segmento (i byte nel flusso TCP sono numerati) La posizione prossimo byte dati indica il numero di sequenza del prossimo byte atteso e quindi conferma indirettamente lavvenuta ricezione dei precedenti La lunghezza header indica lo spiazzamento dei dati allinterno del segmento Lo spazio bianco indica 6 bit non utilizzati, ma inclusi per mantenere coerenza col numero di byte da inviare I 6 flag di stato (uno per bit) rappresentano nellordine: 1. URG: indica che ci sono dati urgenti, cio dati da consegnare per primi. Sono quelli indicati dallurgent pointer. 2. ACK: indica che il segmento contiene una conferma per i dati ricevuti.

Reti 3. PSH: push, cio consegna rapida senza caricamento del buffer 4. RST: segnalazione di problema 5. SYN: indica i frame di apertura di una connessione 6. fiN: indica i frame di chiusura di una connessione

La Window Size indica la dimensione della finestra di invio nel caso si utilizzi un protocollo sliding windows (livello data link) per la gestione del flusso. Il CRC e calcolato su una pseudo-intestazione costituita dallindirizzo IP mittente, indirizzo IP destinatario, 8 zeri, 8 bit che indicano il protocollo e 16 bit con la lunghezza del segmento TCP. Urgent Pointer un puntatore (offset) ad una locazione del segmento che contiene dati urgenti.

Il protocollo UDP
UDP fornisce un metodo per spedire dati senza dover stabilire una connessione con il destinatario. Risulta quindi un protocollo molto veloce e in grado anche di effettuare trasferimenti broadcast e multicast, non disponibili con TCP. Lintestazione dei datagrammi UDP ha il seguente formato:

Porta mittente (2 byte)

Porta destinatario (2 byte)

Lunghezza segmento (2 byte)

CRC (2 byte)

Reti

10

Esercizi
Esercizio 1 Qual lo scopo del livello di trasporto? Quale tipo di servizio fornisce? Esercizio 2 Qual il significato dellindirizzo a livello di trasporto? Esercizio 3 Quali sono i problemi di gestione (apertura e chiusura) di una connessione a livello quattro e come vengono risolti

Reti

11

In laboratorio
In questa sezione troviamo descritte alcuni dei software pi importanti che lavorano sostanzialmente (ma non solo) al livello di trasporto. Iniziare a conoscerli sar indispensabile per iniziare a lavorare con i protocolli di trasporto e comprenderne il funzionamento.

Netstat
Il comando netstat permette di esaminare le connessioni attive e di visualizzare statistiche relative a connessioni di rete, tabelle di routing, interfacce di rete, masquerading e multicasting. Vediamo le principali opzioni: -i -s -v -n -c -p -l -a -t -u visualizza una tabella di utilizzo delle interfacce di rete statistiche sommarie divise per protocollo output prolisso indirizzi numerici senza risoluzione dei nomi (pi veloce) aggiorna la netstat ogni secondo visualizza PID e nome di ogni programma a cui ogni socket appartiene Visualizza tutti i socket in modalit listening visualizza tutti i socket (listening e non listening) visualizza i dati relativi al protocollo TCP visualizza i dati relativi al protocollo UDP

Esercizi su Netstat
1. Visualizzare tutti i socket riguardanti connessioni UDP 2. Elencare i nomi dei processi server attualmente in esecuzione 3. Avviare un server (ad esempio apache) e elencare i diversi stati in cui il processo si trova all'avvio 4. Elencare tutte le connessioni di rete. 5. Elencare tutti i dispositivi attualmente connessi

Reti

12

Nmap
Nmap un tool di rete open source per net exploration e auditing di sicurezza, progettato per controllare rapidamente grosse reti. Nmap utilizza pacchetti IP particolari per determinare quali hosts sono disponibili in rete, che servizi offrono, che sistema operativo utilizzano e decine di altre caratteristiche. Le due scansioni di base usate in nmap sono quelle sulla TCP connect (opzione -sT) e sul SYN scan (opzione -sS), opzione conosciuta come strada mezza aperta o stealth scanning. La prima opzione controlla le porte tramite connect(): il risultato sar l'elenco delle porte che la accettano (open) e di quelle che la rifiutano (closed). Anche se questa scansione molto redditizia, anche pericolosa nel senso che la macchina attaccata molto probabilmente logger l'IP delle connessioni. Per questa ragione stato implementato lo stealth scanning (Per chi non ha ancora capito come funziona, ripassare il 3-way handshake). Sostanzialmente si inizia una connessione senza realmente terminarla (invia un RST invece). Questo generer una risposta corrispondente ad un SYN/ACK per le porte aperte, un RST per quelle chiuse e nessuna risposta per quelle filtrate (filtered). Queste ultime necessitano ulteriori studi per capire se il filtro un IDS, un firewall o chiss cos'altro. La scansione sulle porte UDP aperte (opzione -sU) particolarmente efficace sui sistemi Windows. Questa scansione, pur non essendo utile per veri e propri attacchi, in grado di rivelare servizi e trojans in esecuzione sulla macchina, tipicamente esposti a traffico UDP. Ulteriore tipo di scansione il cosiddetto Ping Scan (opzione -sP). Questa scansione controlla tutti gli host di un range specificato che rispondono a un ping, permettendo di stabilire quali dispositivi sono online. A livello 3 possibile inoltre il cosiddetto IP protocol scan (opzione -sO). Questa scansione determina i protocolli IP supportati dal target. L'idle scanning (opzione -sI) una tecnica avanzata di tipo stealth, che permette di scansionare un target senza inviare pacchetti che contengono traccia dell'origine. Per fare ci, viene creato un host zombie che si finger promotore dell'attacco. Nmap invier pacchetti come se provenissero dall'host zombie e poi studier questo invece del vero target per dedurne le risposte. Questo tipo di scansione pu essere utilizzato anche per individuare eventuali relazioni di fiducia fra host diversi (attraverso firewall che consentono l'accesso solo ad un determinato range di IP). Version Detection (opzione -sV) l'opzione che permette di raccogliere informazioni sui servizi in esecuzione in una macchina e in base a questi determinare la versione e il tipo di OS in esecuzione l. Per una pi completa scansione si pu utilizzare l'opzione -A (OS fingerprinting + version detection). A ognuna delle opzioni precedenti possono essere applicate una o pi delle seguenti per modificarne l'effetto: Verbose (opzione -v). Anche ripetuta. Crea un output prolisso. Debug (opzione -d). Anche ripetuta. Aggiunge all'output informazioni di debug. Logging (opzione -oN fileName). Salva l'output, in forma leggibile, nel file indicato

Reti Fast (opzione -F). Semplifica e velocizza le operazioni di scansione.

13

Esercizi su Nmap
1. 2. 3. 4. 5. Visualizzare l'elenco dei socket in ascolto su una macchina target. Elencare i sistemi operativi (nome e versione) in utilizzo nella rete locale. Elenco delle macchine che hanno attivo un server di posta. Elenco dei servizi attivi sulla rete locale. A coppie, controllare ognuno la macchina dell'altro alla scoperta del maggior numero di informazioni possibili. Analogamente, sulla propria macchina, cercare tracce della scansione in corso.

Reti

14

Wireshark
WireShark un analizzatore di rete molto diffuso e molto potente, appartenente alla classe degli sniffer di rete. Usarlo tuttavia, almeno per operazioni di base o di studio del funzionamento della rete, relativamente semplice. Vedremo qui semplicemente una minima parte delle funzioni pi importanti, come la cattura dei pacchetti, la selezione di questi ultimi per mezzo dei filtri e alcune funzioni che tornano comode soprattutto quando c' una grossa mole di dati. Voglio solo ricordare che penetrare o tentare di penetrare una rete a cui non si ha accesso un reato perseguibile a termini di legge e che queste poche pagine hanno scopi prettamente didattici. Per prima cosa occorre selezionare l'interfaccia di rete dalla quale si vogliono catturare i pacchetti in transito. Questa operazione attiver la scheda in modalit promiscua, cio la render capace di intercettare tutti i pacchetti in transito sulla rete e non solo quelli destinati all'host. Sui sistemi operativi seri questa operazione appannaggio solo degli amministratori.

Vediamo l'interfaccia principale di WireShark, cercando di capirne l'organizzazione:

Come si deve, il colpo d'occhio chiaro e semplice: i pacchetti sniffati sono studiati ed elencati in

Reti ordine di cattura. Selezionandone uno si hanno tutte le informazioni relative. Tra le funzioni utili di WireShark, elenchiamo le due pi usate:

15

1. L'opzione follow X Stream dove X uno tra TCP e UDP, permette di evidenziare il flusso di una comunicazione a cui il pacchetto selezionato appartiene. In questo modo si esce dall'ordinamento classico per cattura e si ottiene una lista di tutti i pacchetti relativi ad una connessione. 2. L'opzione filtra pacchetti permette una selezione dei pacchetti interessanti secondo un modello prestabilito. La sintassi dei filtri molto semplice: <protocollo> . <propriet> <operatore_di_confronto> <valore> ad esempio: ip.addr == 10.2.4.200 In ogni caso, semplice capire quando un filtro ha la sintassi corretta perch lo sfondo della linea di inserimento si colora di verde (rosso per i filtri sbagliati). Nel caso si voglia implementare un filtro complesso, si pu tentare la via dell'editor di filtri interno.

Esercizi su WireShark
1. Ricostruire una connessione HTTP (richiesta/risposta) elencando TUTTI i pacchetti inviati. 2. Elencare tutti i pacchetti delle connessioni DNS, cercando di dedurre la struttura del protocollo DNS. 3. Sniffare una connessione ad un server di posta, ricostruendo tutto il dialogo SMTP fra client e server. Quali informazioni sono disponibili? Elencare una lista di coppie nome/valore. 4. Identificare eventuali scansioni effettuati sulla rete. 5. (A casa) Sniffare una sessione MSN con un interlocutore a conoscenza di quello che state facendo.

Reti

16

Linux Firewall: il sistema NetFilter


Netfilter un componente del kernel del sistema operativo Linux, che permette lintercettazione e manipolazione dei pacchetti che attraversano il calcolatore. Netfilter permette di realizzare alcune funzionalit di rete avanzate come: la realizzazione di firewall la configurazione di NAT un sistema di traduzione automatica degli indirizzi IP, la condivisione di una connessione Internet in una LAN la manipolazione dei pacchetti in transito.

Iptables il programma che permette agli amministratori di sistema di configurare netfilter, definendo le regole per i filtri di rete e il reindirizzamento NAT. Spesso con il termine iptables ci si riferisce allintera infrastruttura, incluso netfilter. iptables un componente standard di tutte le moderne distribuzioni di Linux, basate su kernel 2.6.x. Il sistema netfilter I dati che transitano in una rete sono divisi in pacchetti di dimensioni prefissate, con netfilter possibile controllare il contenuto di ogni singolo pacchetto, e definire le azioni da compiere in base alle caratteristiche di quelli ricevuti. Ad esempio, si pu definire una regola che impedisce la ricezione di pacchetti provenienti da un particolare indirizzo o che utilizzano una determinata porta per effettuare la connessione. Il sistema netfilter basato su regole raggruppate in catene (chain), a loro volta raggruppate in tabelle (tables). Ogni tabella definisce un tipo diverso di operazioni che possibile effettuare sui pacchetti; ogni catena definisce come vengono trattati i pacchetti nelle diverse fasi della loro elaborazione. Le catene sono una forma di lista di controllo degli accessi (ACL); ogni regola costituita da due parti: 1. match: la specifica delle caratteristiche che un pacchetto deve avere affinch la regola stessa venga applicata 2. target: un obiettivo, che indica cosa fare quando il pacchetto rispetta le caratteristiche indicate. A ciascuna catena anche associata una politica di default, che definisce come vengono trattati i pacchetti che non corrispondono ad alcuna regola.

Reti

17

Le caratteristiche pi di frequente utilizzate per costruire delle regole sono lindirizzo di partenza o di destinazione del pacchetto e il numero di porta associato alla connessione. Ogni pacchetto di rete che arriva o parte dal computer attraversa almeno una catena e ogni regola della catena controlla se il pacchetto ne rispetta la specifica. Se questo accade, il pacchetto seguir il comportamento descritto nellobiettivo della regola, e le regole successive della catena verranno ignorate. Se il pacchetto raggiunge la fine della catena senza essere processato da nessuna regola, la politica della catena determina cosa farne. Uno dei possibili obiettivi il collegamento a unaltra catena. In questo caso, il pacchetto ricomincia ad essere valutato dalle regole della nuova catena, senza limiti di concatenazione. Una regola pu semplicemente essere un collegamento a una catena. Solo se il pacchetto attraversa lintera catena collegata esso continuer nella catena principale. In ogni tabella esistono alcune catene predefinite, ma lutente pu crearne di nuove. Le tabelle Esistono tre tabelle prestabilite, ognuna delle quali contiene delle catene predefinite. 1. FILTER: responsabile del filtraggio dei pacchetti, permette cio di bloccarli o di farli passare. Ogni pacchetto passa attraverso la tabella filtro. Essa contiene le seguenti catene predefinite: INPUT: tutti i pacchetti destinati al sistema passano attraverso questa catena. OUTPUT: tutti i pacchetti creati dal sistema passano attraverso questa catena. FORWARD: tutti i pacchetti che hanno come destinazione finale un altro sistema e che non sono stati generati dal sistema stesso passano attraverso questa catena. 2. NAT: questa tabella responsabile dellimpostazione delle regole per la modifica degli indirizzi e porte dei pacchetti. Il primo pacchetto di una connessione passa attraverso questa tabella, e il risultato del passaggio del primo pacchetto determina come tutti gli altri pacchetti della stessa connessione verranno modificati. La tabella nat contiene le seguenti catene predefinite: PREROUTING: passano attraverso questa catena i pacchetti in entrata, il passaggio avviene prima che la locale tabella di routing venga consultata per effettuare linstradamento. Essa usata per il NAT sulla destinazione o DNAT. POSTROUTING: passano attraverso questa catena i pacchetti in uscita dopo che la locale tabella di routing sia stata consultata. Usata per il NAT sulla sorgente o SNAT. OUTPUT: permette un DNAT limitato sui pacchetti generati localmente. 3. MANGLE: questa tabella e responsabile delle modifiche alle opzioni dei pacchetti, come ad esempio quella che determina la qualit del servizio. Tutti i pacchetti passano attraverso questa tabella. Essa contiene tutte le catene predefinite: PREROUTING: esamina tutti i pacchetti che in qualche modo entrano nel sistema. Questo

Reti

18 processo avviene prima che il routing decida se il pacchetto debba essere inoltrato (catena FORWARD) o se sia destinato al sistema (catena INPUT). INPUT: tutti i pacchetti destinati al sistema passano per questa catena. FORWARD: tutti i pacchetti che vengono instradati dal sistema ma di cui il sistema non ne sorgente iniziale ne destinazione finale, passano per questa catena. OUTPUT: tutti i pacchetti generati dal sistema passano per questa catena. POSTROUTING: tutti i pacchetti che lasciano il sistema, sia quelli in OUTPUT sia quelli in FORWARD, passano poi per questa catena.

Specifica delle regole Questa parte di ciascuna regola serve a definire a quali pacchetti verr applicata la regola. Una specifica costituita da un insieme di caratteristiche dei pacchetti che devono essere gestite dalla regola stessa. In generale una regola pu essere negata, antecedendo allopzione il simbolo ! Alcune delle opzioni pi importanti per specificare una regola sono le seguenti:

protocol (-p) protocollo

Specifica il nome del protocollo dei pacchetti. Alcuni nomi di protocollo molto usati sono ip, icmp, udp e tcp. Specifica i pacchetti provenienti da una determinata sorgente. La sorgente pu essere specificata con un indirizzo IP, un indirizzo IP con associato un prefisso di rete, o un nome del DNS. Specifica i pacchetti che hanno una determinata destinazione. La specifica dellindirizzo di destinazione segue regole analoghe alla specifica dellindirizzo sorgente. Nome opzionale dellinterfaccia (es. eth0,eth1) attraverso la quale il pacchetto viene ricevuto Nome opzionale dellinterfaccia (es. eth0,eth1) attraverso la quale il pacchetto sar inviato

source (-s) sorgente[/prefisso]

destination (-d) destinazione[/prefisso]

in-interface (-i) [nome]

out-interface (-o) [nome]

Obiettivi delle regole

Reti

19

Lobiettivo di una regola lazione da compiere se un pacchetto rispetta la regola, e viene specificato con lopzione jump (-j). Lobiettivo pu essere: una catena definita dallutente uno degli obiettivi predefiniti (ACCEPT, DROP, QUEUE, o RETURN) uno degli obiettivi aggiuntivi, come ad esempio REJECT o LOG.

se una regola non contiene la specifica dellobiettivo, il destino del pacchetto non verr modificato, tuttavia il contatore della regola verr ugualmente incrementato. Quando lobiettivo e il nome di una catena definita dallutente, il pacchetto viene fatto passare per quella catena, analogamente a quanto avviene per una chiamata a funzione in un linguaggio di programmazione. Se il pacchetto non viene processato da nessuna regola della catena, in quanto non rispetta la specifica di nessuna delle sue regole, esso ritorna ad essere processato dalla catena di partenza. Ogni obiettivo predefinito indica unazione da compiere sul pacchetto: ACCEPT: la catena accetta il pacchetto DROP: la catena scarta il pacchetto QUEUE: la catena mette il pacchetto in coda, per essere processato da una applicazione. Se non ci sono applicazioni pronte, il pacchetto viene scartato. RETURN: questo obiettivo ha leffetto di raggiungere la fine della catena.

Esistono molti obiettivi aggiuntivi disponibili. Alcuni dei pi comuni sono: REJECT: Analogo a DROP, ma con leccezione di spedire un pacchetto di errore ICMP al mittente del pacchetto. LOG: la catena annota il pacchetto, inviando un messaggio sul syslog DNAT: comporta la riscrittura dellindirizzo di destinazione del pacchetto, per permettere il NAT sulla destinazione. valido esclusivamente nelle catene OUTPUT e PREROUTING della tabella nat. La decisione effettuata sul primo pacchetto verr ripetuta per tutti i pacchetti della connessione, e i pacchetti di risposta avranno lindirizzo sorgente originario. SNAT: comporta la riscrittura dellindirizzo del mittente del pacchetto, per permettere il NAT sulla sorgente. Valido solo nella catena POSTROUTING della tabella nat, e come DNAT il suo risultato viene ripetuto per tutti i pacchetti della stessa connessione. MASQUERADE: forma speciale di SNAT per indirizzi IP dinamici, come quelli forniti da molti ISP per i loro utenti.

Monitoraggio delle connessioni Una delle funzionalit pi importanti offerte da netfilter la possibilit di identificare i pacchetti facenti parte di una stessa connessione (stateful packet filtering). Questo permette di creare delle regole basate

Reti

20

sulla relazione che un pacchetto ha nei confronti della connessione a cui appartiene. Il NAT si basa su queste informazioni per tradurre allo stesso modo gli indirizzi dei pacchetti di una stessa connessione, e iptables usa queste informazioni per realizzare firewall avanzati. netfilter assegna ad ogni pacchetto uno dei seguenti stati: NEW, il pacchetto inizia una nuova connessione; ESTABLISHED, il pacchetto fa parte di una connessione gi stabilita; RELATED, il pacchetto ha qualche relazione con unaltra connessione gi stabilita; INVALID, il pacchetto non fa parte di alcuna connessione e non possibile crearne.

Un caso comune e che il primo pacchetto visto dal firewall viene classificato come NEW, la risposta viene classificata come ESTABLISHED e un messaggio di errore, ad esempio un errore ICMP, come RELATED. Un errore ICMP che non appartiene a nessuna connessione pu essere classificato come INVALID. Il programma iptables iptables unapplicazione che permette agli amministratori di configurare le tabelle, le catene e le regole di netfilter. Dato che iptables modifica il funzionamento del sistema operativo, per essere eseguito necessario avere privilegi amministrativi. La lista completa delle funzionalit del comando consultabile nella relativa documentazione, che pu essere visualizzata con il comando man iptables. Vediamo alcune delle pi comuni: -t tabella Applica il comando alla tabella specificata. Quando questa opzione omessa, il comando si applica alla tabella filter. Fornisce una quantit maggiore di informazioni. Usa sempre i numeri per specificare gli indirizzi IP e le porte, invece di usare i nomi del DNS e i nomi dei protocolli.

-v -n

La sintassi di iptables la seguente, dove indicano comandi obbligatori e [] comandi opzionali: iptables Esempi: Aggiungere una regola alla catena INPUT nella tabella filtro per scartare tutti i pacchetti UDP, si pu usare il seguente comando: $ iptables -A INPUT -t filter -p udp -j DROP --append (A) | --delete (D) catena regola [opzioni]

Reti

21

Per elencare tutte le regole della catena OUTPUT, si usa il comando: $ iptables list OUTPUT Per cancellare tutte le catene: $ iptables flush Non possibile cancellare le catene predefinite, come le catene INPUT o OUTPUT della tabelle filtro. Il seguente comando viene usato per assegnare una politica ad una catena predefinita. $ iptables -P --policy catena politica Ad esempio, per impostare la politica DROP per la catena INPUT, si usa il comando: iptables -P INPUT DROP

Potrebbero piacerti anche