Prova su strada di VMWare Workstation 3.0 per Linux
In quest'ultimo periodo ho avuto la necessita' di lavorare con un programma di contabilita' progettato per
sistemi Windows: non avendo tempo ne' voglia di partizionare il disco fisso per installarci un qualsiasi
Win9X, ho pensato di utilizzare un emulatore per il mio sistema Linux.
Da una delle ultime distribuzioni Linux che tengo nel cassetto ho rispolverato il buon vecchio Wine: niente da
dire sulla progettazione del pacchetto (che credo abbia regalato un bel mal di testa ai suoi creatori)
ma non era esattamente cio' che cercavo: in Wine non e' possibile accedere (almeno io non ci sono riuscito)
a database creati con Access 2000, e il programma aveva bisogno di questa feature....
La scelta e' quindi andata su VMWare: questo non e' solo un semplice emulatore con il quale fare girare dei
programmi scritti per Windows, ma una vera e propria macchina virtuale in cui possiamo installare nostro SO
preferito con i programmi che desideriamo, come se ci trovassimo davanti ad un altro computer...proprio
quello che cercavo!
Nel sito http://www.vmware.com alla sezione Download e' possibile scaricare
il pacchetto VMWare Workstation 3.0: se non avete linee Isdn o Adsl, armatevi di pazienza perche' la dimensione
del file in formato .tar.gz supera i 10 MB.
Per utilizzare il programma, dobbiamo registrarci nel sito VMWare inserendo il nostro indirizzo di posta
elettronica, presso il quale verra' recapitato un codice seriale che fara' funzionare senza limitazioni il
programma per 30 giorni...ovviamente, terminato il mese di valutazione possiamo o disinstallare il programma o
richiedere (pagando) un numero seriale definitivo che renda la nostra installazione di VMWare utilizzabile
senza limitazioni di tempo. Nel mio caso, un mese dovrebbe essere piu' che sufficiente per svolgere il
lavoro... ;-))
A differenza di Wine, l'installazione di VMWare e' piuttosto semplice: non occorre ricompilare nulla, si tratta solo di scompattare il grosso file gtarrato e installare i sorgenti:
# tar xfvz VMwareWorkstation-3.x.tar.gz
La procedura di installazione ci richiedera' i percorsi (directory) dove installare i sorgenti e i file
man utilizzati da VMWare: noi semplicemente possiamo confermare i percorsi di default che ci vengono
proposti. Il demone che controlla i servizi di rete viene installato in /etc/rc.d/init.d.
Una piccola annotazione: quando la procedura di installazione vi chiedera' se attivare i servizi di
networking, rispondete "yes": automagicamente verranno messe a disposizione della vostra macchina
virtuale tante schede di rete quante ne vorrete, con i relativi server DHCP per semplificare il
settaggio degli indirizzi IP...
L'installazione avviera' automaticamente anche il programma di configurazione, ma se per qualche motivo
avete la necessita' di rivedere la vostra configurazione di VMWare, basta eseguire (sempre da root)
il programma /usr/bin/vmware-config.pl.
Posso dire che l'unica cosa da configurare - questa e' la parte interessante del programma! - e' il
sistema di networking: in pratica, VMWare mette a disposizione della nostra Linux box una o piu' schede
di rete "virtuali", che verranno utilizzate dalla macchina virtuale per comunicare con Linux oppure con la
rete alla quale il nostro computer e' attaccato. Queste NIC virtuali sono raggiungibili attraverso i device
/dev/vmnet0, /dev/vmnet1 e cosi' via.
E' possibile configurare ogni scheda di rete in tre modi:
Se fate una rapida ricerca in internet, vedrete che molta gente esalta le funzionalita' del servizio host-only, che in
teoria dovrebbe fornire la nostra macchina virtuale di un accesso privilegiato alla nostra Linux box.
In pratica, io ho tentato per un paio di giorni di configurare in questo modo la mia NIC virtuale, ma
senza successo...evidentemente o io non ci arrivo o i programmatori VMWare devono fare ancora
molta strada...
La cosa piu' semplice e rapida da fare e' dunque impostare con vmware-config.pl una sola scheda di rete
di tipo bridged, il che e' come avere un computer con una normale scheda NIC, alla quale possiamo
dare l'indirizzo IP che vogliamo sulla rete che vogliamo. Elementare!
Da notare che lo script /etc/rc.d/init.d/vmware che viene eseguito ogni volta che riavviamo Linux si occupa di tutta la noiosa trafila di configurazione delle schede virtuali, avvio del demone dhcpd e samba per le stesse, e inserimento nella tabella di routing: noi abbiamo solamente deciso quali e quante schede di rete inserire nel nostro sistema, a tutto il resto ci pensa il file di script. A dire il vero potremo anche fare a meno del demone dhcpd, utilizzando degli indirizzi ip statici e non dinamici; in questo caso basta disabilitare questo servizio eseguendo le istruzioni del solito script di configurazione vmware-config.pl.
Dopo avere installato le schede e riavviato il demone vmware, possiamo listare a video tutte le schede
di rete che abbiamo installato utilizzando il comando /sbin/ifconfig. La scheda di tipo bridged non verra'
visualizzata, coincidendo in pratica con la stessa scheda che fisicamente e' presente nella nostra Linux box.
Ma ora preparatevi alla parte piu' divertente del lavoro: impostare un sistema di filtri per le
schede di rete virtuali.
--------------------- | Host n. 1 | .........| IP: 192.168.0.2 | -------- . | | / \ ------------------------- . --------------------- / Internet \ | Linux box | . / \..............| eth0 IP: 26.45.128.5 |........... -------------- | eth1 IP: 192.168.0.1 | . ------------------------- . --------------------- . | Host n. 2 | .........| IP: 192.168.0.3 | . | | . --------------------- . . . . . ........ altre macchine virtuali... - SCHEMA 1 -
Faccio un esempio: abbiamo un server Linux (la Linux box) con due schede di rete e due diversi indirizzi IP,
uno che "guarda" verso la rete esterna (26.45.128.5) e che ci occorre per il collegamento ad Internet, e
un indirizzo IP che comunica con le macchine interne della rete (192.168.11.1). Per semplificare un po' le cose,
meglio utilizzare degli indirizzi statici, anche se il discorso vale pure se sfruttiamo il servizio DHCP.
Nel nostro caso, l'unica macchina ad avere accesso al "mondo esterno" e' la Linux box, mentre le altre
macchine sono nascoste ad Internet e non hanno indirizzi IP pubblici: abbiamo bisogno di un meccanismo che faccia
dialogare la rete interna (quella nascosta) con Internet attraverso la Linux box (che diventa quindi un
firewall), e che faccia arrivare solo i pacchetti sicuri da Internet verso la rete interna.
Ovviamente, dobbiamo implementare il tutto con un occhio di riguardo per la sicurezza...
Che c'azzecca tutto questo con VMWare? semplice: al posto di "Internet" mettete la vostra rete dell'ufficio, al posto di Linux box mettete il nome del vostro sistema Linux, al posto di "Host n. x" scrivete "Virtual machine n. x", e il gioco e' fatto...ovviamente, al sistema Linux basta una sola scheda di rete fisica, visto che tutto il lavoro che andremo a fare riguarda schede "virtuali"...
Passiamo ora alla pratica e impostiamo la nostra piccola rete virtuale considerando quanto segue:
Cosi' facendo abbiamo aggiunto i nostri host virtuali agli host gia' presenti nella rete fisica dell'ufficio: se avessimo scelto di mettere le macchine virtuali su un'altra rete (ad esempio 192.168.1.x/255.255.255.0), bisognava impostare anche delle regole di routing nella Linux box...magari lo faremo piu' avanti...
Tutto questo si implementa con delle semplici regole di pacchetto, che vanno stabilite con iptables: attenzione a verificare che il vostro kernel abbia queste opzioni abilitate, altrimenti il masquerade non funzionera':
... # # Code maturity level options # CONFIG_EXPERIMENTAL=y ... # # Networking options # CONFIG_PACKET=y CONFIG_NETFILTER=y CONFIG_NETFILTER_DEBUG=y CONFIG_FILTER=y CONFIG_UNIX=y CONFIG_INET=y CONFIG_IP_MULTICAST=y CONFIG_IP_ADVANCED_ROUTER=y CONFIG_IP_MULTIPLE_TABLES=y CONFIG_IP_PNP=y CONFIG_IP_PNP_DHCP=y CONFIG_NET_IPIP=y CONFIG_IP_MROUTE=y CONFIG_SYN_COOKIES=y # # IP: Netfilter Configuration # CONFIG_IP_NF_CONNTRACK=y CONFIG_IP_NF_FTP=y CONFIG_IP_NF_IPTABLES=y CONFIG_IP_NF_MATCH_LIMIT=y CONFIG_IP_NF_MATCH_MAC=y CONFIG_IP_NF_MATCH_STATE=y CONFIG_IP_NF_FILTER=y CONFIG_IP_NF_TARGET_REJECT=y CONFIG_IP_NF_NAT=y CONFIG_IP_NF_NAT_NEEDED=y CONFIG_IP_NF_TARGET_MASQUERADE=y CONFIG_IP_NF_TARGET_REDIRECT=y CONFIG_IP_NF_NAT_FTP=y CONFIG_IP_NF_MANGLE=y CONFIG_IP_NF_TARGET_TOS=y CONFIG_IP_NF_TARGET_MARK=y CONFIG_IP_NF_TARGET_LOG=y ...
Di seguito riporto un semplice "firewall":
#!/bin/sh # file: /etc/rc.d/rc.firewall # # Questo e' un semplice firewall che consente alle schede di rete virtuali usate # da VMWare di dialogare con una piccola rete... # Per rendere attive queste regole ad ogni avvio del computer, aggiungere alla # fine del file /etc/rc.d/rc.local la seguente riga: # # /etc/rc.d/rc.firewall # #----------------------------------------------------------------------------- # # Collocazione del programma iptables IPTABLES=/usr/sbin/iptables # Nome della scheda NIC collegata alla rete fisica (questa e' reale) EXTIF="eth0" # Nome della scheda bridged da mascherare (questa e' virtuale) INTIF0="vmnet0" echo -e "\nFile rc.firewall...\n" echo "Interfaccia esterna: $EXTIF" echo "Interfaccia interna: $INTIF0" # Cancella le regole preesistenti echo "1. cancella regole..." $IPTABLES -P INPUT ACCEPT $IPTABLES -F INPUT $IPTABLES -P OUTPUT ACCEPT $IPTABLES -F OUTPUT $IPTABLES -P FORWARD DROP $IPTABLES -F FORWARD $IPTABLES -t nat -F # Abilita tutte le connessioni in uscita e solamente le connessioni esistenti e relazionate in entrata echo "2. impostazione regole..." $IPTABLES -A FORWARD -i $EXTIF -o $INTIF0 -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A FORWARD -i $INTIF0 -o $EXTIF -j ACCEPT $IPTABLES -A FORWARD -j LOG # Abilita il masquerading sulla scheda esterna echo "3. abilita SNAT (MASQUERADE) su $EXTIF..." $IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE echo "4. fine."
Fatto! mi sembra tutto autoesplicativo...ora basta avviare lo script /etc/rc.d/rc.firewall come utente root per fare in modo che le regole diventino operative.
Personalmente ho scelto la prima opzione, perche' cosi' facendo faccio dialogare le macchine virtuali con tutti i pc presenti in ufficio. Prima pero' dobbiamo eseguire le seguenti operazioni:
Se il demone Samba era gia' presente e funzionante nella rete dell'ufficio, ora dovremo poter vedere sui pc "veri" anche le directory condivise della nostra macchina virtuale...
Un'ultima nota riguardo al prezzo: 299 USD non sono pochini per un emulatore, ma sono pienamente giustificati dalla qualita' e dalla funzionalita' di questo pacchetto; in pratica, e' come avere un "secondo computer" all' interno del vostro desktop, con la differenza che non occupa spazio e costa molto meno che acquistare un nuovo hardware...
E se pensate che ingabbiare Windows o qualsiasi altro sistema operativo sotto Linux sia la soluzione ai vostri problemi di sicurezza, o se dovete sviluppare o testare programmi in ambienti operativi diversi dal vostro amato pinguino, allora VMWare e' sicuramente l'emulatore che fa per voi.
if cat /proc/ksyms | grep "\[parport_pc\]" 1> /dev/null 2> /dev/null ; then echo "parport0 is built-in, not loading module" > /dev/null else if [ -r /lib/modules/$RELEASE/kernel/drivers/parport/parport_pc.o ]; then /sbin/modprobe parport_pc fi fi if cat /proc/ksyms | grep "\[ppdev\]" 1> /dev/null 2> /dev/null ; then echo "ppdev is built-in, not loading module" > /dev/null else if [ -r /lib/modules/$RELEASE/kernel/drivers/char/ppdev.o ]; then /sbin/modprobe ppdev fi fi
... slack kernel: parport0: PC-style at 0x378 (0x778), irq 7, using FIFO [PCSPP,TRISTATE,COMPAT,EPP,ECP] slack kernel: ppdev: user-space parallel port driver ...