Ecco come ho impostato il server proxmox per avere un firewall e il routing tramite un unico ip pubblico.
Dal pannello di controllo web abilitare eth0 con l’ip pubblico senza bridge e vmbr0 con un ip locale:
... auto eth0 iface eth0 inet static address 91.11.22.33 netmask 255.255.255.0 broadcast 91.11.22.255 gateway 91.11.22.254 auto vmbr0 iface vmbr0 inet static address 10.254.254.254 netmask 255.0.0.0 broadcast 10.255.255.255 bridge_ports none bridge_stp off bridge_fd 0 ... ...
Ora install shorewall
sudo aptitude install shorewall
Creo il file /etc/shorewall/zones e ci scrivo:
#ZONE TYPE OPTIONS IN OUT # OPTIONS OPTIONS fw firewall net ipv4 dmz ipv4
Creo il file /etc/shorewall/interfaces e ci scrivo:
#ZONE INTERFACE BROADCAST OPTIONS net eth0 detect blacklist,nosmurfs dmz venet0 detect routeback dmz vmbr0 detect routeback,bridge
Creo il file /etc/shorewall/policy e ci scrivo:
#SOURCE DEST POLICY LOG LIMIT: CONNLIMIT: # LEVEL BURST MASK # From Firewall Policy fw fw ACCEPT fw net ACCEPT fw dmz ACCEPT # From DMZ Policy dmz dmz ACCEPT dmz net ACCEPT dmz fw DROP info # From Net Policy net fw DROP info net dmz DROP info # THE FOLLOWING POLICY MUST BE LAST # all all REJECT info
Creo il file /etc/shorewall/rules e ci scrivo:
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE # Permit access to SSH SSH/ACCEPT net fw - - - - 6/min:5 # Permit access to Proxmox Manager and Console ACCEPT net fw tcp 443,5900:5999 # PING Rules Ping/ACCEPT all all # LAST LINE -- DO NOT REMOVE
Alla fine la cartella /etc/shorewall dovrebbe contenere i seguenti file:
drwxr-xr-x 2 root root 4096 Apr 14 15:15 . drwxr-xr-x 77 root root 4096 Apr 14 13:15 .. -rw-r--r-- 1 root root 453 Nov 8 2007 Makefile -rw-r--r-- 1 root root 214 Apr 14 15:03 interfaces -rw-r--r-- 1 root root 494 Apr 14 15:10 policy -rw-r--r-- 1 root root 517 Apr 14 15:15 rules -rw-r--r-- 1 root root 4004 Apr 14 13:18 shorewall.conf -rw-r--r-- 1 root root 183 Apr 14 13:19 zones
Controllo ora il funzionamento di shorewall:
shorewall try /etc/shorewall 60
in questo minuto di prova posso provare se risponde il pannello di controllo web di proxmox e se riesco a loggarmi in ssh al server.
Se tutto funziona posso abilitare proxmox all’avvio automatico: modifico il file /etc/default/shorewall e cambio:
startup=0
in
startup=1
Posso ora avviare shorewall manualmente col comando
shorewall start
oppure riavviarlo al bisogno con
shorewall restart
Per permettere alle macchine virtuali di uscire in internet creo il file /etc/shorewall/masq e sccrivo:
#INTERFACE SOURCE ADDRESS PROTO PORT(S) IPSEC MARK eth0 10.0.0.0/8 # LAST LINE -- DO NOT REMOVE
per dirottare il traffico web (porta 80) su una macchina virtuale inserisco nel file /etc/shorewall/rules questa regola:
DNAT net dmz:10.0.1.101 tcp 80
Posso anche cambiare porta di destinazione nella macchina virtuale con la regola:
DNAT net dmz:10.0.1.103:8180 tcp 80
Le macchine virtuali potranno avere degli indirizzi privati del tipo 10.xxx.yyy.zzz (es 10.0.1.101) ed essere gestiti semplicemente con un’interfaccia venet.
Shorewall ha alcune opzioni comode e interessanti:
safe-restart
salva la configurazione attuale, quindi applica quella nuova e chiede conferma per mantenere le nuove regole; se la conferma non è data entro 60 secondi sono riapplicate le regole precedenti;
try configuration-directory [timeout]
riavvia shorewall utilizzando la configurazione presente nella directory specificata e se sono rilevati errori o se il timeout è raggiunto, le regole precedenti sono riapplicate;
show check
esegue la validazione sintattica della configurazione;
logwatch
simile a tail -f $LOGFILE;
ipcalc [<address> <mask> | <address/vlsm>]
dato un indirizzo di rete, mostra i corrispondenti indirizzi di network, broadcast e netmask.
(per questo post ho preso pesantemente spunto dal seguente: http://www.myatus.co.uk/2009/08/31/guide-firewall-and-router-with-proxmox/)