+Firewall
+==========
+
+In Informatica, nell'ambito delle reti di computer, un firewall (termine inglese dal significato originario di parete refrattaria, muro tagliafuoco, muro ignifugo; in italiano anche parafuoco o parafiamma) e' un componente passivo di difesa perimetrale che può anche svolgere funzioni di collegamento tra due o piu' tronconi di rete. Usualmente la rete viene divisa in due sottoreti: una, detta esterna, comprende l'intera Internet mentre l'altra interna, detta LAN (Local Area Network), comprende una sezione piu' o meno grande di un insieme di computer locali. In alcuni casi e' possibile che si crei l'esigenza di creare una terza sottorete detta DMZ (o zona demilitarizzata) atta a contenere quei sistemi che devono essere isolati dalla rete interna ma devono comunque essere protetti dal firewall.
+
+Una prima definizione chiusa di firewall è la seguente:
+
+Apparato di rete hardware o software che filtra tutti i pacchetti entranti ed uscenti, da e verso una rete o un computer, applicando regole che contribuiscono alla sicurezza della stessa.
+
+In realtà un firewall può essere realizzato con un normale computer (con almeno due schede di rete e software apposito), può essere una funzione inclusa in un router o può essere un apparato specializzato. Esistono inoltre i cosiddetti "firewall personali", che sono programmi installati sui normali calcolatori, che filtrano solamente i pacchetti che entrano ed escono da quel calcolatore; in tal caso viene utilizzata una sola scheda di rete.
+
+La funzionalità principale in sostanza è quella di creare un filtro sulle connessioni entranti ed uscenti, in questo modo il dispositivo innalza il livello di sicurezza della rete e permette sia agli utenti interni che a quelli esterni di operare nel massimo della sicurezza. Il firewall agisce sui pacchetti in transito da e per la zona interna potendo eseguire su di essi operazioni di:
+controllo
+modifica
+monitoraggio
+
+Questo grazie alla sua capacità di "aprire" il pacchetto IP per leggere le informazioni presenti sul suo header, e in alcuni casi anche di effettuare verifiche sul contenuto del pacchetto.
+
+Links
+------
+
+* http://openskill.info/topic.php?ID=124
+* http://iptables-tutorial.frozentux.net/iptables-tutorial.html
+
+Ipfilter
+----------
+
+Link: http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING
+
+Natura di un firewall ip: su cosa lavora (livello 2 e un po' del 3) e su cosa *non* lavora (livello 4).
+Netfilter lavora anche su parti del livello 3 (TCP, UDP, etc) e del livello 1 (MAC source address). Iptables comunque permette di fare il *connection-tracking*, mediante il quale possiamo implementare il Network Address Translation.
+
+Netfilter non ricostruisce il flusso di dati tra pacchetti, non puo' quindi rilevare la presenza di virus o simili che si trasmettono su pacchetti separati: ricomporre, analizzare e tornare a scomporre i frammenti rtichiederebbe troppa RAM e risorse di sistema, con il conseguente rischio di saturare il firewall fino all'abbandono dei nuovi pacchetti in transito.
+Ci sono altri software piu' adatti a questi compiti, ad esempio un proxy HTTP come Squid che e' appunto una applicazione di quarto livello, progettata e strutturata per analizzare e modificare i flussi di dati (il *contenuto* dei pacchetti, non le sole *inestazioni*) facendo abbondate uso delle risorse RAM e di calcolo del sistema. Non a caso su macchine embedded dalle prestazioni molto ridotte (CPU ARM ~250Mhz con ~30MB di RAM) Squid sfrutta al massimo le risorse di sistema per gestire il traffico di una rete 10/100, mentre il lavoro tipico svolto da netfilter e' quasi irrilevante.
+
+Progettazione di un firewall
+-----------------------------
+
+Per implementare un firewall bisogna decidere un aio di cose: la collocazione e l'approccio (inclusivo o esclusivo) al filtraggio, il tipo di hardware.
+
+Collocazione
+~~~~~~~~~~~~~
+
+DMZ e MZ, internet, intranet, extranet. Frammentazione della rete, decidere se diversi reparti di una azienda si possano vedere tra loro e in che misura.
+
+Collocazione:
+
+ 1. sul router
+ 2. tra router e servers / LAN
+ 3. Unico server / router / firewall e connessi rischi. considerare l'acquisto di un router hardware dedicato.
+
+Layeed security:
+ Implementare piu' device / software sui diversi livelli: http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER
+
+
+Policy di default
+~~~~~~~~~~~~~~~~~~~
+
+Drop o Accept: conseguenze per sicurezza, facilita' di gestione.
+
+
+Hardware
+~~~~~~~~~~~~
+
+Sostanzialmente potremmo distinquere due tipologie di hardware:
+
+Network appliance dedicata::
+ Un dispositivo hardware dedicato alla funzione di Firewall, ad es un Cisco / Fortigate.
+ Si noti che molti firewall economici altro non sono che Linux box molto striminzite.
+
+Server / Personal computer:
+ Un server sul quale viene fatto girare Netfilter ad uso del server stesso e della rete connessa.
+
+Vantaggi e svantaggi: consumo elettrico, efficenza, flessibilita', strumenti di gestione, sicurezza, OpenBSD.
+
+Percorso dei pacchetti tra tabelle e catene
+-------------------------------------------
+
+link: http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES
+
+
+Concetti di base
+-----------------
+
+Tabelle, catene, regole
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Iptables lavora su 3 tabelle (tables) di default:
+
+* filter - Regola il firewalling: quali pacchetti accettare, quali bloccare
+
+* nat - Regola le attività di natting
+
+* mangle - Interviene sulla alterazione dei pacchetti.
+
+Ogni tabella ha delle catene (chains) predefinite (INPUT, OUTPUT, FORWARD ... ) a cui possono essere aggiunte catene custom.
+Ogni catena è composta da un elenco di regole (rules) che identificano pacchetti di rete secono criteri diversi (es: -p tcp --dport 80 -d 10.0.0.45)
+Ogni regola termina con una indicazione (target) su cosa fare dei pacchetti identificati dalla regola stessa (es: -j ACCEPT, -j DROP ...)
+
+Match
+~~~~~~~~~~~~~~~~~
+
+I Match di una regola (rule) servono a testare un pacchetto per valutare se corrisponda a certe caratteriscttiche. I match di possono servire a controllare se un pacchetto e' destinato a una porta particolare o utilizza un protocollo particolare.
+
+Alcuni esempi:
+
+-p [!] proto
+ Protocollo IP. Secondo IP number o nome (es: tcp, udp, gre, ah...)
+
+-s [!] address[/mask]
+ Indirizzo IP sorgente (o network con maschera di sottorete)
+
+-d [!] address[/mask]
+ Indirizzo IP destinazione (o network)
+
+-i [!] interface[+]
+ Interfaccia di rete di entrata ([+] wildcard)
+
+-o [!] interface[+]
+ Interfaccia di rete di uscita ([+] wildcard)
+
+-f
+ Frammento di pacchetto
+
+Targets
+~~~~~~~~~~~~~
+
+Se un pacchetto soddisfa le condizioni del Match *salta* (jump) su uno dei target possibili, in caso contrario continua il suo percorso tra regole catene e tabelle.
+
+Target principali:
+
+*-j ACCEPT*
+ Il pachetto matchato viene accettato e procede verso la sua destinazione. Si usa per definire il traffico permesso.
+
+*-j DROP*
+ Il pacchetto viene rifiutato e scartato, senza alcuna notifica al mittente. Si usa, in alternativa a REJECT, per bloccare traffico.
+
+*-j REJECT*
+ Il pacchetto viene rifiutato. Al mittente viene mandato un pacchetto (configurabile) di notifica tipo ICMP port-unreachable (--reject-with icmp-port-unreachable)
+
+-t LOG
+ Il pacchetto viene loggato via syslog e procede l'attraversamento della catena. Opzioni: (--log-level, --log-prefix, --log-tcp-sequence, --log-tcp-options, --log-ip-options)
+
+-j DNAT
+ Viene modificato l'IP di destinazione del pacchetto. Target disponibile solo in nat / PREROUTING e nat / OUTPUT. L'opzione --to-destination IP:porta definisce il nuovo IP di destinazione. Si usa tipicamente su network firewall che nattano server di una DMZ
+
+-j SNAT
+ Viene modificato l'IP sorgente. Solo in nat / POSTROUTING. Prevede l'opzione --to-source IP:porta. Si usa per permettere l'accesso a Internet da una rete locale con IP privati.
+
+-j MASQUERADE
+ Simile a SNAT, si applica quando i pacchetti escono da interfacce con IP dinamico (dialup, adsl, dhcp...). Si usa solo in nat / POSTROUTING e prevede l'opzione --to-ports porte.
+
+-j REDIRECT
+ Redirige il pacchetto ad una porta locale. Usabile solo in nat / PREROUTING e nat / OUTPUT è previsto per fare un transparent proxy (con proxy server in esecuzione sulla macchina con iptables)
+
+-j RETURN
+ Interrompe l'attraversamento della catena. Se questa è una secondaria, il pacchetto torna ad attraversare la catena madre da punto in cui aveva fatto il salto nella secondaria. Se il RETURN è in una delle catene di default, il pacchetto interrompe l'attraversamento e segue la policy di default.
+
+-j TOS
+ Usabile solo nella tabella mangle, permette di cambiare il TOS (Type Of Service) di un pacchetto con l'opzione --set-tos. Per un elenco dei parametri disponibili: iptables -j TOS -h
+
+-j MIRROR
+ Curioso e sperimentale, questo target invia un pacchetto speculare al mittente. In pratica è come se facesse da specchio per tutti i pacchetti ricevuti. Da usare con cautela, per evitare attacchi DOS indiretti.
+
+
+Tabella Filter
+---------------
+
+E' quella implicita e predefinita (-t filter)
+Riguarda le attività di filtraggio del traffico.
+Ha 3 catene di default:
+INPUT - Riguarda tutti i pacchetti destinati al sistema. In entrata da ogni interfaccia.
+OUTPUT - Riguarda i pacchetti che sono originati dal sistema e destinati ad uscire.
+FORWARD - Riguarda i pacchetti che attraversano il sistema, con IP sorgente e destinazione esterni.
+
+Esempio per permettere accesso alla porta 80 locale:
+iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
+Analoga a: iptables -I INPUT -p tcp --dport 80 -j ACCEPT
+
+Esempio per permettere ad un pacchetto con IP sorgente 10.0.0.4 di raggiungere il server 192.168.0.1 attraversando il firewall:
+iptables -I FORWARD -s 10.0.0.4 -d 192.168.0.1 -j ACCEPT
+
+
+
+
+Gestione regole (rules)
+--------------------------
+
+Il comando iptables viene usato per ogni attività di gestione e configurazione.
+
+Inserimento regole:
+
+iptables -A CATENA ...
+ Aggiunge una regola alla fine della catena indicata
+
+iptables -I CATENA [#] ...
+ Inserisce alla riga # (default 1) una regola nella catena indicata
+
+iptables -N CATENA
+ Crea una nuova catena custom
+
+iptables -P CATENA TARGET
+ Imposta il target di default per la catena indicata
+
+Rimozione regole e azzeramenti:
+
+iptables -F [catena]
+ Ripulisce tutte le catene (o quella indicata)
+
+iptables -X [catena]
+ Ripulisce tutte le catene custom (o quella indicata)
+
+iptables -Z [catena]
+ Azzera i contatori sulle catene
+
+iptables -D catena #
+ Cancella la regola numero # dalla catena indicata
+
+Interrogazione:
+
+iptables -L
+ Elenca le regole esistenti
+
+iptables -L -n -v
+ Elenca, senza risolvere gli host, in modo verboso le regole esistenti
+
+
+
+
+