span.fullpost {display:inline;}

martedì 16 giugno 2009

Realizzare un personal firewall con Virtualbox - 2/2

Nella prima parte abbiamo realizzato un piccolo fw utilizzando una macchina virtuale interna all'host da proteggere.
Ci sono dei pro e dei contro nell'adottare una soluzione di questo tipo. Sicuramente se volete proteggere un pc non molto dotato dal punto di vista hw questa strada potrebbe non essere ottimale.
Tuttavia le richieste della macchina virtuale non sono così eccessive, la quantità di memoria riservata può essere abbassata a 256 MB, potendo scendere ancora se si vuole utilizzare solo come fw. In questo caso è bene, comunque, non scendere sotto i 128MB.
Facciamo un passo indietro. Come avevo scritto l'esigenza di avere una soluzione di questo tipo nasce dal fatto che non mi fido un granché dei tools di sicurezza per microsoft. Questo vale, quindi, anche per i prodotti antivirus.
Il personal fw, quindi, può essere espanso per diventare anche un proxy server per http e non solo.
La prima prova mettendo insieme squid, clamav, apache e squidguard ha dato esiti altalenanti, in paricolare risultava difficoltosa l'interazione tra squidguard e clamav. La seconda soluzione è molto ma molto più semplice :D
E' bene notare che se viene installato un programma infetto sul pc bisognerà utilizzare un antivirus in locale. Questa soluzione permette solo una protezione dalla rete, non da eventuali virus presenti su dischi esterni, chiavette usb... Pertanto è comunque consigliabile mantenere anche l'antivirus (aggiornato) su pc windows.
Infine io ho il problema di dovermi autenticare su un ulteriore proxy ISA per avere l'accesso ad internet, quindi installerò anche un proxy in grado di autenticarsi vs ISA server. Conosco 2 prodotti, ntlmap in python e cntlmap in c. La versione in c è estremamente stabile e performante, quindi userò quella. Lo schema qui sotto riporta come sarà la funzione di proxy:




Ci serve il seguente sw:
-clamav
-HAVP

Potrebbe essere necessario che il sistema abbia installato anche: il compilatore gcc, make, curl e libcurl (in debian è necessario preinstallare i seguenti pacchetti (non presenti nell'installazione minima): gcc, make, curl e libcurl4-gnutls-dev con i relativi prerequisiti.
Passiamo, quindi, all'installazione:

fwproxy:~# apt-get install clamav
...
apt-get install gcc make curl libcurl4-gnutls-dev
...
fwproxy:~# apt-get install havp

Prima di proseguire è necessario creare un tempfs montato su /dev/shm, cioè un fs allocato in memoria. Questo viene utilizzato per le transazioni di clamav e di havp, in modo da velocizzare i processi di scansione.

fwproxy:~# mkdir /var/tmpmem
fwproxy:~# mount -t tmpfs /dev/shm/ /var/tmpmem/
fwproxy:~# mkdir -p /var/tmpmem/spool/havp
fwproxy:~# chown -R havp:havp /var/tmpmem/
fwproxy:~# mount | grep tmpmem
/dev/shm on /var/tmpmem type tmpfs (rw)
fwproxy:~# umount /var/tmpmem/

La dimensione di questo fs dipende dalla memoria allocata sul sistema.
Ho smontato il fs in quanto è necessario introdurre una entry in /etc/fstab in modo che al reboot sia ricreato e rimontato. Aggiungiamo la seguente riga:

/dev/shm /var/tmpmem tmpfs rw,mand,uid=106,gid=108 0 0

Le opzioni di mount sono: lock mandatorio (come richiesto dalla documentazione) e fs di proprietà dell'utenza applicativa hapv (il gid e l'uid corrispondono all'utente hapv nel mio sistema)
Ok, ora passiamo alla configurazione:
il file da modificare è, nella mia distro, /etc/havp/havp.config. La mia configurazione è la seguente

BIND_ADDRESS 192.168.12.1
SERVERNUMBER 10
MAXSERVERS 100
SCANTEMPFILE /var/tmpmem/spool/havp/havp-XXXXXX
TEMPDIR /var/tmpmem
ENABLECLAMLIB true
PARENTPROXY localhost
PARENTPORT 4444

Ci sono molte altre voci, ma il file di configurazione è molto ben commentato. Le opzioni che ho modificato riguardano l'ip sul quale deve ascoltare il proxy (si può anche mettere in listen su tutti gli indirizzi dato che il firewall protegge l'interfaccia interna, tuttavia è meglio limitare il listen all'interfaccia interna). Ho modificato i valori di base per le connessioni concorrenti, ho indicato di usare libclamv come motore antivirus, tuttavia si possono integrare anche altri antivirus. Il file di configurazione ha già i template inseriti per altri programmi av. Infine ho indicato a havp che non si deve connettere direttamente in uscita, ma deve passare attraverso il proxy cntlm che, come dicevo, serve ad autenticarmi in uscita dal firewall ISA.
Per verificare il funzionamento provo a scaricare un file che contiene la firma di un virus da eicar e qui sotto vedete il risultato :)

Volendo poi fare le cose per bene si può anche personalizzare la pagina che viene restituita in caso di virus...
Ecco, per ora è tutto... se mi viene in mente qualche ulteriore accrocchio provvederò a postarlo.

p.s.
L'ultima versione di Virualbox (2.2.2.xxx) sembra avere dei problemi se la ram assegnata è inferiore a 256 MB. Consiglio almeno 381 MB e max 16 per il video. Se usate solo il fw senza proxy allora 256 possono bastare e se mettete al massimo 16 MB destinati alla scheda video non dovreste avere problemi :)


0 commenti: