Configurer xen-tools sur Debian
xen-tools est un outil de création automatisée de domU Xen. Cet article met en place un modèle de domU proposant la sauvegarde avec Backup Manager, l'accès SSH facilité et la mise en place d'une sécurité minimale.
Ce guide est testé sur:
- Debian 6.0 Squeeze
- Debian 7.0 Wheezy
Prérequis
Ce guide nécessite:
- la configuration d'un serveur SMTP tel que décrit dans Compléments à l'installation de Debian GNU/Linux.
- l'hyperviseur Xen tel que décrit par Installer Xen sur Debian.
- l'outil de sauvegarde Backup Manager, tel que décrit par Installer et configurer Backup Manager sur Debian.
- le gestionnaire de volumes logiques LVM (avec groupe de disque présent), tel que décrit par Mettre en place et utiliser le gestionnaire de volumes logiques LVM sur Debian.
Paramètres
Récupérez l'adresse IP du dom0. Dans une configuration en mode NAT, l'adresse est imposée à 10.0.0.127, mais dans le cas d'une configuration en mode Bridge, l'adresse IP de l'interface physique (ici eth0) est utilisée:
MAINDOM_IP="10.0.0.127" if [ $(command grep "^[^#]*bridge" '/etc/xen/xend-config.sxp' | command wc --lines) -gt 0 ]; then MAINDOM_IP="$(command ifconfig eth0 | command grep "inet " | command sed -e 's/^.*inet [^:]*:\([^ ]*\) .*$/\1/')" fi
Vérifiez l'adresse IP détectée:
command echo "L'adresse IP de ce serveur pour les DomU est : ${MAINDOM_IP}"
Remarque : Si l'adresse obtenue n'est pas correcte, renseignez une valeur correcte :
MAINDOM_IP="192.168.1.5"
Installation
Préparation de l'environnement
Installez les logiciels nécessaires:
command apt-get install xen-tools
Créez l'interface dummy0 si nécessaire:
if [ -z "$(command ifconfig | command grep "${MAINDOM_IP}")" ]; then
MAINDOM_RANGE="$(command echo ${MAINDOM_IP} | command sed -e 's/\(.*\)\.[0-9]*/\1/')"
command modprobe dummy
command echo "dummy" >> '/etc/modules'
command echo "
# Xen main interface.
auto dummy0
iface dummy0 inet static
address ${MAINDOM_IP}
netmask 255.255.255.0
network ${MAINDOM_RANGE}.0
broadcast ${MAINDOM_RANGE}.255" \
>> '/etc/network/interfaces'
command ifup dummy0
fi
Préparation de l'architecture de sauvegarde
Ce guide propose une architecture de sauvegarde basée sur Backup Manager. Les machines virtuelles (domU) rapatrient les sauvegardes dans le dossier " /var/archives" de la machine hôte (dom0). Assurez-vous de l'existence de ce dossier:
command mkdir --parents '/var/archives' command chown root:backup '/var/archives' command chmod ug+rwx '/var/archives'
Configurez Backup Manager pour que le dossier '/var/archives' soit ouvert aux machines virtuelles, et que les archives des domU soient purgées en même temps que celles du dom0
command sed -i -e 's/[#]*\(.*BM_REPOSITORY_GROUP=\).*$/\1"backup"/' \ -e 's/[#]*\(.*BM_REPOSITORY_CHMOD=\).*$/\1"770"/' \ -e 's/[#]*\(.*BM_ARCHIVE_STRICTPURGE=\).*$/\1"false"/' \ '/etc/backup-manager.conf'
Créez l'utilisateur xen-backup utilisé par les domU pour uploader les sauvegardes dans le dom0:
command adduser --system --shell '/bin/sh' --home '/var/lib/xen-backup' --disabled-password 'xen-backup'
Ajoutez l'utilisateur aux groupes backup et ssh-users:
command adduser 'xen-backup' 'backup'
if [ -n "$(command grep 'ssh-users' '/etc/group')" ]; then
command adduser 'xen-backup' 'ssh-users'
fi
Créez une clef RSA pour l'identification sans mot de passe au compte xen-backup:
command mkdir --parents '/var/lib/xen-backup/.ssh/'
command ssh-keygen -t rsa -C "upgrade account key" -N "" -f '/var/lib/xen-backup/.ssh/id_rsa' command cat '/var/lib/xen-backup/.ssh/id_rsa.pub' \ >> '/var/lib/xen-backup/.ssh/authorized_keys' command chown -R xen-backup:nogroup '/var/lib/xen-backup/.ssh'
Autorisez l'accès au serveur SSH par les domU si Knockd est installé:
SSH_PORT="$(command grep '^Port' '/etc/ssh/sshd_config' \
| command sed -e 's/^Port[\t ]*//g')"
if [ -e '/etc/network/if-up.d/iptables-ssh-reject' ]; then
command echo "#"\!"/bin/bash
# Allow SSH access from domU
command iptables -C INPUT ! -s 10.0.0.0/24 -p tcp -m state --state NEW --dport ${SSH_PORT} -j DROP > '/dev/null' \\
|| command iptables -A INPUT ! -s 10.0.0.0/24 -p tcp -m state --state NEW --dport ${SSH_PORT} -j DROP" \
> '/etc/network/if-up.d/iptables-ssh-reject'
command chmod +x '/etc/network/if-up.d/iptables-ssh-reject'
while command iptables -D INPUT -p tcp -m state --state NEW --dport ${SSH_PORT} -j DROP; do echo; done
/etc/network/if-up.d/iptables-ssh-reject
fi
Configuration du serveur SMTP
Attention: Ce qui suit peut casser la configuration du serveur SMTP du dom0. Si la configuration d'Exim 4 est personnalisée, et que le mode réseau de Xen est NAT, veillez à ce que le serveur SMTP écoute sur l'adresse 10.0.0.127, et accepte le relai des emails en provenance de 10.0.0.0/24.
Configurez le serveur SMTP pour relayer les emails provenant des domUs:
MAINDOM_RANGE="$(command echo ${MAINDOM_IP} | command sed -e 's/\(.*\)\.[0-9]*/\1/')" command sed -i \
-e "s|dc_local_interfaces=.*\$|dc_local_interfaces='127.0.0.1;${MAINDOM_IP}'|" \ -e "s|dc_relay_nets=.*\$|dc_relay_nets='${MAINDOM_RANGE}.0/24'|" \ '/etc/exim4/update-exim4.conf.conf'
Mettez à jour la configuration d'Exim 4:
command update-exim4.conf /etc/init.d/exim4 restart
Configuration
Assignation d'espace disque
Par sécurité, augmentez à 1Go la taille du Swap des domU créés:
command sed -i -e 's/^\(swap[ ]*=[ ]*\)[^ ]*\([ ]*#.*\)$/\11Gb\2/' '/etc/xen-tools/xen-tools.conf'
Remarque : Si vous disposez de peu d'espace disque, vous pouvez diviser par 2 la taille du swap et du root (c'est à dire passer respectivement de 1 Go et 4 Go à 512 Mo et 2 Go):
command sed -i -e 's/^\(size[ ]*=[ ]*\)[^ ]*\([ ]*#.*\)$/\12Gb\2/' \ -e 's/^\(swap[ ]*=[ ]*\)[^ ]*\([ ]*#.*\)$/\1512Mb\2/' \ '/etc/xen-tools/xen-tools.conf'
Paramètres réseau
Dans le cas où Xen utilise un réseau nat, configurez les paramètres réseau pour la création de machine virtuelles utilisant une adresse IP fixe:
if [ $(command grep '^[^#]*nat' '/etc/xen/xend-config.sxp' | command wc --lines) -gt 0 ]; then command sed -i \
-e 's/^[# ]*\(gateway[ ]*=\).*$/\1 10.0.0.128/' \ -e 's/^[# ]*\(netmask[ ]*=\).*$/\1 255.255.255.0/' \ '/etc/xen-tools/xen-tools.conf' fi
Remarque : Dans le cas où Xen utilise un bridge, configurez manuellement les paramètres réseau local dans "/etc/xen-tools/xen-tools.conf".
Utilisation de volumes logiques
Configurez xen-tools pour créer les disques des domU à l'aide de LVM. Détectez le premier groupe de volumes LVM du système:
LVM_VG="$(command vgdisplay \ | command grep "VG Name" \ | command head --lines=1 \ | command cut --characters=25-)"
Ajustez la configuration de l'outil:
command sed -i -e "s/^# \(lvm = \).*/\1${LVM_VG}/" '/etc/xen-tools/xen-tools.conf'
Sélection du noyau
Configurez la détection automatique du kernel utilisé par les domU:
command sed -i -e 's/^\(kernel =\).*\$/\1 \/boot\/vmlinuz-`uname -r`/' \ -e 's/^\(initrd =\).*\$/\1 \/boot\/initrd.img-`uname -r`/' \ '/etc/xen-tools/xen-tools.conf'
Correction du problème "clocksource/0: Time went backwards"
Afin d'éviter que les domU deviennent inaccessibles après un redémarrage du Dom0 à cause de l'erreur "clocksource/0: Time went backwards", ajoutez l'option "extra = 'clocksource=xen'" au modèles de configuration des domU:
command sed -i -e "/^on_crash/a\\ \\ # Preventing clocksource/0: Time went backwards\\ extra = 'clocksource=xen'" \ '/etc/xen-tools/xm.tmpl'
Configuration initiale des domU
Créez un rôle pour mettre en place des domU pré-configurés avec:
- Installation des paquets locales, sudo, ntp, cron-apt, rkhunter, vim, screen, backup-manager et fail2ban
- Mises à jour automatisées par lot.
- Mise en place de l'architecture de sauvegarde avec backup-manager.
Accès sans mot de passe aux domU
Créez une clef RSA pour le compte root du dom0 si vous souhaitez accéder facilement aux comptes root des domU par SSH:
if [ ! -e "${HOME}/.ssh/id_rsa" ]; then command ssh-keygen -t rsa -f "${HOME}/.ssh/id_rsa" fi
Mises à jour par lot
Créez une clef RSA pour l'identification sans mot de passe aux comptes "xen-upgrade" des domU:
command mkdir --parents '/etc/xen-tools/ssh-keys'
command ssh-keygen -t rsa -C "upgrade account key" -N "" -f '/etc/xen-tools/ssh-keys/xen-upgrade-rsa'
Installez l'outil de mise à jour des domU par lot:
command wget 'https://raw.github.com/biapy/howto.biapy.com/master/xen-tools/xen-apt-get' \ --no-check-certificate --output-document='/usr/bin/xen-apt-get' command chmod +x '/usr/bin/xen-apt-get'
Mettez à jour l'ensemble des domU actifs avec:
# command xen-apt-get update # command xen-apt-get upgrade
Mise en place du rôle
Mettez en place le fichier de configuration du rôle "automatic":
command wget 'https://raw.github.com/biapy/howto.biapy.com/master/xen-tools/automatic' \ --no-check-certificate --output-document='/etc/xen-tools/role.d/automatic'
command chmod +x '/etc/xen-tools/role.d/automatic'
Créez un squelette de fichiers de configuration pour l'initialisation des domU:
command mkdir --parents '/etc/xen-tools/skel/root' command mkdir --parents '/etc/xen-tools/skel/root/.ssh' command mkdir --parents '/etc/xen-tools/skel/etc/default' command mkdir --parents '/etc/xen-tools/skel/etc/exim4' command mkdir --parents '/etc/xen-tools/skel/etc/cron.d'
command mkdir --parents '/etc/xen-tools/skel/etc/cron.daily' command mkdir --parents '/etc/xen-tools/skel/etc/apt/apt.conf.d' command mkdir --parents '/etc/xen-tools/skel/etc/xen-data' command mkdir --parents '/etc/xen-tools/skel/usr/bin'
Initialisez le squelette des domU avec la configuration du dom0:
command cp '/root/.bashrc' '/etc/xen-tools/skel/root/' if [ -e /root/.vimrc ]; then command cp '/root/.vimrc' '/etc/xen-tools/skel/root/' fi command cp '/etc/timezone' '/etc/xen-tools/skel/etc/' command cp '/etc/localtime' '/etc/xen-tools/skel/etc/' command cp '/etc/locale.gen' '/etc/xen-tools/skel/etc/' command cp '/etc/environment' '/etc/xen-tools/skel/etc/' command cp '/etc/default/locale' '/etc/xen-tools/skel/etc/default/'
Ajoutez la clef publique SSH du dom0 aux hôtes connu des domU:
command ssh-keyscan -H -t rsa "${MAINDOM_IP}" >> '/etc/xen-tools/skel/root/.ssh/known_hosts'
Autorisez l'identification sans mot de passe du compte root du dom0 sur le compte root des domU:
if [ -e "${HOME}/.ssh/id_rsa.pub" ]; then command cat "${HOME}/.ssh/id_rsa.pub" \ >> "/etc/xen-tools/skel/root/.ssh/authorized_keys" fi
Configurez la redirection des emails envoyés par les domU vers le dom0:
command wget 'https://raw.github.com/biapy/howto.biapy.com/master/xen-tools/update-exim4.conf.conf' \ --output-document='/etc/xen-tools/skel/etc/exim4/update-exim4.conf.conf' command sed -i -e "s/dc_smarthost=.*\$/dc_smarthost='${MAINDOM_IP}'/" \ '/etc/xen-tools/skel/etc/exim4/update-exim4.conf.conf' echo "root@$(command hostname --fqdn)" > '/etc/xen-tools/skel/root/.email'
Ajoutez l'outil d'administration de Backup Manager aux domU:
command wget 'https://raw.github.com/biapy/howto.biapy.com/master/backup-manager/backup-manager-tools' \ --quiet --no-check-certificate --output-document='/etc/xen-tools/skel/usr/bin/backup-manager-tools' command chmod +x '/etc/xen-tools/skel/usr/bin/backup-manager-tools'
Téléchargez la configuration par défaut du Backup Manager pour les machines virtuelles:
command wget 'https://raw.github.com/biapy/howto.biapy.com/master/xen-tools/backup-manager.conf' \ --no-check-certificate --output-document='/etc/xen-tools/skel/etc/backup-manager.conf' command sed -i -e "s|[#]*\(.*BM_UPLOAD_SSH_HOSTS=\).*$|\1\"${MAINDOM_IP}\"|" \ '/etc/xen-tools/skel/etc/backup-manager.conf'
Ajoutez au squelette la configuration cron de Backup Manager:
command echo '#!/bin/sh
# cron script for backup-manager
test -x /usr/sbin/backup-manager || exit 0
/usr/sbin/backup-manager' \
> '/etc/xen-tools/skel/etc/cron.daily/backup-manager'
command chmod +x '/etc/xen-tools/skel/etc/cron.daily/backup-manager'
Configurez le port du serveur SSH du dom0:
SSH_PORT="$(command grep '^Port' '/etc/ssh/sshd_config' \
| command sed -e 's/^Port[\t ]*//g')"
command sed -i \ -e "s/[#]*\(.*BM_UPLOAD_SSH_PORT=\).*\$/\1\"${SSH_PORT}\"/" \ '/etc/xen-tools/skel/etc/backup-manager.conf'
Ajoutez au squelette la clef privée d'identification au compte xen-backup du dom0:
command cp '/var/lib/xen-backup/.ssh/id_rsa' '/etc/xen-tools/skel/etc/xen-data/'
Remerciements
- Merci aux développeurs de xen-tools.
- Merci à TMS pour Sécuriser l’accès au serveur openssh avec une authentification par clés sur Génération Libre.
- Merci à Nyarla sur irc.freenode.net#ubuntu-fr pour avoir répondu à mes questions sur Backup Manager.
- Merci aux auteurs de Backup Manager sur la documentation Ubuntu francophone.
- Merci aux auteurs de Xen Networking sur le wiki dedié à Xen.
- Merci à GaB pour Manage SSH known_hosts entries.