Sicuramente avrete sentito parlare di OpenBSD con il suo potente firewall IPfilter. Alcuni sysadmin di mia conoscenza con IPfilter hanno resistito a smurf di 10 MBit con una 2mbit di linea senza nessun crash di sistema. OpenBSD è il sistema più scarno della storia degli UNiX (forse). Infatti nella sua installazione ha pochissimi pacchetti di default, a malapena ci sta l’XSystem (che consiglio di ricompilare).
Passiamo all’installazione
Se avete un buon hardware non avrete sicuramente problemi, basta inserire il CD. Se invece avete hardware un poco particolare e nemmeno il BIOS vi permette il boot da CD… siete inguaiati.
Comunque potete trovare una lista di compatibilità su http://www.openbsd.org
Prendiamo ad esempio il caso (ormai) tragico: un sistema senza supporto di CD bootable. Andiamo nella directory /cdrom/2.9/i386 e troviamo questi files:
code>
floppy29.fs ImageFloppy standard di avvio di BSD supporta cdrom EIDE e Schede di rete
floppyB29.fs ImageFloppy di avvio con supporto di schede scsi e gigabit ethernet
floppyC29.fs PCMCIA.
Per scrivere queste immagini bisogna usare o il rawrite oppure da Linux:
# fdformat /dev/fd0 # dd if=image.fs of=/dev/fd0
Se tutto va bene, quando riavviamo il sistema dovremmo avere il prompt (sia che il boot sia avvenuto dal CDRom che dal dischetto) boot>. Continuiamo premendo Enter. CONSIGLIO vivamente di assegnare un HARD DISK sano a BSD perchè non è facile partizionare in modo CHS. Quindi quando vi verrà chiesto di assegnare tutto l’hard disk a OpenBSD rispondete Y. Rispondendo alle solite domande, tipo configurazione della rete e medium di installazione il sistema si installa. NON installate XFree, conviene ricompilarlo (la bellezza di OpenBSD è proprio questa, il fatto che sia molto leggera). Settate la password per il root e riavviate.
Ok, ora eccoci nel nostro nuovo sistema BSD. Facciamo il login da root e subito ci accorgiamo di due cose:
- 1) la shell non è molto user-friendly
- 2) manca la tastiera italiana.
Per risolvere il primo problema basta installare il pacchetto della nostra e familiarissima bash:
# mount /dev/cd0a /mnt (cd0a,cd0b,ecc) # cd /mnt/2.9/packages/i386 # pkg_add bash-2.05.tgz
Aggiungiamo in /etc/shells la linea /usr/local/bin/bash
# echo "/usr/local/bin/bash" >> /etc/shells
e cambiamo shell a root:
# chsh -s /usr/local/bin/bash root
Rifacciamo il login e abbiamo la nostra bash. Ora abbiamo un’altra cosa da cacciare… la richiesta del tipo di terminale all’user root.
Questo lo eliminiamo dal file .profile nella directory root.
Per quanto riguarda la tastiera bisogna digitare:
# wsconsctl -w encoding=it
e conviene aggiungerlo in /etc/rc.local.
Passiamo ora alla potenza di OpenBSD: il firewall IPFilter
Innanzitutto abilitiamolo, bisogna modificare il file /etc/rc.conf e sostituire la linea ipfilter=NO in ipfilter=YES e poi dobbiamo editare il file /etc/ipf.rules.
La regola più semplice per configurare IPfilter è quella di fare passare tutti i pacchetti ovunque essi siano destinati. Inseriamo in /etc/ipf.rules:
pass in from any to any pass out from any to any
Per configurare invece IPfilter in modo che serva a qualcosa ci dobbiamo basare su qualche esempio che troviamo nella directory /usr/share/ipf, prendiamo ad esempio firewall (ricordiamo che solitamente le interfacce di rete sotto OpenBSD si chiamano rl0..x).
Creiamo il file /etc/ipf.rules con il seguente contenuto.
Prima facciamo passare ogni pacchetto:
pass out from any to any pass in from any to any
Cacciamo i pacchetti frammentati e gli ICMP che possono dossare o crashare la macchina:
block in log quick on ppp0 proto icmp from any to any icmp-type redir block in log quick on ppp0 proto tcp/udp all with short block in log quick on ppp0 from any to any with ipopts.
Ora cacciamo le DoS che ci possono arrivare da IP spoofato.
Non possiamo ricevere dall’esterno un IP interno:
block in log quick on ppp0 from 192.168.0.0/24 to any block in log quick on ppp0 from localhost to any block in log quick on ppp0 from 0.0.0.0/32 to any block in log quick on ppp0 from 255.255.255.255/32 to any
Adesso dovremmo essere “abbastanza” protetti da attacchi DoS.
Ora blocchiamo il traffico UDP eccetto quello dedicato al DNS server:
block in on ppp0 proto udp from any to any block in log on ppp0 proto udp from any to any port = sunrpc pass in on ppp0 proto udp from any to any port = domain.
Facciamo passare i dati per:
ftp pass in on ppp0 proto tcp from any to any port 1024 >< 5000
ed accettiamo le connessioni solo ad SSHD e a FTPD dall’esterno e ovviamente dal web:
pass in on ppp0 proto tcp from any to any port = www pass in on ppp0 proto tcp from any to any port = ssh pass in on ppp0 proto tcp from any to any port = 21
Salviamo e facciamo il reboot: ora dovremmo essere protetti.