Pf e Netfilter,
analisi dei firewall
  Open Source
  “Giovanni Bechis” <g.bechis@snb.it>
I principali firewall Open Source sono:
Netfilter, il firewall di Linux e
Pf, il firewall dei sistemi *BSD.

Le differenze più evidenti fra i due firewall
sono:

✔configurazione
✔comportamento con protocolli complessi

✔gestione dei log

✔limitazione della banda
La configurazione di Netfilter viene fatta
utilizzando il comando iptables, quella di Pf
modificando il file /etc/pf.conf.

Se non si necessita di caratteristiche
avanzate si possono utilizzare anche delle
interfaccie grafiche per la configurazione.
Per poter utilizzare le caratteristiche più
avanzate dei due firewall occorre scrivere
la configurazione senza basarsi su
interfaccie grafiche più semplici ma
limitative.

In Pf anche le caratteristiche più avanzate
sono già incluse, per quanto riguarda
Netfilter/Iptables occorre talvolta affidarsi
a Patch-O-Matic.
Patch-O-Matic è una serie di patch per il
kernel Linux e per il comando iptables che
aggiungono funzionalità al firewall.

Le funzionalità che vengono aggiunte
vanno da un filtraggio dei pacchetti
maggiormente granulare alla possibilità di
salvare i log in un database e a tanto altro
ancora.
Molte di queste funzionalità sono già
integrate nel firewall Pf.
iplim it (limita il numero di connessioni su una
determinata porta da un determinato host)

iptables -A IN PUT -p tcp --syn --dport ssh
-m  iplim it --iplim it-above 10 -j REJECT

block quick inet proto tcp from <badhost>
port  ssh
pass in inet proto tcp from <badhost> port
ssh  flags S /S A keep state 
   (m ax-src-conn 10, overload <badhost>
flush)
m port (Permette di fare il match di più
porte in una sola regola)

iptables -A IN PUT -p tcp -m m port --ports 
20:23,80 -j DROP

block quick inet proto tcp from any port 
{ 20:23, 80 }
quota (Permette di bloccare i pacchetti una
volta raggiunta una determinata quantità di
traffico)

iptables -A IN PUT -p tcp --dport 80 -m
quota 
--quota 52428800 -j ACCEPT
iptables -A IN PUT -p tcp --dport 80 -j DROP

non è possibile in Pf se non utilizzando le
apposite regole per limitare la banda
random (Per bloccare un numero di
pacchetti a caso)

iptables -A IN PUT -p icm p --icm p-type 
echo-request -m random --average 50 -j
DROP

block in inet proto icm p all icm p-type 
{ echoreq } probability 50%
re c e nt (Limita il numero di connessioni da un
determinato host)

iptables -A FORWARD -m recent --nam e 
badhost --rcheck --seconds 60 --hitcount 100 
 -j DROP
iptables -A FORWARD -p tcp -i eth0 
--dport 139 -m recent --nam e badhost --set 
-j DROP

block quick inet proto tcp from <badhost> 
port 139
pass in inet proto tcp from <badhost> port 139 
flags S /S A k eep state (m ax-src-conn-rate 60/100,
overload <badhost> flush global)
s tring (per bloccare i pacchetti che
contengono una determinata stringa)

iptables -A INPUT -m string --string
'cmd.exe' 
-j DROP

Non esiste un equivalente in Pf; l'utilizzo di
un Ids al posto di questo tipo di regole evita
molti falsi positivi.
tim e (Per accettare un pacchetto in base
all'orario)

iptables -A IN PUT -m tim e --tim estart 8:00 
--tim estop 18:00 --days
Mon,Tue,Wed,Thu,Fri 
-j ACCEPT

Con Pf occorre utilizzare due configurazioni
differenti del firewall o utilizzare un proxy
quando possibile.
tc p-m s s (limita la dimensione massima del
pacchetto, utile se si hanno problemi con
router/firewall che bloccano alcuni pacchetti
frammentati)

iptables -A FORWARD -p tcp --tcp-flags 
S YN ,RS T S YN -j TCPMS S --set-m ss 1460

scrub in on $ext_if m ax-m ss 1460
ttl (per modificare il valore del ttl (in base al
time-to-live si può risalire al sistema
operativo di un computer))

iptables -t m angle -A OUTPUT -j TTL --ttl-set
126

scrub in on $ext_if m in-ttl 126
Per gestire protocolli complessi come ftp e
h323 dietro un firewall, Pf utilizza degli
applicativi esterni come ftp-proxy o siproxd.

Grazie a P-o-m con N etfilter si possono
gestire semplicemente protocolli come ftp,
h323, snmp e pptp.
Dec 18 14:30:59 fw kernel: FW - TCP
Rejected IN= eth1 OUT=
MAC= 00:10:a7:08:9c:65:00:00:0c:3e:36:47:
08:00 SRC= 192.168.0.1 DST= 192.168.1.10
LEN= 48 TOS= 0x00 PREC= 0x00 TTL= 124
ID= 11585 DF PROTO= TCP SPT= 1803
DPT= 80 WINDOW= 32768 RES= 0x00 SYN
URGP= 0

Aug 10 12:21:17.976796 rule 1/(match) [uid
0, pid 18979] block out on rl0:
192.168.0.1.26562 > 192.168.1.10.80: S
1230309818:1230309818(0) win 16384
Per semplificare l'analisi dei log Iptables
permette attraverso Ulogd il salvataggio dei
log in un database, ciò permette la creazione
di grafici in maniera semplice.

Anche se Pf salva le informazioni in formato
binario esistono comunque dei software per
analizzare i log.
Tramite Nulog e Ulogd è possibile controllare
da una semplice interfaccia web i log del firewa
Symon permette un controllo generale del firew
Con Pfstat si realizzano grafici per analizzare
quanti pacchetti sono stati bloccati dal firewa
Per un controllo in tempo reale del firewall *B
si può utilizzare pftop, se si utilizza Linux si pu
analizzare il file /proc/net/ip_conntrack .
Un attacco Syn-Flood letteralmente significa
"inondazione di pacchetti di tipo Syn".

Tutte le volte che un utente fa click su di un link
di una pagina web richiede l'apertura di una
connessione (di tipo TCP) verso quel sito;
questo avviene seguendo una serie di passi,
il primo dei quali consiste nell'invio di un pacch
TCP che richiede l'apertura di una connessione.
Le regole di funzionamento del protocollo TCP
esigono che il sistema risponda allocando
alcune risorse per la connessione.
Se si programma opportunamente un semplice P
è possibile richiedere l'apertura di diverse migli
di connessioni al secondo, che "inondando" il se
ne consumano rapidamente tutta la memoria,
bloccandolo o mandandolo in crash.

GNU/Linux e OpenBSD “affrontano” questo
problema in maniera del tutto differente utilizza
uno i syncookies e l'altro il synproxy.
N etfilter utilizza il sistema dei syncookies,
rispondendo con dei pacchetti validi agli attacc
di tipo syn flood (DoS ), in questo modo
la connessione non viene interrotta e la coda
dei pacchetti che bloccherebbero il server
viene svuotata più velocemente e senza provoc
il blocco del sistema.
Pf utilizza invece il synproxy;
ogni volta che avviene una connessione fra
un host esterno alla lan e un client è il firewall
che stabilisce la connessione;
una volta che il collegamento tcp è avvenuto
lo scambio dei pacchetti avviene fra client
e host esterno.
In questo modo si previene qualsiasi tipo
di problema derivante da attacchi di questo ge
anche se diretti ad un server protetto dal firew
e non al firewall stesso.
Alcune particolatità del firewall Pf che non son
presenti nel firewall GNU/Linux sono la
normalizzazione del traffico tcp e il fingerprint
La direttiva scrub serve per normalizzare
il traffico tcp da e verso la lan protetta dal firew
alcuni utili parametri della direttiva scrub sono

no-df ->     vengono scartati dei pacchetti non
           corretti, in particolare i pacchetti
           frammentati con il bit "don't fragme
           settato (alcune implementazioni di N
           generano questi tipi di pacchetti
           scorretti)
random -id   ->       sostituisce il numero
                    identificativo
nell'intestazione
                    del pacchetto ip con un
numero
                    casuale rendendo più
difficile
                     l'identificazione del
sistema
                    operativo che sta
reassem ble tcp   ->       normalizza il traffico
tcp
                       attraverso queste
operazioni:
  ttl : non permette a nessuna delle 2
parti           della comunicazione tcp di
                  diminuire il valore del ttl
per               prevenire attacchi di tipo
DoS al               firewall stesso.
tim estam p m odulation: viene sostituito il
              timestamp dell'intestazione del
pacchetto           tcp con un numero casuale;
         dal timestamp si può risalire a
quando è            stato acceso il computer
che sta                  generando il traffico
tcp e può essere             utilizzato per
inserire pacchetti
contraffatti all'interno della
     comunicazione tcp in atto.
Un'altra interessante caratteristica di Pf è il
fingerprinting; all'interno delle regole del firewall
è possibile infatti specificare anche il sistema
operativo dell'host.
Il fingerprinting si basa sul fatto che ogni sistema
operativo ha un'implementazione diversa dello
stack tcp/ip, analizzando quindi il tr affico di rete
si può stabilire quali sono i sistemi operativi che lo
generano.

block in proto tcp from any port 25 os "Window s
95"
Sia con N etfilter che con Pf è possibile
limitare il traffico peer-to-peer tramite
l'analisi del traffico tcp.
L'operazione è dispendiosa a livello di cpu in
quanto va scomposto tutto il traffico tcp,
analizzato e poi ricomposto.
Per fare questa operazione vengono utilizzati
strumenti come gli IDS; esistono delle patch
a iptables/netfilter (ipp2p, l7filter) che
permettono l'analisi del traffico p2p.
Tramite questi moduli è possibile creare nel
firewall regole come:
iptables -A FORWARD -m ipp2p --kazaa -j
DROP
per eliminare il traffico prodotto da Kazaa.
Esistono parametri appositi anche per
edonkey, winmx e altri.

Un approccio con minor rischio di falsi
positivi e implementabile sia su Linux che su
OpenBSD è quello dell'integrazione del
Uno dei più noti IDS è S nort, questo software
analizza il traffico tcp a livello 7 (livello
applicazione nella pila ISO/OSI) e esegue dei
comandi in occasione di determinati eventi.

E' possibile integrare questo Intrusion Detection
System con il firewall mediante l'uso di S nortsam
che permette a S nort di bloccare gli host
attaccanti interagendo con il firewall.
S nortsam supporta vari firewall fra i quali
iptables,
Pf, Check point Firew all-1, Cisco Pix e Microsoft
Isa server.
Una semplice e comoda configurazione del
traffic s hape r è quella dell'aumento della
priorità dei pacchetti ACK.
In presenza di una connessione adsl
(asincrona quindi) quando si genera molto
traffico in upload cala anche la velocità di
download.
Questo avviene perchè il traffico che viene
generato è sempre nei due sensi e quindi se
viene saturata la banda in upstream si riduce
anche la velocità del traffico in downstream.
Per sopperire a questo problema è possibile
dare maggiore priorità al download.

In questo caso viene considerata una banda
reale in upstream di 100kb (128kb m eno
l'overhead del pppoe)

tc qdisc add dev ppp0 root tbf rate 100kbit 
latency 50ms burst 1540
altq on $ext_if priq bandwidth 100Kb queue 
{ q_pri, q_def }
queue q_pri priority 7
queue q_def priority 1 priq(default)

pass out on $ext_if proto tcp from $ext_if to
any  flags S/SA keep state queue (q_def,
q_pri)
pass in on $ext_if proto tcp from any to
$ext_if  flags S/SA keep state queue (q_def,
Aumentando la priorità dei pacchetti con il flag
si velocizza il download
Le principali regole da seguire nella scelta del f
più adatto alle esigenze della lan da proteggere

●Utilizzare un sistema operativo e un firewall ch
conosce.
●Analizzare bene tutte le esigenze della lan che


andrà a proteggere e le applicazioni che verrann
utilizzate dai computer della lan.
●Valutare bene le caratteristiche e le potenzialit


del firewall che si intende utilizzare.
●Tener presente che per proteggere una rete no


un buon firewall, occorre anche un antivirus ins
nei computer e, possibilmente, un proxy.
Riferimenti & risorse

“Giovanni Bechis” <g.bechis@snb.it>

    http://www.snb.it/smau2006

   http://www.benzedrine.cx/pf.html

       http://www.undeadly.org

       http://www.netfilter.org

Pf e netfilter, analisi dei firewall open source

  • 1.
    Pf e Netfilter, analisidei firewall Open Source “Giovanni Bechis” <g.bechis@snb.it>
  • 2.
    I principali firewallOpen Source sono: Netfilter, il firewall di Linux e Pf, il firewall dei sistemi *BSD. Le differenze più evidenti fra i due firewall sono: ✔configurazione ✔comportamento con protocolli complessi ✔gestione dei log ✔limitazione della banda
  • 3.
    La configurazione diNetfilter viene fatta utilizzando il comando iptables, quella di Pf modificando il file /etc/pf.conf. Se non si necessita di caratteristiche avanzate si possono utilizzare anche delle interfaccie grafiche per la configurazione.
  • 5.
    Per poter utilizzarele caratteristiche più avanzate dei due firewall occorre scrivere la configurazione senza basarsi su interfaccie grafiche più semplici ma limitative. In Pf anche le caratteristiche più avanzate sono già incluse, per quanto riguarda Netfilter/Iptables occorre talvolta affidarsi a Patch-O-Matic.
  • 6.
    Patch-O-Matic è unaserie di patch per il kernel Linux e per il comando iptables che aggiungono funzionalità al firewall. Le funzionalità che vengono aggiunte vanno da un filtraggio dei pacchetti maggiormente granulare alla possibilità di salvare i log in un database e a tanto altro ancora. Molte di queste funzionalità sono già integrate nel firewall Pf.
  • 7.
    iplim it (limitail numero di connessioni su una determinata porta da un determinato host) iptables -A IN PUT -p tcp --syn --dport ssh -m iplim it --iplim it-above 10 -j REJECT block quick inet proto tcp from <badhost> port ssh pass in inet proto tcp from <badhost> port ssh flags S /S A keep state (m ax-src-conn 10, overload <badhost> flush)
  • 8.
    m port (Permettedi fare il match di più porte in una sola regola) iptables -A IN PUT -p tcp -m m port --ports 20:23,80 -j DROP block quick inet proto tcp from any port { 20:23, 80 }
  • 9.
    quota (Permette dibloccare i pacchetti una volta raggiunta una determinata quantità di traffico) iptables -A IN PUT -p tcp --dport 80 -m quota --quota 52428800 -j ACCEPT iptables -A IN PUT -p tcp --dport 80 -j DROP non è possibile in Pf se non utilizzando le apposite regole per limitare la banda
  • 10.
    random (Per bloccareun numero di pacchetti a caso) iptables -A IN PUT -p icm p --icm p-type echo-request -m random --average 50 -j DROP block in inet proto icm p all icm p-type { echoreq } probability 50%
  • 11.
    re c ent (Limita il numero di connessioni da un determinato host) iptables -A FORWARD -m recent --nam e badhost --rcheck --seconds 60 --hitcount 100 -j DROP iptables -A FORWARD -p tcp -i eth0 --dport 139 -m recent --nam e badhost --set -j DROP block quick inet proto tcp from <badhost> port 139 pass in inet proto tcp from <badhost> port 139 flags S /S A k eep state (m ax-src-conn-rate 60/100, overload <badhost> flush global)
  • 12.
    s tring (perbloccare i pacchetti che contengono una determinata stringa) iptables -A INPUT -m string --string 'cmd.exe' -j DROP Non esiste un equivalente in Pf; l'utilizzo di un Ids al posto di questo tipo di regole evita molti falsi positivi.
  • 13.
    tim e (Peraccettare un pacchetto in base all'orario) iptables -A IN PUT -m tim e --tim estart 8:00 --tim estop 18:00 --days Mon,Tue,Wed,Thu,Fri -j ACCEPT Con Pf occorre utilizzare due configurazioni differenti del firewall o utilizzare un proxy quando possibile.
  • 14.
    tc p-m ss (limita la dimensione massima del pacchetto, utile se si hanno problemi con router/firewall che bloccano alcuni pacchetti frammentati) iptables -A FORWARD -p tcp --tcp-flags S YN ,RS T S YN -j TCPMS S --set-m ss 1460 scrub in on $ext_if m ax-m ss 1460
  • 15.
    ttl (per modificareil valore del ttl (in base al time-to-live si può risalire al sistema operativo di un computer)) iptables -t m angle -A OUTPUT -j TTL --ttl-set 126 scrub in on $ext_if m in-ttl 126
  • 16.
    Per gestire protocollicomplessi come ftp e h323 dietro un firewall, Pf utilizza degli applicativi esterni come ftp-proxy o siproxd. Grazie a P-o-m con N etfilter si possono gestire semplicemente protocolli come ftp, h323, snmp e pptp.
  • 17.
    Dec 18 14:30:59fw kernel: FW - TCP Rejected IN= eth1 OUT= MAC= 00:10:a7:08:9c:65:00:00:0c:3e:36:47: 08:00 SRC= 192.168.0.1 DST= 192.168.1.10 LEN= 48 TOS= 0x00 PREC= 0x00 TTL= 124 ID= 11585 DF PROTO= TCP SPT= 1803 DPT= 80 WINDOW= 32768 RES= 0x00 SYN URGP= 0 Aug 10 12:21:17.976796 rule 1/(match) [uid 0, pid 18979] block out on rl0: 192.168.0.1.26562 > 192.168.1.10.80: S 1230309818:1230309818(0) win 16384
  • 18.
    Per semplificare l'analisidei log Iptables permette attraverso Ulogd il salvataggio dei log in un database, ciò permette la creazione di grafici in maniera semplice. Anche se Pf salva le informazioni in formato binario esistono comunque dei software per analizzare i log.
  • 19.
    Tramite Nulog eUlogd è possibile controllare da una semplice interfaccia web i log del firewa
  • 23.
    Symon permette uncontrollo generale del firew
  • 24.
    Con Pfstat sirealizzano grafici per analizzare quanti pacchetti sono stati bloccati dal firewa
  • 25.
    Per un controlloin tempo reale del firewall *B si può utilizzare pftop, se si utilizza Linux si pu analizzare il file /proc/net/ip_conntrack .
  • 26.
    Un attacco Syn-Floodletteralmente significa "inondazione di pacchetti di tipo Syn". Tutte le volte che un utente fa click su di un link di una pagina web richiede l'apertura di una connessione (di tipo TCP) verso quel sito; questo avviene seguendo una serie di passi, il primo dei quali consiste nell'invio di un pacch TCP che richiede l'apertura di una connessione. Le regole di funzionamento del protocollo TCP esigono che il sistema risponda allocando alcune risorse per la connessione.
  • 27.
    Se si programmaopportunamente un semplice P è possibile richiedere l'apertura di diverse migli di connessioni al secondo, che "inondando" il se ne consumano rapidamente tutta la memoria, bloccandolo o mandandolo in crash. GNU/Linux e OpenBSD “affrontano” questo problema in maniera del tutto differente utilizza uno i syncookies e l'altro il synproxy.
  • 28.
    N etfilter utilizzail sistema dei syncookies, rispondendo con dei pacchetti validi agli attacc di tipo syn flood (DoS ), in questo modo la connessione non viene interrotta e la coda dei pacchetti che bloccherebbero il server viene svuotata più velocemente e senza provoc il blocco del sistema.
  • 29.
    Pf utilizza inveceil synproxy; ogni volta che avviene una connessione fra un host esterno alla lan e un client è il firewall che stabilisce la connessione; una volta che il collegamento tcp è avvenuto lo scambio dei pacchetti avviene fra client e host esterno. In questo modo si previene qualsiasi tipo di problema derivante da attacchi di questo ge anche se diretti ad un server protetto dal firew e non al firewall stesso.
  • 30.
    Alcune particolatità delfirewall Pf che non son presenti nel firewall GNU/Linux sono la normalizzazione del traffico tcp e il fingerprint
  • 31.
    La direttiva scrubserve per normalizzare il traffico tcp da e verso la lan protetta dal firew alcuni utili parametri della direttiva scrub sono no-df -> vengono scartati dei pacchetti non corretti, in particolare i pacchetti frammentati con il bit "don't fragme settato (alcune implementazioni di N generano questi tipi di pacchetti scorretti)
  • 32.
    random -id -> sostituisce il numero identificativo nell'intestazione del pacchetto ip con un numero casuale rendendo più difficile l'identificazione del sistema operativo che sta
  • 33.
    reassem ble tcp -> normalizza il traffico tcp attraverso queste operazioni: ttl : non permette a nessuna delle 2 parti della comunicazione tcp di diminuire il valore del ttl per prevenire attacchi di tipo DoS al firewall stesso.
  • 34.
    tim estam pm odulation: viene sostituito il timestamp dell'intestazione del pacchetto tcp con un numero casuale; dal timestamp si può risalire a quando è stato acceso il computer che sta generando il traffico tcp e può essere utilizzato per inserire pacchetti contraffatti all'interno della comunicazione tcp in atto.
  • 35.
    Un'altra interessante caratteristicadi Pf è il fingerprinting; all'interno delle regole del firewall è possibile infatti specificare anche il sistema operativo dell'host. Il fingerprinting si basa sul fatto che ogni sistema operativo ha un'implementazione diversa dello stack tcp/ip, analizzando quindi il tr affico di rete si può stabilire quali sono i sistemi operativi che lo generano. block in proto tcp from any port 25 os "Window s 95"
  • 36.
    Sia con Netfilter che con Pf è possibile limitare il traffico peer-to-peer tramite l'analisi del traffico tcp. L'operazione è dispendiosa a livello di cpu in quanto va scomposto tutto il traffico tcp, analizzato e poi ricomposto. Per fare questa operazione vengono utilizzati strumenti come gli IDS; esistono delle patch a iptables/netfilter (ipp2p, l7filter) che permettono l'analisi del traffico p2p.
  • 37.
    Tramite questi moduliè possibile creare nel firewall regole come: iptables -A FORWARD -m ipp2p --kazaa -j DROP per eliminare il traffico prodotto da Kazaa. Esistono parametri appositi anche per edonkey, winmx e altri. Un approccio con minor rischio di falsi positivi e implementabile sia su Linux che su OpenBSD è quello dell'integrazione del
  • 38.
    Uno dei piùnoti IDS è S nort, questo software analizza il traffico tcp a livello 7 (livello applicazione nella pila ISO/OSI) e esegue dei comandi in occasione di determinati eventi. E' possibile integrare questo Intrusion Detection System con il firewall mediante l'uso di S nortsam che permette a S nort di bloccare gli host attaccanti interagendo con il firewall. S nortsam supporta vari firewall fra i quali iptables, Pf, Check point Firew all-1, Cisco Pix e Microsoft Isa server.
  • 39.
    Una semplice ecomoda configurazione del traffic s hape r è quella dell'aumento della priorità dei pacchetti ACK. In presenza di una connessione adsl (asincrona quindi) quando si genera molto traffico in upload cala anche la velocità di download. Questo avviene perchè il traffico che viene generato è sempre nei due sensi e quindi se viene saturata la banda in upstream si riduce anche la velocità del traffico in downstream.
  • 40.
    Per sopperire aquesto problema è possibile dare maggiore priorità al download. In questo caso viene considerata una banda reale in upstream di 100kb (128kb m eno l'overhead del pppoe) tc qdisc add dev ppp0 root tbf rate 100kbit latency 50ms burst 1540
  • 41.
    altq on $ext_ifpriq bandwidth 100Kb queue { q_pri, q_def } queue q_pri priority 7 queue q_def priority 1 priq(default) pass out on $ext_if proto tcp from $ext_if to any flags S/SA keep state queue (q_def, q_pri) pass in on $ext_if proto tcp from any to $ext_if flags S/SA keep state queue (q_def,
  • 42.
    Aumentando la prioritàdei pacchetti con il flag si velocizza il download
  • 43.
    Le principali regoleda seguire nella scelta del f più adatto alle esigenze della lan da proteggere ●Utilizzare un sistema operativo e un firewall ch conosce. ●Analizzare bene tutte le esigenze della lan che andrà a proteggere e le applicazioni che verrann utilizzate dai computer della lan. ●Valutare bene le caratteristiche e le potenzialit del firewall che si intende utilizzare. ●Tener presente che per proteggere una rete no un buon firewall, occorre anche un antivirus ins nei computer e, possibilmente, un proxy.
  • 44.
    Riferimenti & risorse “GiovanniBechis” <g.bechis@snb.it> http://www.snb.it/smau2006 http://www.benzedrine.cx/pf.html http://www.undeadly.org http://www.netfilter.org