OpenBSD Transparent Firewall howto
OpenBSD Transparent Firewall Howto
Nota: Questo howto necessita come requisito minimo una preparazione di base, su sistemi UNIX/BSD/linux like.
Premessa
Nella configurazione tradizionale un firewall hardware possiede normalmente 2 o più schede di rete (NIC). Ad ogni scheda di rete è necessario assegnare un IP. Normalmente si assegna sul lato WAN l'indirizzo IP pubblico, sul lato LAN quello della rete privata da proteggere e all'eventuale terza scheda di rete che si utilizza solitamenter per la DMZ un terzo IP diverso dagli atri due.
Con OpenBSD è possibile configurare un firewall completamente trasparente, ossia un dispositivo con n+2 schede di rete senza alcun IP assegnato.
Questa configurazione è molto valida sotto alcuni punti di vista. Intanto non vengono utilizzati preziosi indirizzi IP. In secondo luogo il firewall non è raggiungibile in alcun modo dall'esterno (ne da WAN ne da LAN), ma solo da console poichè è trasparente.
I requisiti minimi per la macchina OpenBSD sono molto esigui:
- CPU x86 compatibile 133MHz or superiore
- 64 MB di RAM
- 1 GB hard disk
- 2 NICs
- OpenBSD 3.0 o superiore
Dopo avere installato OpenBSD (bastano 15 minuti), sarà sufficiente effettuare le seguenti configurazioni.
Disattivare tutti i servizi inutili: Nel file /etc/rc.conf effettuare le seguenti variazioni check_quotas=NO ntpd=NO sendmail_flags=NO sshd_flags=NO inetd=NO
Settare le schede in bridge mode:
Supponendo che le schede di rete della macchina si chiamino rl0 e rl1 (il nome potrebbe essere diverso a seconda del tipo di scheda di rete), effettuare le seguenti operazioni:ifconfig rl0 delete echo 'up' > /etc/hostname.rl0 ifconfig rl1 delete echo 'up' > /etc/hostname.rl1 echo 'add rl0 add rl1 up' > /etc/bridgename.bridge0
Riavviando la macchina, con il comando ifconfig -a trovere una voce simile a questa: bridge0: flags=41 <UP,RUNNING> mtu 1500. Ciò significa che la modalità bridge è operativa. Ora occorre abilitare il packet filtering, modificando nel file /etc/rc.conf la rigaPF=NO con PF=YES
bisogna anche abilitare il packet forwarding decommentando nel file /etc/sysctl.conf la riga
net.inet.ip.forwarding=1
Adesso bisogna definire le regole di filter. Visto che siamo in modalità bridge sarà sufficiente applicare le regole ad una sola interfaccia di rete.
Il file da modificare è /etc/pf.conf secondo l'esempio sotto indicato:
# Esempio minimo di filtro.# Tutto blindato dalla WAN verso la LAN. Tutto libero dalla LAN verso la WAN # # #definizione delle schede di rete int_if = "rl0" ext_if = "rl1" # Tutto libero per $int pass in quick on $int_if all pass out quick on $int_if all # Tutto bloccato per $ext in entrata con log block in log on $ext_if all # Tutto libero per $ext in uscita pass out on $ext_if proto udp all keep state pass out on $ext_if proto tcp all modulate state pass out on $ext_if proto icmp all keep state
Volendo rispondere al ping dall'esterno togliere il commento alla riga seguente # pass in on $ext_if proto icmp all keep state
Testare il funzionamento
Non ci resta che provare tutto, con il comando pfctl -f /etc/pf.conf
Per vedere i pacchetti filtrati dalla macchina usare il comando: tcpdump -i pflog0
Per vedere quali sono le regole caricate in memoria: pfctl -s rules
Buon lavoro a tutti e buone sperimentazioni OpenBSD Fast Q&A (Questions and Answers)
Q. Come pulire lo schermo al logout dell'utente?
A. Cambiare nel file /etc/gettytab la sezione
P|Pc|Pc console:\
:np:sp#9600:
aggiungendo la linea ":cl=\E[H\E[2J:"
alla fine in modo che diventi: P|Pc|Pc console:\ :np:sp#9600:\ :cl=\E[H\E[2J:
Q. (ri)creare il database di locate:A.
# /usr/libexec/locate.updatedb
oppure # sh /etc/weekly
Q. settare il proxy:A.
# export ftp_proxy="http://proxy.provider.dd:port/"
# export http_proxy="http://proxy.provider.dd:port/"
# per salvare i dati aggiungere le righe sopra al file .profile
Q. cambiare la shell di default:A.
# pkg_add bash_xx.x.tgz # echo "/usr/bin/local/bash" >> /etc/shells # chsh -s bash
- per caricare la tastiera italiana: # kbd it
Q. montare il cdromA.
# mkdir /mnt/cdrom (se non esiste giÓ)
# mount -v -t cd9660 /dev/cd0a /mnt/cdrom
Q. montare un floppy tipo BSDA.
# mkdir /mnt/floppy (se non esiste giÓ)
# mount /dev/fd0a /mnt/floppy
Q. m ontare un floppy tipo DOS
A.
# mkdir /mnt/floppy (se non esiste giÓ)
Q. smontare un floppy
# mount -v -t msdos /dev/fd0a /mnt/floppy
A. # umount /mnt/floppy
Q. aggiungere un pacchetto:
A. # pkg_add -v filenamexxx.tgz oppure
Q. rimuovere un pacchetto:
# pkg_add -v ftp.site.com/[path-to-package]/filename
A. # pkg_delete filenamexxx.tgz
Q. info su un pacchetto:
A. # pkg_info filenamexxx.tgz
Q. settare la data:
A. # date YYYYMMDDHHMM es.
Q. eliminare la richiesta del tipo di terminale al login
# date 199901271504 Set the current date to January 27th, 1999 3:04pm.
A. modificare il file .profile dentro a /root, cancellando
il punto interrogativo dalla linea:
eval '/usr/bin/tset -sQ \?$TERM'
Riferimenti:
http://www.muine.org/~hoang/openpf.html
http://ezine.daemonnews.org/200207/transpfobsd.html