IP forwarding Firewall e NAT A.A. 2004/2005 Walter Cerroni
IP forwarding Linux può funzionare da gateway tra due o più reti IP host1 host2 linux-gw 192.168.11.0/24 192.168.10.0/24 Il kernel deve essere abilitato all IP forwarding: verifica: sysctl net.ipv4.ip_forward oppure: cat /proc/sys/net/ipv4/ip_forward restituisce 1 se abilitato, 0 altrimenti abilitazione: sysctl w net.ipv4.ip_forward=1 oppure: echo 1 > /proc/sys/net/ipv4/ip_forward disabilitazione: sysctl w net.ipv4.ip_forward=0 oppure: echo 0 > /proc/sys/net/ipv4/ip_forward 2
IP forwarding con aliasing Il forwarding è possibile anche tramite aliasing bisogna però gestire i messaggi ICMP di tipo redirect host1 può consegnare direttamente a host2 (1 hop) invece di passare attraverso host3 (2 hop) redirect è possibile impostare l invio dei redirect verifica: sysctl net.ipv4.conf.eth0.send_redirects cat /proc/sys/net/ipv4/conf/eth0/send_redirects abilitazione/disabilitazione: sysctl w net.ipv4.conf.eth0.send_redirects=[ 1 0 ] echo [ 1 0 ] > /proc/sys/net/ipv4/conf/eth0/send_redirects host1 host3 host2 192.168.11.0/24 192.168.10.0/24 3
Tabella di instradamento Necessaria per sapere come come inoltrare i pacchetti Informazioni contenute in ciascuna riga: indirizzo di destinazione: può essere un host o una network netmask: utilizzata per verificare la corrispondenza con la destinazione gateway: indica il tipo di consegna da effettuare (diretta o indiretta) nel caso di consegna indiretta indica l indirizzo del next-hop, cioè il gateway a cui inoltrare i pacchetti interfaccia di rete: specifica quale interfaccia di rete utilizzare (loopback compreso) metrica: specifica il costo di quella particolare route Table lookup eseguito per ogni datagramma host: solo quelli provenienti dagli strati superiori router: anche quelli in transito 4
Table lookup La ricerca nella tabella avviene utilizzando l indirizzo IP di destinazione del datagramma l indirizzo di destinazione e la netmask specificati in ciascuna riga della tabella Procedura: si esegue un operazione di AND bit per bit tra l indirizzo di destinazione del datagramma e la netmask di ciascuna riga il risultato viene confrontato con la destinazione specificata nella riga stessa: se coincidono, la riga è quella giusta il controllo viene effettuato a partire dalla riga che presenta una netmask con un numero maggiore di bit a uno: priorità alle route più specifiche (prima host, poi reti piccole, poi reti grandi longest-prefix match) una volta trovata la riga corrispondente, il lookup si ferma e il datagramma viene instradato secondo la modalità specificata se nessuna riga corrisponde, si usa il default gateway 5
Esempio di lookup 1 Destinazione Netmask Etc. 1 0.0.0.0 0.0.0.0 2 192.168.2.0 255.255.255.0 3 192.168.2.18 255.255.255.255 Datagramma con IP dest. = 192.168.2.18 Confronto prima con riga 3, poi con riga 2 e poi riga 1 192.168.002.018 bitwise AND 255.255.255.255 192.168.002.018 == 192.168.002.018 La riga 3 è quella giusta (host specific) 6
Esempio di lookup 2 Destinazione Netmask Etc. 1 0.0.0.0 0.0.0.0 2 192.168.2.0 255.255.255.0 3 192.168.2.18 255.255.255.255 Datagramma con IP dest. = 192.168.2.22 192.168.002.022 255.255.255.255 192.168.002.022!= 192.168.002.018 192.168.002.022 255.255.255.000 192.168.002.000 == 192.168.002.000 La riga 2 è quella giusta (network specific) 7
Esempio di lookup 3 Destinazione Netmask Etc. 1 0.0.0.0 0.0.0.0 2 192.168.2.0 255.255.255.0 3 192.168.2.18 255.255.255.255 Datagramma con IP dest. = 80.48.15.170 080.048.015.170 255.255.255.255 080.048.015.170!= 192.168.002.018 080.048.015.170 255.255.255.000 080.048.015.000!= 192.168.002.000 080.048.015.170 000.000.000.000 000.000.000.000 == 000.000.000.000 La riga 1 è quella giusta (default gateway) 8
Visualizzazione tabella di routing route print (Windows) Gateway = IP locale consegna diretta Gateway = loopback consegna agli strati superiori Altrimenti consegna indiretta tramite il gateway indicato 9
Visualizzazione tabella di routing route -n (Linux) Gateway = 0.0.0.0 & Iface = ethn consegna diretta Gateway = 0.0.0.0 & Iface = lo agli strati superiori Altrimenti consegna indiretta tramite il gateway indicato 10
Multi-homed host Se sono presenti più interfacce, c è una entry per ogni rete IP a cui si è connessi necessaria per eseguire correttamente la consegna diretta 11
Modifica della tabella di routing route add default gw <gateway> aggiunge il default gateway alla tabella di routing route add net <dest> netmask <mask> gw <gateway> dev <interface> route add host <dest> gw <gateway> dev <interface> aggiunge una entry alla tabella di routing specificandone i parametri (si omette gw <gateway> per forzare la consegna diretta) route del default route del net <dest> netmask <mask> route del host <dest> elimina le corrispondenti entry dalla tabella 12
Protezione di host: personal firewall Un firewall è un filtro software che serve a proteggersi da accessi indesiderati provenienti dall esterno della rete Può essere semplicemente un programma installato sul proprio PC che protegge quest ultimo da attacchi esterni Applicazioni Firewall Internet 13
Protezione di rete: firewall Oppure può essere una macchina dedicata che filtra tutto il traffico da e per una rete locale Applicazioni Applicazioni LAN Applicazioni Firewall Internet 14
Firewall: caratteristiche Tutto il traffico fra la rete locale ed Internet deve essere filtrato dal firewall Solo il traffico autorizzato deve attraversare il firewall Si deve comunque permettere che i servizi di rete ritenuti necessari siano mantenuti Il firewall deve essere per quanto possibile immune da problemi di sicurezza sull host In fase di configurazione di un firewall, per prima cosa si deve decidere la politica di default per i servizi di rete default deny: tutti servizi non esplicitamente permessi sono negati default allow: tutti i servizi non esplicitamente negati sono permessi 15
Livelli di implementazione Un firewall può essere implementato come Packet filter si interpone un router fra la rete locale ed Internet sul router si configura un filtro sui datagrammi IP da trasferire attraverso le varie interfacce il filtro scarta i datagrammi sulla base di Proxy server indirizzo IP e/o MAC sorgente o destinazione tipo di servizio (campo PROTOCOL o porta TCP/UDP) interfaccia di provenienza o destinazione nella rete protetta l accesso diretto ad Internet non è consentito a tutti gli host si interpone un server apposito detto proxy server per controllare gli accessi alla rete esterna il proxy server evita un flusso diretto di datagrammi fra Internet e le macchine della rete locale 16
Utilizzo di packet filter e proxy server Applicazioni LAN interna DMZ Applicazioni Applicazioni Packet Filter Proxy Applicazioni Applicazioni Internet Router e/o Packet filter 17
IPTABLES I kernel Linux 2.4 e 2.6 implementano funzionalità di packet filter tramite il pacchetto applicativo IPTABLES IPTABLES lavora a livello di kernel ed ha il controllo dei pacchetti IP in transito sulle interfacce di rete (loopback compreso) I pacchetti IP processati da IPTABLES sono soggetti a diverse modalità di elaborazione chiamate table (o tabelle), ciascuna delle quali è composta da gruppi di regole denominate chain IPTABLES definisce tre tabelle principali filter (filtraggio di pacchetti) nat (sostituzione di indirizzi IP) mangle (manipolazione ulteriore dei pacchetti: TOS, TTL, ) 18
IPTABLES: la tabella FILTER Le funzionalità di firewall vere e proprie sono implementate dalla tabella filter, che si occupa di filtrare i pacchetti sulla base dell interfaccia di provenienza e dei parametri contenuti nelle intestazioni IP e TCP Nella tabella filter sono presenti tre chain predefinite INPUT: contiene le regole di filtraggio da usare sui pacchetti in arrivo al firewall (destinati all host locale) OUTPUT: contiene le regole da usare sui pacchetti in uscita dal firewall (originati dall host locale) FORWARD: contiene le regole da usare sui pacchetti in transito nel firewall (inoltrati tra interfacce diverse) E possibile definire ulteriori chain 19
IPTABLES: chain della tabella FILTER Applicazioni FILTER OUTPUT INPUT Uscita FORWARD Ingresso 20
IPTABLES: regole della tabella FILTER Quando un pacchetto viene processato da una chain, esso è soggetto alle regole specificate in essa, secondo l ordine di inserimento Una regola può stabilire di scartare (DROP), rifiutare (REJECT) o di accettare (ACCEPT) un pacchetto in base a interfaccia di rete coinvolta indirizzo IP di origine indirizzo IP di destinazione protocollo (TCP, UDP, ICMP) porta TCP o UDP di origine porta TCP o UDP di destinazione tipo di messaggio ICMP Se un pacchetto non soddisfa nessuna regola, viene applicata la regola di default, o policy, di quella chain 21
IPTABLES: gestione della tabella FILTER Per visualizzare le regole attualmente in uso da ogni chain della tabella filter: iptables L Per visualizzare le regole attualmente in uso da una chain specifica: iptables L <chain> Per impostare la policy di default di una chain: iptables P <chain> <policy> Per aggiungere una regola in coda ad una chain: iptables A <chain> <options> j <policy> dove: <chain> = INPUT OUTPUT FORWARD <policy> = ACCEPT DROP REJECT 22
IPTABLES: gestione della tabella FILTER Per inserire una regola in una chain nella posizione <N>: iptables I <chain> <N> <options> j <policy> Per sostituire una regola in una chain nella posizione <N>: iptables R <chain> <N> <options> j <policy> Per eliminare una regola da una chain nella posizione <N>: iptables D <chain> <N> Per eliminare (flush) tutte le regole da una specifica chain o da tutte le chain (non agisce sulla policy di default): iptables F <chain> iptables F 23
IPTABLES: opzioni per specificare le regole Per specificare l interfaccia di ingresso o di uscita: i <interface> o <interface> Per specificare l IP (host o rete) di origine o destinazione: s <address>/<netmask> d <address>/<netmask> Per specificare il protocollo: p tcp udp icmp all Per specificare la porta (TCP/UDP) di origine o destinazione: sport <port> dport <port> Per specificare il tipo di messaggio ICMP: icmp-type <typename> Per specificare l indirizzo MAC di origine: mac-source <MAC_address> E possibile specificare il negato di un opzione tramite l operatore! es. s! <address>/<netmask> La netmask può essere in formato decimale puntato o come numero di bit = 1 L elenco delle porte con i corrispondenti servizi è in /etc/services Per visualizzare l elenco dei tipi di messaggi ICMP riconosciuti da IPTABLES: iptables p icmp h 24
Network Address Translation (NAT) Tecnica per il filtraggio di pacchetti IP con sostituzione degli indirizzi (mascheramento) Definito nella RFC 3022 per permettere a host appartenenti a reti IP private l accesso a reti IP pubbliche tramite un apposito gateway Utile per il risparmio di indirizzi IP pubblici e il riutilizzo di indirizzi IP privati NAT 192.168.10.0/24 137.204.191.0/24 25
Reti IP private (RFC 1918) Alcuni gruppi di indirizzi sono riservati a reti IP private Essi non sono raggiungibili dalla rete pubblica I router di Internet non instradano datagrammi destinati a tali indirizzi Possono essere riutilizzati in reti isolate da 10.0.0.0 a 10.255.255.255 = 10.0.0.0/8 da 172.16.0.0 a 172.31.255.255 = 172.16.0.0/12 da 192.168.0.0 a 192.168.255.255 = 192.168.0.0/16 26
Basic NAT Conversione di indirizzo Il NAT può fornire una semplice conversione di indirizzo IP (statica o dinamica) Conversioni contemporanee limitate dal numero di indirizzi IP pubblici a disposizione del gateway NAT 192.168.10.254 137.204.191.141 137.204.191.142 192.168.10.1 137.204.191.140 192.168.10.2 192.168.10.1:3123 137.204.191.141:3123 192.168.10.2:5039 137.204.191.142:5039 137.204.191.140:80 137.204.191.140:80 137.204.191.140:22 137.204.191.140:22 27
NAPT Conversione di indirizzo e porta Il NAT può fornire anche conversione di indirizzo IP e porta TCP o UDP Conversioni contemporanee possibili anche con un unico indirizzo IP pubblico del gateway NAT 192.168.10.254 137.204.191.141 192.168.10.1 137.204.191.140 192.168.10.2 192.168.10.1:3123 137.204.191.141:4130 192.168.10.2:3123 137.204.191.141:4131 137.204.191.140:80 137.204.191.140:80 137.204.191.140:22 137.204.191.140:22 28
Direzione delle connessioni Tipicamente da rete privata verso rete pubblica il NAT si preoccupa di effettuare la conversione inversa quando arrivano le risposte registra le traduzioni in corso in una tabella E anche possibile contattare dalla rete pubblica un host sulla rete privata bisogna configurare esplicitamente il NAT (Port Forwarding) 192.168.10.254 137.204.191.141 192.168.10.1 137.204.191.140 137.204.191.140:4014 137.204.191.141:80 137.204.191.140:4014 192.168.10.1:80 29
IPTABLES: la tabella NAT Le funzionalità di NAT sono implementate da IPTABLES tramite la tabella nat Nella tabella nat sono presenti tre chain predefinite PREROUTING: contiene le regole da usare prima dell instradamento per sostituire l indirizzo di destinazione dei pacchetti (policy = Destination NAT o DNAT) POSTROUTING: contiene le regole da usare dopo l instradamento per sostituire l indirizzo di origine dei pacchetti (policy = Source NAT o SNAT) OUTPUT: contiene le regole da usare per sostituire l indirizzo di destinazione dei pacchetti generati localmente (policy = DNAT) Se un pacchetto non soddisfa nessuna regola, viene applicata la policy di default di quella chain La policy ACCEPT vuol dire assenza di conversione La policy MASQUERADE vuol dire conversione implicita nell indirizzo IP assegnato all interfaccia 30
IPTABLES: chain della tabella NAT Applicazioni OUTPUT Uscita ROUTING NAT Ingresso POSTROUTING PREROUTING 31
IPTABLES: gestione della tabella NAT Per visualizzare le regole attualmente in uso da ogni chain della tabella nat: iptables t nat L Per visualizzare le regole attualmente in uso da una chain specifica: iptables t nat L <chain> Per aggiungere una regola in coda ad una chain: iptables t nat A <chain> <options> j <policy> dove: <chain> = POSTROUTING PREROUTING OUTPUT <policy> = ACCEPT MASQUERADE SNAT to-source <addr> DNAT to-destination <addr> <addr> = <address> <address>:<port> <options> = come per la tabella filter 32
IPTABLES: FILTER + NAT Applicazioni Uscita OUTPUT OUTPUT INPUT FILTER NAT Ingresso POSTROUTING FORWARD PREROUTING 33
Esercitazioni in laboratorio 1. Abilitare e verificare l IP forwarding tra due reti IP attraverso un unico gateway 10.0.0.x/30 192.168.8.0/24 2. Abilitare e verificare l IP forwarding tra due reti IP attraverso due gateway 10.0.0.x/30 10.0.0.y/30 192.168.8.0/24 34
Esercitazioni in laboratorio 3. Visualizzare il contenuto della tabella filter di IPTABLES 4. Impostare IPTABLES per scartare (DROP) i pacchetti ICMP in ingresso e verificarne il comportamento 5. Impostare IPTABLES per rifiutare (REJECT) i pacchetti ICMP in ingresso e verificarne il comportamento 6. Impostare a DROP la policy di default per i pacchetti in transito e abilitare l inoltro del traffico ssh. Verificarne il comportamento 7. Impostare ad ACCEPT la policy di default per i pacchetti in transito e bloccare l inoltro di tutti i pacchetti UDP dalla rete 192.168.8.0/24 alla 10.0.0.x/30 tranne quelli diretti alla porta 80. Verificarne il comportamento 35
Esercitazioni in laboratorio 8. Visualizzare il contenuto della tabella nat di IPTABLES 9. Impostare IPTABLES per realizzare un gateway NAT utilizzando un indirizzo aggiuntivo rispetto a quello già assegnato all interfaccia esterna 10. Impostare IPTABLES per realizzare il port forwarding verso la porta ssh di un host sulla rete interna interna 10.0.0.x/30 esterna 192.168.8.0/24 36