• Non ci sono risultati.

FirewallconIpTables Sistemidielaborazionedell’informazione Universit`adeglistudidiMilano

N/A
N/A
Protected

Academic year: 2021

Condividi "FirewallconIpTables Sistemidielaborazionedell’informazione Universit`adeglistudidiMilano"

Copied!
22
0
0

Testo completo

(1)

Universit` a degli studi di Milano

Progetto d’esame per

Sistemi di elaborazione dell’informazione

Firewall con IpTables

Marco Marconi

Anno Accademico 2009/2010

(2)
(3)

Sommario

Implementare un firewall con iptables e linux per inserirlo in una piccola realt` a aziendale composta da una intranet, una DMZ, e la rete pubblica. Le problematiche incontrate in questo tipo di implementazione riguardano, il MA- SQUERADE tra la rete intranet e la rete internet, il nat per i servizi dalla rete pubblica alla rete DMZ, la gestione delle connessioni in modalit` a state- full tramite i moduli messi a disposizione da iptables. I paramentri del ker- nel per salvaguardare tutto il traffico, come ad esempio, icmp echo ignore all, icmp echo ignore broadcast, icmp ignore bogus error responses, ecc...., non ver- ranno analizzati.

I

(4)
(5)

ELENCO DELLE FIGURE INDICE

Indice

1 Introduzione 1

1.1 struttura del documento . . . . 1

2 Cenni di IpTables 2 2.1 premessa . . . . 2

2.2 Il connection tracking . . . . 2

2.2.1 Un esempio con ftp . . . . 3

2.3 Le tabelle e le catene . . . . 4

2.4 Azioni . . . . 5

3 Configurazione utilizzata 6 3.1 S.O. e pacchetti installati . . . . 6

3.2 Piano d’indirizzamento . . . . 7

4 requisiti della rete 8 4.1 intranet . . . . 8

4.2 DMZ . . . . 8

4.3 Internet . . . . 9

4.4 Conclusioni sulle regole . . . . 9

5 Implementazione 10 5.1 Impostiamo l’ip forward . . . . 10

5.2 Blocchiamo tutto il traffico . . . . 10

5.3 da Intranet a Pubblic . . . . 10

5.4 da Intranet a DMZ . . . . 11

5.5 da Internet (pubblic) a DMZ . . . . 11

5.6 Salvare le regole . . . . 12

6 Test e verifiche funzionali 13 6.1 ip forward . . . . 13

6.2 Verifica delle politiche di default(DROP) . . . . 13

6.3 Il masquerating . . . . 13

6.4 Il NAT . . . . 14

6.5 test con nmap . . . . 14

7 Conclusioni e sviluppi futuri 14 8 Lo script delle regole 15 Elenco delle figure 1 Funzionamento della tabella flter . . . . 4

2 Diagramma delle reti . . . . 6

(6)

ELENCO DELLE TABELLE ELENCO DELLE TABELLE

Elenco delle tabelle

1 Tabelle Server Client . . . . 7

2 Firewall . . . . 7

3 Intranet . . . . 8

4 DMZ . . . . 8

5 Pubblic . . . . 9

6 Regole complessive . . . . 9

7 Confronto tra traffico in ingresso ed uscita . . . . 14

(7)

1 INTRODUZIONE

1 Introduzione

Inseriamoci nella realt`a di una piccola azienda che ha la necessit`a di pubblicare i propri servizi su internet e contestualmente dare ai propri dipendenti la possibilit`a di navi- gare sul web e utilizzare i servizi aziendali, che siano o meno pubblicati su internet.

Uno dei primi problemi `e la gestione dei pochi indirizzi ip pubblici che normalmente i provider assegnano alle piccole aziende. Nel momento in cui un’azienda decide di connettersi ad internet, non solo per la navigazione dei propri dipendenti, ma anche per la pubblicazione dei propri servizi, si trova davanti al problema della sicurezza della rete, che potrebbe essere compromessa da un potenziale attaccante posto su internet o anche sulla rete aziendale stessa. ´ E quindi necessario dotare la propria rete dei servizi (DMZ) di una barriera (Firewall) con cui controllare e regolare il tipo di traffico che viene veicolato all’ingresso della rete DMZ. ´ E altrettanto necessario proteggere la rete dei dipendenti da attacchi provenienti dalla rete internet.

Una possibile soluzione `e quella di implementare un firewall con tre interfacce di rete, una per ogni rete logicamente diversa. Il nostro firewall, con una interfaccia sar`a connesso ad internet, e sulle altre due rimaste libere, troveranno posto, la rete DMZ, e la rete dei dipendenti(intranet). Saranno utilizzati degli indirizzi privati, sia sulla DMZ che sulla intranet, e quindi, una ulteriore complessit`a alla configurazione del firewall, `e costituita dall’utilizzo della funzionalit`a di mascheratura

1

, che consente a tutti i dipendenti di presentarsi su internet utilizzando tutti lo stesso indirizzo ip pubblico.

In questo documento saranno analizzate ed implementate le tecniche di maschera- tura, MASQUERADE e NAT

2

, e la gestione in modalit`a statefull del firewall.

1.1 struttura del documento

Il documento `e diviso in una parte introduttiva e a seguire dei cenni sulle funzionalit`a di IpTables che utilizzeremo sul nostro firewall (vedi sezione 2). Nella sezione 5 andremo ad implementare le nostre regole sul firewall per poi eseguire dei semplici test nella sezione 6.

1MASQUERADE come viene definita in iptables

2il NAT si divide anche per SNAT,DNAT,. . . in questo documento sar`a utilizzata solamente la funzionalit`a di DestinationNAT

(8)

2 CENNI DI IPTABLES

2 Cenni di IpTables

2.1 premessa

Descrivere cos’`e e come funziona IpTables, non `e lo scopo di questo progetto, e quindi ci limiteremo a spiegare le sole funzionalit`a che andremo a utilizzare.

2.2 Il connection tracking

Dalla tabella 6 siamo in grado di capire quale traffico deve transitare per una certa interfaccia di rete, ma questo se sufficiente per la comprensione delle regole di un firewall generico, non lo `e per chi deve implementare ogni singola regola su uno specifico firewall. Per fare un esempio banale, se provo a fare un ping da un host A ad un host B ed utilizzo una regola del tipo source:A destination:B protocol:echo rule:accept il ping continuer`a a non funzionare in quanto non `e stata specificata la regola per il ritorno del ping (echo reply). Il problema `e che la risposta al ping, ma come tutte le connessioni di rete in risposta ad un’altra, fanno uso di numeri di porta casuali sopra la 1023.

Aprire tutte le porte dopo la 1023, non `e una buona politica di sicurezza, e per fortuna IpTables ci viene in aiuto con il modulo connection tracking, che fa diventare il firewall da stateless a stateful.

Il connection tracking `e la capacit`a di mantenere in memoria le informazioni sulle connessioni in transito nel firewall. Con questa caratteristica IpTables `e in grado di ricordare lo stato dei flussi e delle connessioni dei protocolli usati. In

/proc/net/ip_conntrack

il kernel mantiene e aggiorna in tempo reale lo stato delle connessioni gestite, fino ad un numero massimo che `e possibile modificare intervenendo su

/proc/sys/net/ipv4/ip_conntrack_max

La gestione del traffico, basata sulle connessioni, si fa utilizzando il modulo di match (-m state con iptables) con state che permettere di suddividere il traffico nei seguenti stati:

• NEW - una nuova richiesta di connessione da parte di un client (SYN TCP o nuovo pacchetto UDP);

• ESTABLISHED - pacchetti relativi a connessioni gi`a stabilite;

• RELATED - pacchetti correlati (RELATED) a connessioni esistenti e ESTABIL- SHED, come ad esempio il traffico ftp;

• INVALID - una connessione che non `e nessuna delle precedenti.

Il connection tracking `e particolarmente comodo per gestire il traffico di risposta per le

connessioni gi`a accettate. Ad esempio, per permettere tutto il traffico in uscita (tipico

caso di un client), e in entrata solo il traffico RELATED a quanto uscito, `e sufficiente

una regola del tipo:

(9)

2 CENNI DI IPTABLES 2.2 Il connection tracking

$ iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

$ iptables -I OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT Per gestire lo stato di connessione di alcuni protocolli, esistono dei moduli speciali adibiti al connection tracking e al natting:

• ip conntrack ftp - ip nat ftp : Conntrack e nat per FTP

• ip conntrack h323 - ip nat h323 : Conntrack e nat per H323

• ip conntrack irc - ip nat irc : Conntrack e nat per IRC

• ip conntrack rtsp - ip nat rtsp : Conntrack e nat per IRC

• ip conntrack tftp - ip nat tftp : Conntrack e nat per TFTP

• ip conntrack rpc tcp : Conntrack per RPC

• ip conntrack rpc udp : Conntrack per RPC I moduli vanno caricati nel kernel con il comando:

$ modprobe

2.2.1 Un esempio con ftp

definiamo un client A ed un server ftp B ed iniziamo la connessione ftp con il comando:

$ftp B

Questo comando aprir`a una NUOVA (NEW) connessione verso il server B client A NEW Server B

---->

Per brevit`a salto tutti i passaggi di autenticazione e passo direttamente al download di un file:

$get file.tgz

Quando il client chiede al server di eseguire il download di un file, per IpTables,

questa `e una connessione di tipo ESTABLISHED. Nel caso di utilizzo di modalit` a

passiva, la porta di connessione del client `e la 20, ma la porta per il trasferimento

del file pu`o essere una qualsiasi dalla 1023 in poi. Essendo la connessione generata da

quella gi`a esistente di ftp, con stessa sorgente IP e stessa destinazione IP, per permettere

l’utilizzo della modalita passiva, dobbiamo usare lo stato RELATED.

(10)

2.3 Le tabelle e le catene 2 CENNI DI IPTABLES

2.3 Le tabelle e le catene

IpTables fornisce tre tabelle prestabilite, ognuna delle quali contiene delle catene pre- definite. Inizialmente tutte le catene sono vuote e hanno una politica che consente a tutti i pacchetti di passare liberamente attraverso le interfacce di rete. Le catene vanno poi modificate a seconda delle proprie esigenze. Le tabelle predefinite sono le seguenti:

• tabella filter

– filtra il traffico in ingresso,uscita e in transito – catene: INPUT, OUTPUT, FORWARD (Figura 1)

Per questo host?

Pacchetto in uscita

NO SI

Verso l’applicazione

INPUT

Dall’applicazione

OUTPUT

FORWARD Pacchetto

in ingresso

Figura 1: Funzionamento della tabella flter

• tabella nat: questa tabella `e responsabile dell’impostazione delle regole per la modifica degli indirizzi e porte dei pacchetti. Il primo pacchetto di una connes- sione passa attraverso questa tabella, e il risultato del passaggio del primo pac- chetto determina come tutti gli altri pacchetti della stessa connessione verranno modificati. La tabella nat contiene le seguenti catene predefinite:

– catena PREROUTING: passano attraverso questa catena i pacchetti in en- trata, il passaggio avviene prima che la locale tabella di routing venga consultata per effettuare l’instradamento. Essa `e usata per il NAT sulla destinazione o DNAT.

– catena 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.

– catena OUTPUT: permette un DNAT limitato sui pacchetti generati local- mente.

• tabella mangle: questa tabella `e responsabile delle modifiche alle opzioni dei

pacchetti, come ad esempio quella che determina la qualit`a del servizio(TOS,

MARK, . . . ). Tutti i pacchetti passano attraverso questa tabella. Essa contiene

tutte le catene predefinite:

(11)

2 CENNI DI IPTABLES 2.4 Azioni

– catena PREROUTING: esamina tutti i pacchetti che in qualche modo en- trano nel sistema. Questo processo avviene prima che il routing decida se il pacchetto debba essere inoltrato (catena FORWARD) o se sia destinato al sistema. Viene utilizzata per manipolare l’header del pacchetto (catena INPUT).

– catena INPUT: tutti i pacchetti destinati al sistema passano per questa catena.

– catena FORWARD: tutti i pacchetti che vengono instradati dal sistema ma di cui il sistema non `e ne sorgente iniziale ne destinazione finale, passano per questa catena.

– catena OUTPUT: tutti i pacchetti generati dal sistema passano per questa catena.

– catena POSTROUTING: tutti i pacchetti che lasciano il sistema, sia quelli in OUTPUT sia quelli in FORWARD, passano poi per questa catena.

• tabella raw: utilizzata molto raramente e che viene invocata prima delle altre, ha lo scopo di evitare il connection tracking per quei pacchetti che, per una qualche ragione, non si vogliono filtrare in maniera stateful. Le catene previste per la tabella raw sono solo due:

– catena OUTPUT: in tale catena si andr`a ad operare sui pacchetti generati da processi locali.

– catena PREROUTING: in tale catena si andr`a, invece, ad operare sui pac- chetti provenienti da qualsiasi interfaccia di rete.

2.4 Azioni

Le azioni possibili da intraprendere per una determinata regola, si dividono in:

• ACCEPT ⇒ il pacchetto viene accettato;

• REJECT ⇒ il pacchetto viene rifiutato informando il mittente;

• DROP ⇒ il pacchetto viene completamente ignorato;

• RETURN ⇒ il pacchetto ritorna alla catena originale;

• una qualunque altra catena o funzione particolare come LOG,ULOG,. . . per la catena filter, o DNAT,SNAT,. . . per la catena nat, . . .

nel caso di azioni come LOG, l’azione pu`o non essere terminante

3

e quindi continuare con la regola successiva.

3Un’azione `e considerata non terminante quando, un pacchetto che soddisfa una regola con obiet- tivo non terminante, invece di interromepere la valutazione delle regole, continua a essere confrontato con le regole successive.

(12)

3 CONFIGURAZIONE UTILIZZATA

3 Configurazione utilizzata

Grazie all’utilizzo di 3 macchine virtuali, `e stato possibile simulare un’architettura composta da 3 diversi reti.

1. Una rete dedicata alla intranet dove trovano posto le postazioni di lavoro;

2. la rete DMZ, che ospita i server con i servizi da fornire ai dipendenti e alla rete internet;

3. la rete pubblica, che simula la rete internet.

Le macchine virtuali sono state predisposte come da Figura 2 per simulare:

• i computer dei dipendenti;

• i server con i servizi (www, mail, ftp, . . . );

• il Firewall con la funzionalit`a NAT.

fw−intranet:eth1 172.16.1.1/24

fw−dmz: eth0 172.16.2.1/24

fw−pubblic: eth2 151.99.103.1/24 client: eth0

172.16.1.10/24

server: eth0 172.16.2.10/24

DMZ intranet

pubblic equinox: eth0:1

151.99.103.2/24

Figura 2: Diagramma delle reti

La macchina fisica ospitante le tre virtuali, far`a le veci degli utenti internet, e sar`a utilizzata per eseguire delle scansioni dei servizi aperti sul firewall e sulle macchine interne.

3.1 S.O. e pacchetti installati

Le tre macchine virtuali sono state installate con Debian. Gli unici pacchetti aggiunti

all’installazione minima standard, sono stati:

(13)

3 CONFIGURAZIONE UTILIZZATA 3.2 Piano d’indirizzamento

• tcpdump ⇒ (per l’analisi del traffico sulle interfacce di rete);

• vsftpd ⇒ come server ftp;

• sshd ⇒ come server SSH;

• lynx ⇒ come browser web/ftp testuale;

• nmap ⇒ per eseguire scansioni sulle porte;

• apache ⇒ come server web

3.2 Piano d’indirizzamento

Per la macchina virtuale che simula la rete dei servizi, come quella dei dipendenti, `e stato predisposto un piano di indirizzamento standard con una sola scheda di rete (vedi tabella 1). Per il firewall si `e utilizzata una configurazione con tre schede di rete, una per la rete dei dipendenti, una per la rete dei servizi, ed infine l’ultima a simulare un collegamento con la rete internet (tabella 2). Il firewall utilizza come default gateway la macchina fisica, e conseguentemente, la macchina fisica `e configurata per utilizzare l’indirizzo pubblico del firewall come default gateway.

(a) Server

server eth0 IP 172.16.2.10 netmask 255.255.255.0

gateway 172.16.2.1

(b) Client

client eth0 IP 172.16.1.10 netmask 255.255.255.0

gateway 172.16.1.1 Tabella 1: Tabelle Server Client

Tabella 2: Firewall

firewall eth0 eth1 eth2

IP 172.168.2.1 172.168.1.1 151.99.103.1 netmask 255.255.255.0 255.255.255.0 255.255.255.0

default gw 151.99.103.2

(14)

4 REQUISITI DELLA RETE

4 requisiti della rete

Analizzando i bisogni di ogni computer o classi di computer connessi ad una rete, si `e in grado di definire delle regole base per il firewall, in modo da consentire solo il traffico lecito da e verso una certa rete. Per fare questo, dobbiamo analizzare ogni singola rete e capire che tipo di traffico viene generato e la sua destinazione. Le analisi seguenti saranno improntate ad analizzare solo il traffico in uscita dalle singole reti. L’unione di tutte le tabelle ci dar`a modo di capire quale tipo di traffico dovr`a essere permesso, andando poi a negare completamente tutto ci`o che non `e stato esplicitato.

4.1 intranet

Dalla rete intranet (tabella 3) verso la rete DMZ, dovr`a essere possibile raggiungere i siti web intranet ed internet, spedire e ricevere la posta, utilizzare un ftp, e accedere al dns. Dalla rete intranet si deve anche poter arrivare su qualsiasi server www della rete internet

4

. Da questa specifica si ricava la tabella 3.

Tabella 3: Intranet

Source Destination Protocoll Rule

eth1 eth0 http allow

eth1 eth0 ftp-data allow

eth1 eth0 ftp allow

eth1 eth0 smtp allow

eth1 eth0 pop3 allow

eth1 eth0 dns allow

eth1 eth2 http allow

4.2 DMZ

La rete DMZ (tabella 4) per una corretta funzionalit`a della posta, dovr`a fare delle connessioni smtp verso server di posta sulla rete internet. Per il corretto funzionamento dei dns, gli stessi dovranno essere abilitati ad instaurare delle connessioni di tipo dns verso server dns della rete internet.

Tabella 4: DMZ

Source Destination Protocoll Rule

eth0 eth2 smtp allow

eth0 eth2 dns allow

4Per questo tipo di funzionalit`a `e necessario prevedere la funzionalit`a di MASQUERADE

(15)

4 REQUISITI DELLA RETE 4.3 Internet

4.3 Internet

Dalla rete pubblica (tabella 5) non dovr`a essere possibile raggiungere alcun computer o apparato, localizzato nella rete intranet. Si dovranno solamente raggiungere i server web e ftp, i server di posta e i dns, con gli opportuni protocolli, localizzati nella rete DMZ.

Tabella 5: Pubblic

Source Destination Protocoll Rule

eth2 eth0 http allow

eth2 eth0 smtp allow

eth2 eth0 dns allow

eth2 eth0 ftp allow

eth2 eth0 ftp-data allow

4.4 Conclusioni sulle regole

Dai requisiti delle singole reti si pu`o arrivare a definire una tabella (tabella 6) com- prensiva di tutte le regole del traffico permesso da e verso una certa rete.

Tabella 6: Regole complessive

Source Destination Protocoll Rule

eth1 eth0 http allow

eth1 eth0 ftp-data allow

eth1 eth0 ftp allow

eth1 eth0 smtp allow

eth1 eth0 pop3 allow

eth1 eth0 dns allow

eth1 eth2 http allow

eth0 eth2 smtp allow

eth0 eth2 dns allow

eth2 eth0 http allow

eth2 eth0 smtp allow

eth2 eth0 dns allow

eth2 eth0 ftp allow

eth2 eth0 fftp-data allow

(16)

5 IMPLEMENTAZIONE

5 Implementazione

5.1 Impostiamo l’ip forward

Per poter utilizzare la catena FORWARD `e necessario che lo strato software del sistema operativo che gestisce le connessioni, sia abilitato a far transitare i pacchetti da una interfaccia ad un altra. Le impostazioni possono essere effettuate on the fly

5

intervenendo sul file:

/proc/sys/net/ipv4/ip_forward

Questo flag `e utilizzato dal sistema operativo come un flag per sapere il comportamento da intraprendere nel caso che un pacchetto in arrivo da un’interfaccia, debba uscire per un’altra. Va impostato a 1 per abilitare il forward ed a 0 per disabilitarlo.

5.2 Blocchiamo tutto il traffico

Sul firewall impostiamo le azioni di default per le catene della tabella filter

6

.

$ iptables -t filter P INPUT DROP

$ iptables -t filter P OUTPUT DROP

$ iptables -t filter P FORWARD DROP

5.3 da Intranet a Pubblic

Impostiamo la funzionalit`a di MASQUERADE in uscita sull’interfaccia eth2 (pub- blica) con il comando

$ iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE

Abilitamo la navigazione internet da parte dei client sulla rete intranet. Per questa regola che comprende le porte 80 (hhtp) e 443 (https), possiamo utilizzare l’attributo multiport che permette di specificare in una sola regola pi` u porte. Dobbiamo anche abilitare il traffico di ritorno utilizzando l’attributo state.

$ iptables -A FORWARD -i eth1 -o eth2 -p tcp -m multiport --dports 80,443 -j ACCEPT

$ iptables -A FORWARD -i eth2 -o eth1 -m state --state ESTABLISHED -j ACCEPT

Ogni altro tipo di traffico verso internet verr` a DROPPATO dalla regola di default

5In realt`a questo comando andrebbe dato alla fine della configurazione del firewall, per evitare che il firewall venga utilizzato maliziosamente in corso di configurazione

6Di default, se omessa la tabella nelle regole, viene considerata sempre la tabella filter. In questo caso per una pi`u facile lettura viene sempre indicata la tabella di appartenenza

(17)

5 IMPLEMENTAZIONE 5.4 da Intranet a DMZ

5.4 da Intranet a DMZ

Per permettere l’utilizzo di ftp

7

, ricordiamoci di caricare sul kernel il modulo che con- sente il funzionamento in modalit`a stateful per il protocollo ftp, ip conntrack ftp, ed abilitare il traffico ESTABLISHED e RELATED dalla DMZ ⇒ intranet. Il protocollo dei DNS prevede anche pacchetti di tipo udp e quindi, in aggiunta alla regola con il multiport, dobbiamo inserire anche una regola che permetta il traffico di tipo domain utilizzando il protocollo udp.

$ modprobe ip_conntrack_ftp

$ iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

$ iptables -A FORWARD -i eth1 -o eth0 -p tcp -m multiport --dports 53,80,443,20,21,25,110 -j ACCEPT

$ iptables -A FORWARD -i eth1 -o eth0 -p udp --dport 53 -j ACCEPT

5.5 da Internet (pubblic) a DMZ

Per questa funzionalit`a non dobbiamo dimenticarci di eseguire il nat tra l’indirizzo pubblico del firewall e l’indirizzo interno delle macchine con i servizi da pubblicare.

Parlando del server web, e quindi delle porte 80 e 443, la regola che andremo ad inse- rire andr`a a sostituire l’indirizzo ip pubblico del destinatario con l’indirizzo ip privato del server web, se e solo se il pacchetto `e diretto all’indirizzo pubblico del firewall e destinato alle porte 80 e 443. La regola andr`a inserita nella catena PREROUTING della tabella nat, e quindi, prima di applicare le tabelle di routing, il pacchetto viene trasformato e poi con il nuovo destinatario, si applicano le politiche di routing. Bi- sogna fare ancora un po’ di attenzione, perch`e in questo modo non stiamo evitando che un pacchetto destinato all’indirizzo privato del server web, transiti dall’interfaccia pubblica del firewall. Nella realt`a `e un po’ difficile che questo succeda

8

, in quanto, il router che ci connette ad internet filtra tutti i pacchetti con indirizzi privati, ma, dal momento che la sicurezza aumenta all’aumentare del grado di paranoia del network administrator, aggiungere una regola che scarti tutti i pacchetti provvenienti dall’in- terfaccia pubblica del firewall e diretti verso un ip privato

9

, della DMZ, ci far`a sentire pi` u tranquilli.

iptables -A FORWARD -i eth2 -o eth0 -m state --state NEW,ESTABLISHED, RELATED -j ACCEPT

iptables -A FORWARD -i eth0 -o eth2 -m state --state ESTABLISHED, RELATED -j ACCEPT

iptables -t nat -A PREROUTING -p tcp -i eth2 -d 151.99.103.1 --dport 80 -j DNAT --to-destination 172.16.2.10

7Se si volesse far utilizzare l’ftp in modalit`a passiva, avremmo dovuto impostare una regola del tipo: da eth1 a eth0 stato ESTABLISHED,RELATED ACCEPT

8Pu`o succedere che il nostro router venga compromesso e, da quella posizione, da noi considerata sicura, si potrebbero sferrare degli attacchi alle nostre macchine

9in realt`a ci sarebbero anche altre classi d’indirizzi da filtrare che ho omesso volutamente per non appesantire il tutto

(18)

5.6 Salvare le regole 5 IMPLEMENTAZIONE

Ora blocchiamo tutto il traffico diretto un qualsiasi indirizzo privato e proveniente dall’interfaccia pubblica del firewall:

iptables -t nat -A PREROUTING -i eth2 -d 10.0.0.0/8 -j DROP iptables -t nat -A PREROUTING -i eth2 -d 172.16.0.0/12 -j DROP iptables -t nat -A PREROUTING -i eth2 -d 192.168.0.0/16 -j DROP

5.6 Salvare le regole

Tutto ci`o che `e stato fatto finora, verr`a perso al successivo riavvio della macchina.

Dobbiamo salvare le regole, per poi ripristinarle ai successivi riavvii della macchina.

Molto importante ai fini della sicurezza, `e attivare le regole prima che l’interfaccia di rete diventi attiva, per evitare qualsiasi tipo di connessioni non autorizzate durante la fase di start-up della macchina. IpTables ci viene in aiuto con i comandi:

$ iptables-save

$ iptables-restore

che ci consentono di utilizzare lo standard-out e lo standard-in per salvare e leggere le regole impostate. Nello specifico, iptables-save stampa a video le regole impostate in un formato comprensibile a iptables-restore, conseguentemente, iptables-restore legge le regole nel formato prodotto da iptables-save. ´ E quindi sufficiente, redirigere lo standard-out verso un file da far poi leggere come standard-in da iptables-restore.

Distribuzioni differenti di Linux, possono prevedere diversi sistemi per salvare e leggere le regole di iptables, ma fattore comune a tutte le distribuzioni, `e l’utilizzo di iptables- save e iptables-restore, fornito dal pacchetto iptables. Imparato l’uso dei comandi forniti da iptables, si `e in grado di salvare e ripristinare le regole in una qualsiasi distribuzione Linux. Salviamo le regole con il comando:

$ iptables-save > rule.txt e ripristiniamo con:

$ iptables-restore < rule.txt

questi comandi andranno inseriti in uno script, che verr`a eseguito prima della configu- razione dell’interfaccia di rete. Rimando ai vari System V

10

di ogni distribuzione la ricerca di dove e come inserire i comandi per il save e restore di iptables. Nel paragrafo 8 ho inserito tutte le regole utilizzate fino ad ora, dove non si fa uso di iptables-save e iptables-restore. Questo per`o significa che saremo costretti a modificare lo script ogniqualvolta avessimo bisogno di cambiare le regole. Nello script ho anche inserito il modulo per consentire la modalit`a statefull per il protocollo ftp. Se si opta per l’uso dei comandi iptables-save e iptables-restore, ricordarsi di, utilizzando le giuste modalit`a, far caricare al kernel i moduli necessari al corretto funzionamento di iptables.

10UNIX System V, spesso abbreviato in System V, `e una versione del sistema operativo proprietario Unix

(19)

6 TEST E VERIFICHE FUNZIONALI

6 Test e verifiche funzionali

6.1 ip forward

Dalla macchina fisica, lanciare un ping verso l’ip 172.16.1.10. Se l’ip forward `e stato abilitato (sezione 5.1) si dovrebbe poter ricevere gli echo reply. Se cos`ı non fosse, ripetere il test dopo aver dato:

$ echo "1" > /proc/sys/net/ipv4/ip_forward

6.2 Verifica delle politiche di default(DROP)

Con un semplice ping dalla macchina fisica, verso il firewall o verso una delle macchine virtuali poste dietro il firewall, o anche dalla rete intranet verso la rete DMZ, verificare che regole impostate nella sezione 5.2 funzionino correttamente.

6.3 Il masquerating

dopo aver dato il comando per accettare qualsiasi pacchetto

11

in forwarding, mettere la macchina fisica in sniffing

12

sull’interfaccia pubblica (eth2) del firewall. Dalla macchina virtuale intranet lanciare un ping cos`ı formato:

$ ping 151.99.103.2

Dal tcpdump verificare che il risultato sia del tipo:

13

172.16.1.10 > 151.99.103.2: ICMP echo request 151.99.103.2 > 172.16.1.10: ICMP echo reply

Si evince che sull’interfaccia della nostra macchina fisica sta arrivando una richiesta di ping con indirizzo ip sorgente privato. In un caso reale, questo tipo di pacchetto sarebbe stato bloccato dal primo router incontrato per arrivare su internet. Per fortuna non `e il nostro caso, e quindi possiamo verificare il corretto funzionamento dell’istru- zione vista in 5.3. Dopo l’abilitazione del MASQUERADE verificare che l’output sia il seguente:

151.99.103.1 > 151.99.103.2: ICMP echo request 151.99.103.2 > 151.99.103.1: ICMP echo reply

L’indirizzo, prima privato, `e ora nattato con quello pubblico del firewall, e la richiesta pu`o essere tranquillamente inoltrata verso la rete internet.

11un’alternativa pi`u sicura, `e quella di abilitare il solo icmp di tipo echo request con il comando:

iptables -A FORWARD -i eth1 -o eth2 -p icmp –icmp-type echo-request -j ACCEPT

12tcpdump -ni eth2 icmp

13ho omesso gli altri dati come il seq. number,. . .

(20)

6.4 Il NAT 7 CONCLUSIONI E SVILUPPI FUTURI

tcpdump -ni eth2 port 80 tcpdump -ni eth0 port 80 151.99.103.2.53910 ⇒ 151.99.103.1.80 151.99.103.2.53910 ⇒ 172.16.2.10.80 151.99.103.1.80 ⇒ 151.99.103.2.53910 172.16.2.10.80 ⇒ 151.99.103.2.53910 151.99.103.2.53910 ⇒ 151.99.103.1.80 151.99.103.2.53910 ⇒ 172.16.2.10.80 151.99.103.2.53910 ⇒ 151.99.103.1.80 151.99.103.2.53910 ⇒ 172.16.2.10.80 151.99.103.1.80 ⇒ 151.99.103.2.53910 172.16.2.10.80 ⇒ 151.99.103.2.53910

.. . .. .

Tabella 7: Confronto tra traffico in ingresso ed uscita

6.4 Il NAT

Per testare la corretta funzionalit`a del NAT, `e sufficiente sniffare

14

il traffico sulle 2 interfacce del firewall, quella pubblica (eth2) e quella sulla DMZ (eth0), e verificare che la trasformazione del pacchetto funzioni correttamente. Il risultato atteso, in caso di una connessione http generata dalla macchina fisica e diretta verso l’ip del firewall porta 80 `e come da tabella

15

7. ´ E facilemente verificabile che sull’interfaccia pubblica (eth2) transitano solo pacchetti validi per quel segmento di rete, mentre nella parte DMZ (privata), il pacchetto `e stato trasformato per poter raggiungere il servizio richiesto sulla porta 80 del server con IP privato. Questo tipo di configurazione ci d`a la possibilit`a di non sprecare indirizzi pubblici, ma di utilizzare un solo IP per poi fare un NAT verso gli ip privati dei servizi che vogliamo mettere a disposizione, purch´e i servizi utilizzino differenti porte. Se ad esempio avessimo 2 server http nella nostra DMZ, tutti e due starebbero in ascolto sulla porta 80 e questo ci impedirebbe di discriminare, attraverso l’uso della porta, su quale dei due server poter indirizzare le richieste.

6.5 test con nmap

Grazie al tool nmap siamo in grado di verificare velocemete quali porte si rendono di- sponibili sulle nostre macchine e per ogni rete. Rimando al manuale di nmap

16

l’utilizzo dello stesso. Nel frattempo ci limiteremo solo a verificare che nessuna macchina con ip privato, sia raggiungibile dall’esterno, e che le porte aperte sull’interfaccia pubblica del firewall, siano le sole nattate ai servizi interni.

7 Conclusioni e sviluppi futuri

Il firewall `e sicuramente migliorabile, e non completamente esaustivo sul piano della sicurezza di rete. ´ E per`o una base sufficiente a capire il funzionamento di un tool tanto potente quanto complicato come IpTables. Non sarebbe male, ad esempio, attivare il log su tutte le nuove connessioni di tipo SSH, o bloccare tutti i port scanner di tipo un po’ anomalo come quelli che utilizzano i flag tcp (SYN,ACK,FIN,RST), . . . .

14tcpdump -ni eth2 port 80, tcpdump -ni eth0 port 80

15ometto volutamente tutte le informazioni non neccessarie alla comprensione della regola

16nmap –help

(21)

8 LO SCRIPT DELLE REGOLE

8 Lo script delle regole

#!/bin/bash

I="/sbin/iptables"

PUB="eth2"

DMZ="eth0"

INT="eth1"

echo "1" > /proc/sys/net/ipv4/ip_forward modprobe ip_conntrack_ftp

### Blocco tutto ###

$I -P OUTPUT DROP

$I -P INPUT DROP

$I -P FORWARD DROP

###########################

### Intranet -> Pubblic ###

### solo http e https ###

### MASQUERADE ###

###########################

$I -t nat -A POSTROUTING -o $PUB -j MASQUERADE

$I -A FORWARD -i $INT -o $PUB -p tcp -m multiport --dports 80,443 -j ACCEPT

$I -A FORWARD -i $PUB -o $INT -m state --state ESTABLISHED,RELATED -j ACCEPT

###########################

### Intranet -> DMZ ###

### #######################

$I -A FORWARD -i $DMZ -o $INT -m state --state ESTABLISHED,RELATED -j ACCEPT

$I -A FORWARD -i $INT -o $DMZ -p tcp -m multiport --dports 53,80,443,20,21,25,110 -j ACCEPT

$I -A FORWARD -i $INT -o $DMZ -p udp --dport 53 -j ACCEPT

###########################

### Pubblic -> DMZ ###

### 80,443,25,53 ###

### NAT ###

###########################

$I -A FORWARD -i $PUB -o $DMZ -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

$I -A FORWARD -i $DMZ -o $PUB -m state --state ESTABLISHED,RELATED

-j ACCEPT

(22)

8 LO SCRIPT DELLE REGOLE

$I -t nat -A PREROUTING -p tcp -i $PUB -d 151.99.103.1 --dport 80 -j DNAT --to-destination 172.16.2.10

$I -t nat -A PREROUTING -p tcp -i $PUB -d 151.99.103.1 --dport 443 -j DNAT --to-destination 172.16.2.10

$I -t nat -A PREROUTING -p tcp -i $PUB -d 151.99.103.1 --dport 25 -j DNAT --to-destination 172.16.2.10

$I -t nat -A PREROUTING -p tcp -i $PUB -d 151.99.103.1 --dport 53 -j DNAT --to-destination 172.16.2.10

$I -t nat -A PREROUTING -p udp -i $PUB -d 151.99.103.1 --dport 53 -j DNAT --to-destination 172.16.2.10

### blocchiamo tutte le classi private in ingresso ###

$I -t nat -A PREROUTING -i $PUB -d 10.0.0.0/8 -j DROP

$I -t nat -A PREROUTING -i $PUB -d 172.16.0.0/12 -j DROP

$I -t nat -A PREROUTING -i $PUB -d 192.168.0.0/16 -j DROP

###########################

### DMZ -> Pubblic ###

### 25,53 ###

###########################

$I -A FORWARD -i $DMZ -o $PUB -p tcp -m multiport --dports 25,53

-j ACCEPT

Riferimenti

Documenti correlati

Il progetto Sicur@Mente in rete pone l’accento sull’u- so sicuro, sano, corretto e consapevole delle nuove tecnologie digitali, di Internet e dei Social Network e vede

Rete TPL Ferro Rete TPL Metro Rete TPL Tram Rete TPL Corridoio Rete Viaria Rete Ciclabile. FEBBRAIO

bastion host perché unici visibili (e attaccabili) dalla rete esterna I server della DMZ sono detti. bastion host perché unici visibili (e attaccabili) dalla rete esterna

accedono ai servizi su Internet soltanto attraverso il gateway Î I client della rete interna. accedono ai servizi su Internet soltanto attraverso il gateway Î Il gateway

Caching: per inviare copie degli stessi dati (esempio, pagine HTML, immagini o video) a più destinatari si può sfruttare la capacità della rete di immagazzinarli in una

 SETTORIALITA’: grado in cui la rete si dimostra SETTORIALITA’: grado in cui la rete si dimostra suddivisibile in grappoli di legami distinti.. suddivisibile in grappoli di

L'implementazione di Microsoft di TCP/IP offre molte opzioni per la risoluzione del nome NetBIOS, compresa la ricerca della cache locale dei nomi, l'interrogazione del server WINS,

Utilizzando il programma supervisore inetd , esso rimane in ascolto su tutte le porte per cui è stato configurato un servizio e quando giunge una richiesta ad una determinata