Installation d'un serveur OpenVZ - ma version de l'histoire

Objectif: laisser des traces de ma propre expérience de la mise en place d'un serveur openvz et les soucis particuliers que j'ai rencontrés.

Installation

Fiche serveur

Services

openssh, openvz (noyau)

Sécurité

tripwire, iptables

|| Suivi/Outils || iproute, ntp, tcpdump, dig, mtr ||

Services

ça dépend

Sécurité

sudo, sXid, Logcheck, PortSentry

Suivi/Outils

Git, iproute, mtr, trafshow, tcpdump, dig

Schéma de partitionnement

Configuration réseau

Tâches supplémentaires à exécuter

Installation des logiciels

Sudo

# aptitude install sudo
# visudo -f /etc/sudoers
# /etc/sudoers
...
# User privilege specification
root            ALL=(ALL)       ALL
nacer   ALL=(ALL)       ALL

SSH

Suivre la démarche décrite ici.

Ajouter le compte d'administration (ici nacer) au groupe ssh:

$ sudo usermod -a -G ssh nacer

Copier ma clé publique sur le serveur, à partir d'une clé usb par exemple:

$ sudo mount -t vfat /dev/sda1 /mnt/
$ mkdir .ssh
$ cat /mnt/id_dsa.pub >> .ssh/authorized_keys
$ chmod u=rw,go=r .ssh/authorized_keys

Tester la configuration en essayant de se connecter à partir du poste d'administration.

tripwire

ntp (client)

$ sudo aptitude install ntp ntp-simple ntpdate

...
#Paramètres du serveur:
server ntp.cm.refer.org
#Restreindre le type d'accès:
restrict default notrust nomodify nopeer
# configuration de l'hôte local
restrict ntp.cm.refer.org
restrict 127.0.0.1
...

$ sudo ntpdate ntp.cm.refer.org

$ sudo invoke-rc.d ntp restart

$ sudo hwclock --systohc

$ ntpdc -p
     remote           local      st poll reach  delay   offset    disp
=======================================================================
*192.168.100.2   10.45.0.242     14   64   77 0.00027  0.004907 0.43616

Logcheck

PortSentry

sXid

Git

Voir ici

GnuPG

Création d'une image OpenVZ

$ sudo aptitude install quota debootstrap

Il vaut mieux à ce stade avoir /var/lib/vz sur une partition à part

mkdir /var/lib/vz/template/debian-etch/
debootstrap --arch i386 etch /var/lib/vz/template/debian-etch/ http://miroir.cm.refer.org/debian/

# sudo vzctl set 240 --applyconfig vps.basic --save

# sudo sh -c 'echo "OSTEMPLATE=debian-4.0" >> /etc/vz/conf/240.conf'

# sudo vzctl set 240 --ipadd 10.45.0.240 --save

# sudo vzctl set 240 --nameserver 192.168.100.2 --save

# mkdir /var/lib/vz/private/240; cp -r /var/lib/vz/template/debian-etch/* /var/lib/vz/private/240/

# aptitude install bridge-utils

# lsmod | grep vzeth
vzethdev               12480  0
vzmon                  38152  5 vzethdev,vznetdev,vzrst,vzcpt
vzdev                   3620  4 vzethdev,vznetdev,vzmon,vzdquota

# modprobe vzethdev

CONFIG_CUSTOMIZED="yes"

VZHOSTBR="veth240.0" VETH_IP_ADDRESS=10.45.0.240

# /usr/local/sbin/vznetaddroute
# a script to bring up virtual network interfaces (veth's) in a VE

ETH=$3
BRIDGE=vz1 # je fixe le nom du bridge, mais penser à standardiser les noms des interfaces
# afin de pouvoir écrire un script plus généraliste

CONFIGFILE=/etc/vz/conf/$VEID.conf
. $CONFIGFILE
VZHOSTIF=`echo $NETIF |sed 's/^.*host_ifname=\(.*\),.*$/\1/g'`

# je laisse les contrôles pour les messages fort utiles s'il y a un problème
if [ ! -n "$VETH_IP_ADDRESS" ]; then
   echo "According to $CONFIGFILE VE$VEID has no veth IPs configured."
   exit 1
fi

if [ ! -n "$VZHOSTIF" ]; then
   echo "According to $CONFIGFILE VE$VEID has no veth interface configured."
   exit 1
fi

for IP in $VETH_IP_ADDRESS; do
   echo "Adding interface $VZHOSTIF and route $IP for VE$VEID to CT0"
   /sbin/ifconfig $VZHOSTIF 0
   #echo 1 > /proc/sys/net/ipv4/conf/$VZHOSTIF/proxy_arp -- la valeur par défaut de /etc/sysctl.conf suffit
   #echo 1 > /proc/sys/net/ipv4/conf/$VZHOSTIF/forwarding -- déjà fait dans /etc/sysctl.conf
   #/sbin/ip route add $IP dev $VZHOSTIF -- ce n'est plus correct
   /sbin/ip route add $IP dev $BRIDGE # parce que j'ai pas configuré d'adresse sur vz1
done

/usr/sbin/brctl addif $BRIDGE $ETH

exit 0

# chmod 0500 /usr/sbin/vznetaddbr

Note: le script proposé ici, pris dans la documentation officielle de openvz et personnalisé, à l'avantage de faire un peu de logging, ce qui n'est pas mal quand il y a des soucis.

# cat /etc/vz/vznet.conf
EXTERNAL_SCRIPT=/usr/local/sbin/vznetaddroute

# vzctl set 240 --netif_add "eth0,00:01:23:45:24:0A,veth240.0,00:01:23:45:24:0B" --save 

# echo 0 > /proc/sys/net/ipv4/conf/eth0/forwarding

# vzctl start 240
# vzctl enter 240
# cat /etc/network/interfaces
...
auto eth0
iface eth0 inet static
        address 10.45.0.240
        netmask 255.255.254.0
        gateway 10.45.0.254
...

# cat /etc/apt/sources.list
deb http://miroir.cm.refer.org/debian/ etch main contrib non-free
deb http://miroir.cm.refer.org/debian-security/ etch/updates main contrib non-free

# aptitude update
# aptitude upgrade

# aptitude install ssh quota

# chmod 700 /root

#usermod -L root

# sed -i -e '/getty/d' /etc/inittab

# sed -i -e 's@\([[:space:]]\)\(/var/log/\)@\1-\2@' /etc/syslog.conf

# rm -f /etc/mtab
# ln -s /proc/mounts /etc/mtab

#update-rc.d -f klogd remove
#update-rc.d -f inetd remove

# aptitude clean

# exit

# sudo vzctl set 240 --ipdel all --save
# sudo vzctl stop 240

# cd /var/lib/vz/private/240
# sudo tar -zcf /var/lib/vz/template/cache/debian-4.0-i386-minimal.tar.gz .
# ls -lh /var/lib/vz/template/cache
total 56M
-rw-r--r-- 1 root root 56M 2008-05-30 19:54 debian-4.0-i386-minimal.tar.gz

Création d'une machine virtuelle OpenVZ

# sudo vzctl create 101 --ostemplate debian-4.0-i386-minimal

...
CONFIG_CUSTOMIZED="yes"
VZHOSTBR="veth101.0"
VETH_IP_ADDRESS=192.168.100.101

# vzctl set 101 --netif_add "eth0,20:01:23:45:67:8A,veth101.0,20:01:23:45:67:8B" --save 

virtual1:~# cat  /var/lib/vz/private/101/etc/network/interfaces
...
auto eth0                               # configuration de l'interface eth0
iface eth0 inet static
        address 192.168.100.101
        netmask 255.255.255.0
        gateway 192.168.100.1

auto venet0
iface venet0 inet static
        address 127.0.0.1
        netmask 255.255.255.255
        broadcast 0.0.0.0
        up route add -net 192.0.2.1 netmask 255.255.255.255 dev venet0
        #up route add default gw 192.0.2.1

Quelques problèmes rencontrés

virtual1:~# cat /etc/fstab
...
/dev/mapper/serveurs-var--vz    /var/lib/vz     ext3    defaults        0       3
/dev/mapper/serveurs-root--asterisk     /var/lib/vz/private/101 ext3    defaults,userquota      0 4
/dev/mapper/serveurs-log--asterisk      /var/lib/vz/private/101/var/log ext3    defaults        0 5
/dev/mapper/serveurs-spool--asterisk    /var/lib/vz/private/101/var/spool       ext3    defaults        0 6
/dev/mapper/serveurs-temp--asterisk     /var/lib/vz/private/101/tmp     ext3    defaults        0 7
...

On peut y voir les quatres partitions (asterisk) correspondants à ma VE.

Mais après cette manipulation (et montage de ces partitions), à chaque tentative de démarrage de la VE j'obtiens le message suivant:"vzquota : (error) Quota on syscall for 101: Device or resource busy"

L'autre alternative pour résoudre ce problème aurait été de réinitialiser les quotas pour cette machine en faisant (en prenant les paramètres DISKSPACE, DISKINODES et QUOTATIME du fichier /etc/vz/conf/101.conf):

# vzquota init 101 -b 1048576 -B 1153024 -e 0D -i 200000 -I 220000 -n 0D -p /var/lib/vz/private/101