330 likes | 457 Views
PF ed OpenBSD: Tecniche di base . Intervento tenuto da Gabriele Biondo (gbiondo@i-nfinity.com) per. id (sostituisce il vecchio, deprecato whoami). GABRIELE BIONDO. Amministratore di sistema per più facoltà dell’Università di Bologna Tecnico coinvolto nel progetto Unisys Hotline
E N D
PF ed OpenBSD:Tecniche di base Intervento tenuto da Gabriele Biondo (gbiondo@i-nfinity.com) per
id (sostituisce il vecchio, deprecato whoami) GABRIELE BIONDO • Amministratore di sistema per più facoltà dell’Università di Bologna • Tecnico coinvolto nel progetto Unisys Hotline • Formatore per Corsi del Fondo Sociale Europeo • Collaboratore con OpenBEER • Certificato ISECOM OPST Interessi • Firewalling e sicurezza di rete • Modelli matematici e ottimizzazione di algoritmi • Programmazione in C e Perl
Le domande fondamentali Perché OpenBSD • Sistema “sicuro per default”, facilmente hardenizzabile • Sistema Free (o quasi) • Sistema OpenSource • Sistema in continua evoluzione • Sistema veramente stabile OpenBSD risulta essere la piattaforma di partenza ideale per costruire un firewall
Le domande fondamentali Perché PF • Grammatica veramente semplice • Sistema di regole molto pratico • Configurazione modificabile a runtime • Stabilità assoluta del firewall • Caratteristiche avanzatissime (es: scrubbing) • Abbondanza di documentazione free o a basso costo PF è un software assai potente, che offre caratteristiche presenti soltanto in prodotti commerciali di notevole caratura, ad un prezzo esiguo.
Le domande fondamentali Chi usa OpenBSD + PF • Adobe Systems • INFN (Istituto Nazionale Fisica Nucleare) di Firenze • Azienda Ospedaliera “Carlo Poma” di Mantova Solo tre nomi, la cui rilevanza dovrebbe far pensare La lista potrebbe essere arbitrariamente allungata…
PF – questo sconosciuto Dove risiede PF PF è un pacchetto integrato nel Kernel di OpenBSD, A partire dalla versione 3.0 in poi.
PF – questo sconosciuto Cosa è PF PF è un programma – ad un input costituito da un file di regole ed un traffico di rete, associa un output costituito da un file di log e dal comportamento del nuovo traffico “shaped”
Configurare PF Il file di configurazione di PF • /etc/pf.conf • Composto di più sezioni • L’ordine delle sezioni è prefissato, ma modificabile • Le regole vengono valutate in sequenza
Configurare PF Le sezioni di pf.conf • macro • tabelle • opzioni • regole di scrub • regole di queuing • regole di redirezione/NAT • regole di filtraggio
Configurare PF pf.conf – un esempio di configurazione • Supponiamo di trovarci nella seguente condizione: • Macchina intel compatibile • 2 schede di rete Realtek • rl0: • Connessa alla rete interna (192.168.1.0/24) • ip: 192.168.1.1 • web server: 192.168.1.2 • mail server: 192.168.1.3 • rl1: • Connessa alla WAN • ip fisso: aaa.bbb.ccc.ddd/28 • Connessa ad un router che lega la rete ad una parte • non protetta dal firewall e ad internet
Configurare PF Modelliamo la rete interna con delle semplici macro • # MACRO • # Interfaccia di rete interna • int_if = “rl0” • int_ip=“192.168.1.1” • int_net=“192.168.1.0/24” • # Interfaccia di rete esterna • ext_if = “rl1” • ext_ip=“aaa.bbb.ccc.ddd” • ext_net=“aaa.bbb.ccc.ddd/28” • # altre macro utili • mebserver=“192.168.1.2” • mailserver=“192.168.1.3”
Configurare PF Anatomia generale di una regola:
Configurare PF VERBI Fa passare il pacchetto pass Blocca il pacchetto block Specifica come fare NATting nat Specifica come “incrociare” le porte rdr Specifica di scrivere la entry sul file di log log
Configurare PF DIREZIONI
Configurare PF SORGENTE/DESTINAZIONE • Indirizzo IPv4/IPv6 singolo: • 192.168.0.33/32 • FEC0:A702:0000:0000:0000:448A:0000:0005 • Sottorete: • 192.168.0.0/28 • FEC0:A702::::448A::0005/64 • Possibilità di aggiungere un servizio: • 192.168.1.10 port 80 • Possibilità di specificare un protocollo: • proto tcp • proto {tcp,udp}
Configurare PF Le prime regole di default • Siamo ora in grado di potere scrivere le prime regole. • Come default, ammettiamo di tenere chiuso ogni tipo di comunicazione, • da e verso l’esterno. Apriremo poi quello che decideremo utile. • block in all • block out all • Una policy migliore, sebbene costosa, potrebbe essere: • block in log all • block out log all • Anche in questo caso, avremmo potuto utilizzare altre direttive che, per • esempio, permettono di filtrare sul protocollo. Ciò va comunque oltre lo • scopo di questa presentazione.
Configurare PF Situazione attuale Il firewall ha isolato la LAN da internet.
Configurare PF Un paio di idee… • In primo luogo, è necessario impostare i settaggi del natting: • nat on $ext_if from $int_net to any ->($ext_if) • Poi è importante ridirigere agli host giusti le chiamate www e smtp: • rdr on $ext_if proto tcp from any to $ext_ip \ • port www -> $webserver port www • rdr on $ext_if proto smtp from any to $ext_ip \ • port smtp -> $mailserver port smtp
Configurare PF Un paio di idee… • In primo luogo, vorremo aprire le connessioni provenienti da internet e • dirette al nostro server di posta ed al server web: • pass in on $ext_if proto tcp from any to $webserver \ • port www keep state • pass in on $ext_if proto tcp from any to $mailserver \ • port smtp keep state
Configurare PF Situazione attuale Tutte le chiamate al web ed al mail server provenienti dall’esterno vengono ora soddisfatte
Configurare PF Apriamo le porte… • Vogliamo permettere ai nostri utenti di connettersi, da dentro la rete a qualsiasi • host presente su internet • pass in on $ext_if from $int_net to any keep state • pass out in $ext_if from $int_net to $ext_net \ • modulate state
Configurare PF Situazione attuale • La situazione attuale è più complicata. • Il firewall permette agli host interni alla rete di connettersi a qualsiasi • servizio di qualsiasi host presente su internet • Il firewall rifiuta connessioni provenienti da internet, eccetto quelle dirette • al mail server ed al server web. • Il firewall permette la connessione agli host nella rete esterna. • Una nota – questa configurazione è altamente insicura ed è presentata qui • soltanto per motivi concernenti l’illustrazione del funzionamento delle regole • in pf. • Esplicitamente, sottolineiamo di non implementare questa configurazione nel • proprio laboratorio, se non per fini didattici.
Configurare PF Situazione finale Prendendo tutte le regole viste sinora, e mettendole insieme, abbiamo un file /etc/pf.conf teoricamente funzionante.
Configurare PF Situazione finale # MACRO # Interfaccia di rete interna int_if = “rl0” int_ip=“192.168.1.1” int_net=“192.168.1.0/24” # Interfaccia di rete esterna ext_if = “rl1” ext_ip=“aaa.bbb.ccc.ddd” ext_net=“aaa.bbb.ccc.ddd/28” # altre macro utili mebserver=“192.168.1.2” mailserver=“192.168.1.3” scrub in all
Configurare PF Situazione finale (continua) scrub in all #natting e redirezionamento nat on $ext_if from $int_net to any ->($ext_if) rdr on $ext_if proto tcp from any to $ext_ip \ port www -> $webserver port www rdr on $ext_if proto smtp from any to $ext_ip \ port smtp -> $mailserver port smtp
Configurare PF Situazione finale (continua) block in log all block out log all pass in on $ext_if proto tcp from any to $webserver \ port www keep state pass in on $ext_if proto tcp from any to $mailserver \ port smtp keep state pass in on $ext_if from $int_net to any keep state pass out in $ext_if from $int_net to $ext_net \ modulate state antispoof for $int_if antispoof for $ext_if
Risorse aggiuntive web www.openbsd.org http://www.benzedrine.cx/pf.html www.i-nfinity.com www.openbeer.it
Risorse aggiuntive web www.openbsd.org http://www.benzedrine.cx/pf.html www.i-nfinity.com www.openbeer.it
Risorse aggiuntive Libri che aiutano
Risorse aggiuntive Libri che aiutano
Risorse aggiuntive Libri che aiutano
Loose Leaves Ringraziamenti Matteo Cantoni, aka goony Franco e tutto lo staff di Proxima Solutions, Rimini Ilary Airoldi Lo staff del webbit Me stesso e la mia famiglia E per Elisa, che mi ha dimostrato che la saggezza non ha età: “Ci sono occasioni in cui un semplice ‘grazie’ non è abbastanza”