+ <div class="section" id="firewall">
+ <h1><a class="toc-backref" href=
+ "#id52">7 Firewall</a></h1>
+
+ <p>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.</p>
+
+ <p>Una prima definizione chiusa di firewall è la
+ seguente:</p>
+
+ <p>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.</p>
+
+ <p>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.</p>
+
+ <p>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</p>
+
+ <p>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.</p>
+
+ <div class="section" id="links">
+ <h2><a class="toc-backref" href=
+ "#id53">7.1 Links</a></h2>
+
+ <ul class="simple">
+ <li><a class="reference external" href=
+ "http://openskill.info/topic.php?ID=124">http://openskill.info/topic.php?ID=124</a></li>
+
+ <li><a class="reference external" href=
+ "http://iptables-tutorial.frozentux.net/iptables-tutorial.html">
+ http://iptables-tutorial.frozentux.net/iptables-tutorial.html</a></li>
+ </ul>
+ </div>
+
+ <div class="section" id="ipfilter">
+ <h2><a class="toc-backref" href=
+ "#id54">7.2 Ipfilter</a></h2>
+
+ <p>Link: <a class="reference external" href=
+ "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING">
+ http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING</a></p>
+
+ <p>Natura di un firewall ip: su cosa lavora (livello 2 e un
+ po' del 3) e su cosa <em>non</em> 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 <em>connection-tracking</em>,
+ mediante il quale possiamo implementare il Network Address
+ Translation.</p>
+
+ <p>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 <em>contenuto</em> dei
+ pacchetti, non le sole <em>inestazioni</em>) 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.</p>
+ </div>
+
+ <div class="section" id="progettazione-di-un-firewall">
+ <h2><a class="toc-backref" href=
+ "#id55">7.3 Progettazione di un
+ firewall</a></h2>
+
+ <p>Per implementare un firewall bisogna decidere un aio di
+ cose: la collocazione e l'approccio (inclusivo o esclusivo)
+ al filtraggio, il tipo di hardware.</p>
+
+ <div class="section" id="collocazione">
+ <h3><a class="toc-backref" href=
+ "#id56">7.3.1 Collocazione</a></h3>
+
+ <p>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.</p>
+
+ <p>Collocazione:</p>
+
+ <blockquote>
+ <ol class="arabic simple">
+ <li>sul router</li>
+
+ <li>tra router e servers / LAN</li>
+
+ <li>Unico server / router / firewall e connessi
+ rischi. considerare l'acquisto di un router hardware
+ dedicato.</li>
+ </ol>
+ </blockquote>
+
+ <dl class="docutils">
+ <dt>Layeed security:</dt>
+
+ <dd>Implementare piu' device / software sui diversi
+ livelli: <a class="reference external" href=
+ "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER">
+ http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER</a></dd>
+ </dl>
+ </div>
+
+ <div class="section" id="policy-di-default">
+ <h3><a class="toc-backref" href=
+ "#id57">7.3.2 Policy di default</a></h3>
+
+ <p>Drop o Accept: conseguenze per sicurezza, facilita' di
+ gestione.</p>
+ </div>
+
+ <div class="section" id="hardware">
+ <h3><a class="toc-backref" href=
+ "#id58">7.3.3 Hardware</a></h3>
+
+ <p>Sostanzialmente potremmo distinquere due tipologie di
+ hardware:</p>
+
+ <dl class="docutils">
+ <dt>Network appliance dedicata::</dt>
+
+ <dd>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.</dd>
+
+ <dt>Server / Personal computer:</dt>
+
+ <dd>Un server sul quale viene fatto girare Netfilter ad
+ uso del server stesso e della rete connessa.</dd>
+ </dl>
+
+ <p>Vantaggi e svantaggi: consumo elettrico, efficenza,
+ flessibilita', strumenti di gestione, sicurezza,
+ OpenBSD.</p>
+ </div>
+ </div>
+
+ <div class="section" id=
+ "percorso-dei-pacchetti-tra-tabelle-e-catene">
+ <h2><a class="toc-backref" href=
+ "#id59">7.4 Percorso dei pacchetti tra
+ tabelle e catene</a></h2>
+
+ <p>link: <a class="reference external" href=
+ "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES">
+ http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES</a></p>
+ </div>
+
+ <div class="section" id="concetti-di-base">
+ <h2><a class="toc-backref" href=
+ "#id60">7.5 Concetti di base</a></h2>
+
+ <div class="section" id="tabelle-catene-regole">
+ <h3><a class="toc-backref" href=
+ "#id61">7.5.1 Tabelle, catene,
+ regole</a></h3>
+
+ <p>Iptables lavora su 3 tabelle (tables) di default:</p>
+
+ <ul class="simple">
+ <li>filter - Regola il firewalling: quali pacchetti
+ accettare, quali bloccare</li>
+
+ <li>nat - Regola le attività di natting</li>
+
+ <li>mangle - Interviene sulla alterazione dei
+ pacchetti.</li>
+ </ul>
+
+ <p>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 ...)</p>
+ </div>
+
+ <div class="section" id="match">
+ <h3><a class="toc-backref" href=
+ "#id62">7.5.2 Match</a></h3>
+
+ <p>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.</p>
+
+ <p>Alcuni esempi:</p>
+
+ <dl class="docutils">
+ <dt>-p [!] proto</dt>
+
+ <dd>Protocollo IP. Secondo IP number o nome (es: tcp,
+ udp, gre, ah...)</dd>
+
+ <dt>-s [!] address[/mask]</dt>
+
+ <dd>Indirizzo IP sorgente (o network con maschera di
+ sottorete)</dd>
+
+ <dt>-d [!] address[/mask]</dt>
+
+ <dd>Indirizzo IP destinazione (o network)</dd>
+
+ <dt>-i [!] interface[+]</dt>
+
+ <dd>Interfaccia di rete di entrata ([+] wildcard)</dd>
+
+ <dt>-o [!] interface[+]</dt>
+
+ <dd>Interfaccia di rete di uscita ([+] wildcard)</dd>
+ </dl>
+
+ <table class="docutils option-list" frame="void" rules=
+ "none">
+ <col class="option">
+ <col class="description">
+
+ <tbody valign="top">
+ <tr>
+ <td class="option-group"><kbd><span class=
+ "option">-f</span></kbd></td>
+
+ <td>Frammento di pacchetto</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+ <div class="section" id="targets">
+ <h3><a class="toc-backref" href=
+ "#id63">7.5.3 Targets</a></h3>
+
+ <p>Se un pacchetto soddisfa le condizioni del Match
+ <em>salta</em> (jump) su uno dei target possibili, in
+ caso contrario continua il suo percorso tra regole catene
+ e tabelle.</p>
+
+ <p>Target principali:</p>
+
+ <dl class="docutils">
+ <dt><em>-j ACCEPT</em></dt>
+
+ <dd>Il pachetto matchato viene accettato e procede
+ verso la sua destinazione. Si usa per definire il
+ traffico permesso.</dd>
+
+ <dt><em>-j DROP</em></dt>
+
+ <dd>Il pacchetto viene rifiutato e scartato, senza
+ alcuna notifica al mittente. Si usa, in alternativa a
+ REJECT, per bloccare traffico.</dd>
+
+ <dt><em>-j REJECT</em></dt>
+
+ <dd>Il pacchetto viene rifiutato. Al mittente viene
+ mandato un pacchetto (configurabile) di notifica tipo
+ ICMP port-unreachable (--reject-with
+ icmp-port-unreachable)</dd>
+ </dl>
+
+ <table class="docutils option-list" frame="void" rules=
+ "none">
+ <col class="option">
+ <col class="description">
+
+ <tbody valign="top">
+ <tr>
+ <td class="option-group"><kbd><span class=
+ "option">-t <var>LOG</var></span></kbd></td>
+
+ <td>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)</td>
+ </tr>
+
+ <tr>
+ <td class="option-group"><kbd><span class=
+ "option">-j <var>DNAT</var></span></kbd></td>
+
+ <td>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</td>
+ </tr>
+
+ <tr>
+ <td class="option-group"><kbd><span class=
+ "option">-j <var>SNAT</var></span></kbd></td>
+
+ <td>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.</td>
+ </tr>
+
+ <tr>
+ <td class="option-group"><kbd><span class=
+ "option">-j <var>MASQUERADE</var></span></kbd></td>
+
+ <td>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.</td>
+ </tr>
+
+ <tr>
+ <td class="option-group"><kbd><span class=
+ "option">-j <var>REDIRECT</var></span></kbd></td>
+
+ <td>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)</td>
+ </tr>
+
+ <tr>
+ <td class="option-group"><kbd><span class=
+ "option">-j <var>RETURN</var></span></kbd></td>
+
+ <td>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.</td>
+ </tr>
+
+ <tr>
+ <td class="option-group"><kbd><span class=
+ "option">-j <var>TOS</var></span></kbd></td>
+
+ <td>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</td>
+ </tr>
+
+ <tr>
+ <td class="option-group"><kbd><span class=
+ "option">-j <var>MIRROR</var></span></kbd></td>
+
+ <td>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.</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+
+ <div class="section" id="tabella-filter">
+ <h2><a class="toc-backref" href=
+ "#id64">7.6 Tabella Filter</a></h2>
+
+ <p>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.</p>
+
+ <p>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</p>
+
+ <p>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</p>
+ </div>
+
+ <div class="section" id="gestione-regole-rules">
+ <h2><a class="toc-backref" href=
+ "#id65">7.7 Gestione regole
+ (rules)</a></h2>
+
+ <p>Il comando iptables viene usato per ogni attivitÃ
+ di gestione e configurazione.</p>
+
+ <p>Inserimento regole:</p>
+
+ <dl class="docutils">
+ <dt>iptables -A CATENA ...</dt>
+
+ <dd>Aggiunge una regola alla fine della catena
+ indicata</dd>
+
+ <dt>iptables -I CATENA [#] ...</dt>
+
+ <dd>Inserisce alla riga # (default 1) una regola nella
+ catena indicata</dd>
+
+ <dt>iptables -N CATENA</dt>
+
+ <dd>Crea una nuova catena custom</dd>
+
+ <dt>iptables -P CATENA TARGET</dt>
+
+ <dd>Imposta il target di default per la catena
+ indicata</dd>
+ </dl>
+
+ <p>Rimozione regole e azzeramenti:</p>
+
+ <dl class="docutils">
+ <dt>iptables -F [catena]</dt>
+
+ <dd>Ripulisce tutte le catene (o quella indicata)</dd>
+
+ <dt>iptables -X [catena]</dt>
+
+ <dd>Ripulisce tutte le catene custom (o quella
+ indicata)</dd>
+
+ <dt>iptables -Z [catena]</dt>
+
+ <dd>Azzera i contatori sulle catene</dd>
+
+ <dt>iptables -D catena #</dt>
+
+ <dd>Cancella la regola numero # dalla catena
+ indicata</dd>
+ </dl>
+
+ <p>Interrogazione:</p>
+
+ <dl class="docutils">
+ <dt>iptables -L</dt>
+
+ <dd>Elenca le regole esistenti</dd>
+
+ <dt>iptables -L -n -v</dt>
+
+ <dd>Elenca, senza risolvere gli host, in modo verboso le
+ regole esistenti</dd>
+ </dl>
+ </div>
+ </div>
+