mod_evasive è un altro modulo di Apache in grado di aumentare la sicurezza del sistema proteggendoci da attacchi DOS e D-DOS sulla porta 80.
Gli attacchi di tipo DOS e D-DOS (Denial of Services e Distributed Denial of Services) sono attacchi atti a rendere inaccessibili i sistemi a causa di un intenso traffico dati. Grazie a questo modulo, però, riusciamo a prevenire questo tipo di attacco quando viene rivolto ad Apache in quanto il modulo tiene traccia del numero di connessioni provenienti da un determinato IP e, in caso di superamento della soglia, interviene bloccandole.
Per installare il modulo su Debian/Ubuntu è sufficiente lanciare il comando:

apt-get install libapache2-mod-evasive

Quindi creiamo la directory per i log:

mkdir -p /var/log/apache2/evasive
chown -R www-data:root /var/log/apache2/evasive

Ora creiamo un file di configurazione per il modulo:

/etc/apache2/conf.d/modevasive.conf
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 100
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 600
DOSLogDir "/var/log/apache2/evasive"
</IfModule>

e riavviamo Apache:

/etc/init.d/apache2 restart

Per collaudare il funzionalmento del modulo, c’è un semplice script perl incluso con la documentazione:

# perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
 

OpenVPN è il sistema più semplice per gestire VPN in ambiente Linux. In questo Howto vediamo come configurare un concentratore OpenVPN utilizzando Debian Squeeze. Fortunatamente l’installazione è piuttosto semplice.

Installazione del server
Innanzi tutto installiamo i pacchetti necessari:

apt-get install openvpn udev

OpenVPN mette a disposizione un tool chiamato EasyRSA per creare i certificati per il collegamento. Installiamo il tool e generiamo i certificati per la Certification Authority interna:

cp -R /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn
cd /etc/openvpn/easy-rsa/2.0/
. /etc/openvpn/easy-rsa/2.0/vars
. /etc/openvpn/easy-rsa/2.0/clean-all
. /etc/openvpn/easy-rsa/2.0/build-ca

Quindi generiamo i certificati per il server:

. /etc/openvpn/easy-rsa/2.0/build-key-server server

e per il client:

. /etc/openvpn/easy-rsa/2.0/build-key client1

Inifine generiamo i parametri Diffie Hellman; questa operazione può essere parecchio lunga…

. /etc/openvpn/easy-rsa/2.0/build-dh

A questo punto copiamo i certificati server nella directory corretta:

cd /etc/openvpn/easy-rsa/2.0/keys
cp ca.crt ca.key dh1024.pem server.crt server.key /etc/openvpn

e copiamo sul client i certificati client. I file da copiare sono:

  • ca.crt
  • client1.crt
  • client1.key

Ora copiamo la configurazione del server OpenVPN:

cd /usr/share/doc/openvpn/examples/sample-config-files
gunzip -d server.conf.gz
cp server.conf /etc/openvpn/
/etc/init.d/openvpn start

Attraverso questa configurazione, il server negozierà con il client l’ip del tunnel e creerà l’interfaccia. Se il nostro scopo è quello di creare una connessione punto-punto tra un client ed un server, siamo perfettamente operativi; più avanti vedremo come utilizzare il nostro server OpenVPN per rendere accessibile al client tutta la rete interna.

Configurazione del client OpenVPN
Ovviamente esistono numerosi clien OpenVPN a seconda del sistema operativo che utilizzate. Se usate Linux con l’interfaccia GNOME, l’applet della rete nel quale potete configurare le VPN PPTP può essere utilizzato anche per comandare le VPN OpenVPN: vi serviranno i tre file segnalati prima e, attenzione, nel pannello “Avanzate” ailitate la compressione LZO.
Per MacOS esiste il client Tunnleblick
Per Windows, invece, esiste il client OpenVPN GUI.

Configurazione dell’ip forwarding, del nat e del DNS forwarding
Nel caso in cui vogliate che i vostri client abbiano accesso sia alla rete locale del server, ma anche alla rete Internet attraverso il server, è necessario fare qualche altra configurazione.
Innanzi tutto bisogna abilitare sul server l’IP forwarding ed il nat:

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Per rendere definitive queste modifiche, consiglio di aggiungere le righe qui sopra anche al file /etc/rc.local in modo che siano eseguite ad ogni riavvio del server.
Attraverso il tunnel OpenVPN saremo in grado di raggiungere qualsiasi rete collegata al server, però non è possibile utilizzare DNS esterni, per cui sarà necessario configurare un DNS sul server.
Il metodo più semplice è quello di installare il pacchetto dnsmasq che funge da proxy DNS tra il tunnel OpenVPN e i resolver impostati sul server:

apt-get install dnsmasq

Quindi modifichiamo il file /etc/openvpn/server.conf per far istruire i client che si collegano riguardo le rotte e il DNS:

/etc/openvpn/server.conf
....
push "dhcp-option DNS 10.8.0.1"
push "redirect-gateway def1"

e riavviamo OpenVPN

/etc/init.d/openvpn restart
 

Freeside è una web application realizzata in Perl con base dati PostgreSQL per realizzare un completo CRM dedicato ad offrire servizi Internet. E’ stata appena rilasciata la versione 2.3.0, per cui la documentazione per l’installazione è poco precisa: in questo HowTo vediamo come procedere all’installazione partendo da una distribuzione Vanilla di Debian Squeeze.

Installazione dei prerequisiti

Freeside necessita di Perl e Apache, oltre ai tools per lo sviluppo in modo da poter compilare le librerie Perl.
Installiamo il tutto con i seguenti comandi:

apt-get install apache postgresql perl libapache2-mod-perl2 build-essential postgresql-server-dev-8.4 libgd2-xpm libgd2-xpm-dev texlive-base ghostscript rrdtool librrds-perl libxml-libxml-perl libberkeleydb-perl libtemplate-perl libproc-daemon-perl libnet-snmp-perl libapache-session-perl libjson-perl libdbix-abstract-perl libdbix-sequence-perl

Installazione dei moduli Perl
Per installare i moduli Perl necessari al funzionamento di Freeside utilizzeremo il comando cpan che scarica e compila i moduli automaticamente.
Innanzi tutto aggiorniamo CPAN con:

cpan Bundle::CPAN

Quindi installiamo i prerequisiti con:

cpan Bundle::LWP URI HTML:Tagset HTML:Parser DBI DBD::Pg Date::Format Date::Manip
cpan Chart::Base Cache::Cache DateTime DateTime::Format::Strptime DateTime::Format::Natural Email::Sender Frontier::Client
cpan Email::Sender::Transport::SMTP::TLS HTML::Mason Locale::Country Locale::SubCountry Mail::Internet MIME::Tools
cpan NetAddr::IP Net::Ping Net::Ping::External Number::Format Spreadsheet::WriteExcel String::Approx Text::CSV_XS
cpan Term::ReadKey Text::Template Authen::Passphrase Time::Duration Apache::DBI GD::Barcode HTML::FormatText
cpan Business::CreditCard Business::US::USPS::WebTools CAM::PDF Color::Scheme Crypt::PasswdMD5 DBIx::DBSchema
cpan File::CounterFile File::Slurp Frontier::RPC2 HTML::Defang HTML::Widgets::SelectLayers IPC::Run IPC::Run3
cpan JSON Lingua::EN::NameParse Lingua::EN::Inflect Net::Domain::TLD Net::SSH Net::Whois::Raw String::ShellQuote
cpan Net::OpenSSH Tie::IxHash XML::Simple Apache::Session Sys::SigAction POE Test::Inline Class::ReturnValue
cpan DBIx::SearchBuilder Log::Dispatch Log::Dispatch XMLRPC::Transport::HTTP CGI HTML::TableExtract HTML::ElementTable
cpan Text::Autoformat Text::Quoted Regexp::Common HTML::Scrubber Tree::Simple Crypt::SSLeay GD::Graph XML::RSS
cpan UNIVERSAL::require Calendar::Simple CSS::Squish CPAN::DistnameInfo Module::Versions::Report Encode
cpan IO::Scalar Chart::LinesPoints Locale::Maketext::Fuzzy Time::ParseDate Text::Wrapper
cpan File::ShareDir HTML::RewriteAttributes MIME::Types PerlIO::eol GnuPG::Interface Data::ICal Text::WikiFormat
cpan Net::Server HTTP::Server::Simple HTTP::Server::Simple::Mason DateTime::Set IPC::Run::SafeHandles
cpan -f Locale::Maketext::Lexicon
cpan P/PV/PVANDRY/gettext-1.05.tar.gz

Installazione di Freeside
Per installare freeside, innanzi tutto scarichiamo il sorgente e scompattiamolo:

cd /
wget http://www.freeside.biz/freeside/freeside-2.3.0.tar.gz
tar zxvf freeside-2.3.0.tar.gz
cd freeside-2.3.0

Aggiungiamo un utente specifico per freeside ed per rt:

useradd freeside
useradd rt
chown -R freeside:freeside /freeside-2.3.0

Creiamo l’utente per il database:

su - postgres
createuser -P freeside
Enter password for new role:
Conferma password:
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n
CREATE ROLE
exit

Editiamo il file Makefile.pl ed impostiamo la variabile DB_PASSWORD con la password impostata al passaggio precedente.
Ora, quindi, creaiamo il database:

su freeside
createdb -E UTF8 freeside

Sempre usando l’utente freeside iniziamo la compilazione dei moduli:

make perl-modules
exit

Da superutente procediamo con il resto dell’installazione:

make install-perl-modules
make create-config
make install-texmf
make install-docs
make install-apache
make install-init

Il prossimo passo è quello di popolare il database:

su - freeside
freeside-setup -d example.com

Il dominio example.com dovrà essere sostituito con il FQDN del vostro server ed è importante che il TLD sia un TLD reale (.it, .com, ecc.) altrimenti la procedura non andrà a buon fine.
Sempre da utente freeside, aggiungiamo gli utenti di sistema per le operazioni che dovrà eseguire Freeside:

freeside-adduser -g 1 fs_queue
freeside-adduser -g 1 fs_daily
freeside-adduser -g 1 fs_selfservice
freeside-adduser -g 1 root
htpasswd /usr/local/etc/freeside/htpasswd root

Gli ultimi due comandi servono per creare l’utente amministratore per entrare nell’interfaccia web.

Ora è giunto il momento di far partire per la prima volta i demoni di freeside:

exit
/etc/init.d/freeside start

Installazione di RT
RT è un modulo esterno, ma totalmente integrato con Freeside, per gestire il supporto tecnico con le code di ticket. Per installarlo seguiamo i seguenti passi:

make configure-rt
make create-rt
make install-rt

A questo punto editiamo il file /etc/apache2/httpd.conf e aggiungiamo le seguenti righe di codice:

/etc/apache2/httpd.conf
#replace /var/www/freeside with your freeside document root


allow from all
Satisfy any
SetHandler perl-script
PerlHandler HTML::Mason



#replace /var/www/freeside with your freeside document root


allow from all
Satisfy any
SetHandler perl-script
PerlHandler HTML::Mason



#replace /var/www/freeside with your freeside document root

SetHandler None


#replace /var/www/freeside with your freeside document root

SetHandler perl-script
PerlHandler HTML::Mason


#replace /var/www/freeside with your freeside document root

SetHandler perl-script
PerlHandler HTML::Mason

Editiamo ora il file /etc/apache2/envvars modificando le seguenti righe:

/etc/apache2/envvars
export APACHE_RUN_USER=freeside
export APACHE_RUN_GROUP=freeside

Ora facciamo ripartire il web server:

/etc/init.d/apache2 restart

Intstallazione di Torrus
Una delle novità più interessanti della versione 2.3 è l’integrazione (al pari di RT) di Torrus che è un sistema di monitoraggio basato sul protocollo SNMP.
Per installarlo, innanzi tutto, modifichiamo il fle Makefile.PL modificando la seguente riga:

TORRUS_ENABLED = 1

Quindi lanciamo i seguenti comandi:

make configure-torrus
make deploy
mkdir -p /srv/torrus/collector_rrd
chown -R freeside:freeside /srv/torrus/collector_rrd /usr/local/etc/torrus/discovery /usr/local/etc/torrus/xmlconfig/

Infine modifichiamo la password di accesso al database postgressql in /usr/local/etc/torrus/conf/torrus-siteconfig.pl:

/usr/local/etc/torrus/conf/torrus-siteconfig.pl
$Torrus::SQL::connections{'Default'}{'password'} = 'xxxxxx';         #DB_PASSWORD

A questo punto Torrus è installato.
Innanzi tutto impostiamo un cron di “pulizia” da eseguire nottetempo:

ln -s /usr/local/torrus/bin/cleanup /etc/cron.daily/torrus-cleanup

Ora copiamo lo script di avvio e abilitiamolo con:

cp /freeside-2.3.0/init.d/torrus /etc/init.d/
update-rc.d torrus defaults

A questo punto l’installazione “server” di Freeside è ultimata. In un prossimo articolo affronteremo l’installazione dell’interfaccia self-service per clienti e rivenditori.

 

Come riportato in Wikipedia, l’entropia, in fisica, è una grandezza che viene interpretata come una misura del caos in un sistema fisico o più in generale nell’universo.
Ma a noi cosa interessa?
L’entropia viene utilizzata sui server nella randomizzazione: maggiore è l’entropia disponibile, migliore sarà la qualità dei numeri casulali generati. Un’alta quantità di entropia è necessaria per operazioni che necessitano di elevate quantità di numeri casuali, tra i quali, il caso più comune, è la generazioni di chiavi PGP.
Per sapere quanta entropia abbiamo a disposizione su un server linux, basta lanciare il comando:

cat /proc/sys/kernel/random/entropy_avail

Se il valore è basso (inferiore a 200), è necessario intervenire in quanto probabilmente si utilizza come sorgente /dev/random.
Per risolvere il problema, bisogna installare il demone rng e configurare come sorgente hardware il device /dev/urandom. Su un sistema Linux Debian/Ubuntu lanciare:

sudo apt-get install rng-tools

Quindi editare il file /etc/default/rng-tools aggiungendo la seguente riga:

/etc/default/rng-tools
HRNGDEVICE=/dev/urandom

e avviare il demone:

sudo /etc/init.d/rng-tools restart

Ora il valore di entropia disponibile sarà molto più elevato.

 

In questo articolo creeremo un setup formato da due server con hypervisor Xen e datastore locale su partizione LVM replicata sui due server in realtime utilizzando DRBD.
Questo sistema, non è certo adatto ad essere un vero e proprio cloud, ma è il metodo che preferisco per creare un sistema di virtualizzazione aziendale efficiente, performante e poco costoso… a scapito di una gestione non proprio semplicissima

In questo articolo assumeremo di avere due server con indirizzo IP 192.168.255.1 (xen1) e 192.168.255.2 (xen2) con una installazione standard di Debian e Xen secondo quanto spiegato in questo precedente articolo. Inoltre, su entrambi i server, dovrà essere creato un Volume Group LVM chiamato “vg” per ospitare i dischi delle macchine virtuali; ammettendo che la partizione che ospiterà i volumi LVM per le macchine virtuali sia /dev/sda4, creiamo il setup di LVM con questi comandi da lanciare su entrambi i server:

pvcreate /dev/sda4
vgcreate vg /dev/sda4
lvcreate -L 1G -n meta vg

Infine, su entrambi i server, bisognerà installare DRBD 8 secondo quanto spiegato in questo articolo.

A questo punto siamo pronti a configurare il sistema per gestire l’alta affidabilità che utilizzerà HeartBeat, per cui procedete pure su entrambi i server ad installare il pacchetto e ad operare la classica configurazione di ha.conf e authkeys: in questo articolo ci soffermeremo solo su come configurare correttamente il file haresources in modo da distribuire le VM sui due server e migrarle all’interno di una sola macchina in caso di guasto.

Debian mette a disposizione uno script di avvio per far partire in automatico i DomU di xen che si trova in /etc/init.d/xendomains: si tratterà di lavorare su questo per far si che gestisca due server al posto di uno soltanto.

Copiamo questo script all’interno della directory /etc/ha.d/resource.d:

cp /etc/init.d/xendomains /etc/ha.d/resource.d/xendomainsHA1
cp /etc/init.d/xendomains /etc/ha.d/resource.d/xendomainsHA2

Modifichiamo lo script /etc/ha.d/resource.d/xendomainsHA1:

LOCKFILE=/var/lock/xendomainsHA1
XENDOM_CONFIG=/etc/default/xendomainsHA1

e lo script /etc/ha.d/resource.d/xendomainsHA2:

LOCKFILE=/var/lock/xendomainsHA2
XENDOM_CONFIG=/etc/default/xendomainsHA2

Quindi andiamo ad eseguire la medesima operazione sul file /etc/default/xendomains:

cp /etc/default/xendomains /etc/default/xendomainsHA1
cp /etc/default/xendomains /etc/default/xendomainsHA2

Modifichiamo il file /etc/default/xendomainsHA1:

XENDOMAINS_MIGRATE="xen2X --live"
XENDOMAINS_SAVE=
XENDOMAINS_SHUTDOWN_ALL=
XENDOMAINS_RESTORE=false
XENDOMAINS_AUTO=/etc/xen/auto/xen1
XENDOMAINS_AUTO_ONLY=true

e il file /etc/default/xendomainsHA2:

XENDOMAINS_MIGRATE="xen2X --live"
XENDOMAINS_SAVE=
XENDOMAINS_SHUTDOWN_ALL=
XENDOMAINS_RESTORE=false
XENDOMAINS_AUTO=/etc/xen/auto/xen2
XENDOMAINS_AUTO_ONLY=true

Creiamo il file /etc/ha.d/haresources con queste righe

xen1	xendomainsHA1
xen2	xendomainsHA2

e creiamo le due directory citate nella configurazione:

mkdir -p /etc/xen/auto/xen1
mkdir -p /etc/xen/auto/xen2

Ovviamente tutte queste operazioni andranno eseguite su entrambi i server. A questo punto la configurazione dei due hypervisor xen è ultimata. Il funzionamento è semplice: per ogni macchina virtuale creeremo su entrambi i server due volumi logici LVM: uno per il disco di root e uno per lo swap; quindi configureremo DRBD8 in modalità attivo-attivo per replicare i dati tra i due server, creeremo il file di configurazione della VM che utilizzerà il driver drbd di xen per gestire i dischi e, infine, creeremo un link simbolico all’interno della directory /etc/xen/auto/xen1 o /etc/xen/auto/xen2 a seconda del server fisico all’interno del quale girerà la nostra macchina virtuale.

Questa la procedura per creare una nuova VM:

Creare i dischi attraverso lvm su entrambi i server:

lvcreate -n vm-disk --size 10g vg
lvcreate -n vm-swap --size 2g vg

Quindi, sempre su entrambi i server, aggiungere alla configurazione di drbd una sezione apposta:

/etc/drbd.conf
# VM
resource vm-disk {
protocol C;
startup {
wfc-timeout 120; ## 2 min
degr-wfc-timeout 120; ## 2 minutes.
}
disk {
on-io-error detach;
}
net {
allow-two-primaries;
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;

timeout 60;
connect-int 10;
ping-int 10;
max-buffers 2048;
max-epoch-size 2048;
}
syncer {
}

on xen1 {
address 192.168.255.1:7801;
device /dev/drbd1;
disk /dev/vg/vm-disk;
meta-disk /dev/vg/meta[1];

}

on xen2 {
address 192.168.255.2:7801;
device /dev/drbd1;
disk /dev/vg/vm-disk;
meta-disk /dev/vg/meta[1];
}
}

resource vm-swap {
protocol C;
startup {
wfc-timeout 120; ## 2 min
degr-wfc-timeout 120; ## 2 minutes.
}
disk {
on-io-error detach;
}
net {
allow-two-primaries;
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;

timeout 60;
connect-int 10;
ping-int 10;
max-buffers 2048;
max-epoch-size 2048;
}
syncer {
}

on xen1 {
address 192.168.255.1:7802;
device /dev/drbd2;
disk /dev/vg/vm-swap;
meta-disk /dev/vg/meta[2];
}
on xen2 {
address 192.168.255.2:7802;
device /dev/drbd2;
disk /dev/vg/vm-swap;
meta-disk /dev/vg/meta[2];
}
}

Bisogna prestare particolare attenzione alla configurazione di DRBD in quanto ogni disco dovrà avere il proprio nome univoco (vm-disk e vm-swap nell’esempio), la propia porta univoca (7801 e 7802), il proprio identificativo progressivo di device (/dev/drbd1 e /dev/drbd2) e il proprio metadata univoco (/dev/vg/meta[1] e /dev/vg/meta[2]).

Creiamo quindi i metadata di drbd e ricarichiamo drbd su entrambi i server:

drbdadm create-md vm-disk
drbdadm create-md vm-swap
/etc/init.d/drbd reload

Ora sul server principale forziamo la sincronizzazione di DRBD, formattiamo il disco, montiamolo e installiamo il sistema operativo base:

drbdadm -- --overwrite-data-of-peer primary vm-disk
drbdadm -- --overwrite-data-of-peer primary vm-swap
mkfs.xfs /dev/drbd1
mkdir /tmp/mnt
mount /dev/drbd1 /tmp/mnt
debootstrap lenny /tmp/mnt/ http://ftp.it.debian.org/debian

Copiamo i driver del kernel nel disco della VM:

cp -pR /lib64/modules/* /tmp/mnt/lib64/modules

Modifichiamo il file /etc/inittab per poter accedere in console locale:

1:2345:respawn:/sbin/getty 38400 hvc0

Entriamo in chroot, installiamo il server ssh e udev e modifichiamo la password di root:

chroot /tmp/mnt
apt-get update
apt-get install udev ssh
passwd
exit
umount /tmp/mnt

A questo punto la nostra vm è pronta per essere eseguita da Xen.

Su entrambi i server creiamo il file di configurazione di XEN all’interno di /etc/xen

/etc/xen/vm
kernel = "/boot/vmlinuz-2.6.26-2-xen-amd64"
ramdisk = "/boot/initrd.img-2.6.26-2-xen-amd64"
memory = 1024
name = "vm"
vif = ['bridge=xenbr0']
disk = ['drbd:vm-disk,sda1,w', 'drbd:vm-swap,sda2,w']
root = "/dev/sda1 ro"
extra = 'console=hvc'

Ed infine creiamo il link simbolico per farla avviare automaticamente all’avvio di HeartBeat, sempre su entrambi i server:

ln -s /etc/xen/vm /etc/xen/auto/xen1

A questo punto, sul server 1, possiamo avviare manualmente la VM:

xm create /etc/xen/vm -c