Proxmox3
Nous allons voir comment installer proxmox 2 (en beta à l'heure où j'écris ces lignes) avec support d'un raid virtuel (mdadm) et LVM2.
Prérequis
Ce tutoriel se base sur l'utilisation de debootstrap pour installer une base de système d'exploitation debian. La plupart des hébergeurs proposent un système de "rescue" permettant l'installation de debian par ce moyen. Si vous ne disposez pas de mode rescue, vous pouvez toujours utiliser l'installeur proposé par votre hébergeur, ou encore passer par un kvm pour installer vous même le système avec l'iso de debian.
Pour les débutants
Si vous êtes débutant en administration linux, je vous conseil de sauvegarder quelque part les fichier suivant issu d'une précédente installation de debian:
/etc/networks
/etc/network/interfaces
/etc/resolv.conf
/etc/hosts
/etc/fstab
/etc/mdadm/mdadm.conf
si vous disposez d'un raid logiciel- tout fichier de personnalisation de grub (
/etc/grub.d/06_OVHkernel
par exemple)
Partitionnement
Voici le partitionnement que je vais utiliser :
- /dev/sd*1 15 Go (/) (type de partition : FD)
- /dev/sd*2 4096 Go (swap) (type de partition : 82)
- /dev/sd*3 reste de l'espace disque (lvm) (type de partition : FD)
Nous allons créer le RAID software (raid 1) suivant :
- /dev/md0 regroupant /dev/sda1 et /dev/sdb1 (/)
- /dev/md1 regroupant /dev/sda3 et /dev/sdb3 (lvm)
mdadm --create /dev/md0 --level=1 --assume-clean --raid-devices=2 /dev/sda1 /dev/sdb1 mdadm --create /dev/md1 --level=1 --assume-clean --raid-devices=2 /dev/sda3 /dev/sdb3
Création des systèmes de fichiers
mkfs.ext4 /dev/md0 mkswap /dev/sda2 mkswap /dev/sdb2
Création du LVM
pvcreate /dev/md1 vgcreate main /dev/md1
Nous ne créerons pas de volume logique dans le LVM maintenant. Nous laisserons en effet proxmox et KVM se charger de créer des volumes logiques pour chaque VM.
Installation de proxmox
Installation du système de base
mount /dev/md0 /mnt
debootstrap --arch=amd64 squeeze /mnt http://ftp.fr.debian.org/debian
Configuration de Debian
mount -o bind /proc /mnt/proc mount -o bind /dev /mnt/dev mount -o bind /sys /mnt/sys chroot /mnt
Editez le fichier /etc/apt/sources.list
:
deb http://ftp.fr.debian.org/debian squeeze main contrib non-free deb-src http://ftp.fr.debian.org/debian squeeze main contrib non-free #Sec deb http://security.debian.org/ squeeze/updates main contrib non-free deb-src http://security.debian.org/ squeeze/updates main contrib non-free #anciennement debian-volatile deb http://ftp.fr.debian.org/debian squeeze-updates main contrib non-free deb-src http://ftp.fr.debian.org/debian squeeze-updates main contrib non-free
Mettez à jour les paquets :
aptitude update aptitude safe-upgrade
Installez les locales et la configuration de console :
aptitude install locales dpkg-reconfigure locales aptitude install console-data dpkg-reconfigure console-data # from arch > french > latin9)
Définissez la zone horaire :
tzselect dpkg-reconfigure tzdata
Installez mdadm pour gérer le raid software :
aptitude install postfix mdadm
Configurez votre /etc/fstab :
# <file system> <mount point> <type> <options> <dump> <pass> /dev/md0 / ext4 errors=remount-ro 0 1 /dev/sda2 swap swap defaults 0 0 /dev/sdb2 swap swap defaults 0 0
/etc/network/interfaces :
# The loopback network interface auto lo iface lo inet loopback auto eth0 iface eth0 inet static address XXXX netmask 255.255.255.0 network XXXX broadcast XXXX gateway XXXX
/etc/hosts:
# Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost ipdelamachine votrehostname # The following lines are desirable for IPv6 capable hosts #(added automatically by netbase upgrade) ::1 ip6-localhost ip6-loopback feo0::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts
echo votrehostname > /etc/hostname echo votrehostname > /etc/mailname
ATTENTION Le fichier /etc/hosts DOIT être cohérent avec le fichier /etc/hostname. Par exemple, si le contenu de /etc/hostname est proxmox.domain.tld
et que l'ip de votre proxmox est 225.182.54.9 il faudra veiller a avoir les informations suivantes dans /etc/hosts
:
127.0.0.1 localhost 225.182.54.9 proxmox.domain.tld
N'oubliez pas de configurer les dns (ceux de votre hébergeur dédié) :
nameserver XX.XX.XX.XX
Installation de proxmox - kernel
Ajoutez le dépot proxmox dans le fichier /etc/apt/source.list :
# PVE packages provided by proxmox.com deb http://download.proxmox.com/debian squeeze pve
Ajoutez la clé du dépôt proxmox :
wget -O- "http://download.proxmox.com/debian/key.asc" | apt-key add - aptitude update
Installez le kernel proxmox :
aptitude install pve-kernel-2.6.32-6-pve
Lorsqu'on vous demandera où installer grub, choisissez sda et sdb.
Et les headers si vous en avez besoin :
aptitude install pve-headers-2.6.32-6-pve
Editez le fichier /etc/default/grub
et décommentez la ligne suivante :
GRUB_DISABLE_LINUX_UUID=true
Relancez la configuration de grub :
update-grub
aptitude install openssh-server passwd
Vous pouvez maintenant sortir de votre chroot et démonter le système de fichier
exit umount /mnt/sys umount /mnt/dev umount /mnt/proc umount /mnt
puis rebootez sur le disque dur sur votre kernel pve
Installation de proxmox - pve
Une fois le reboot effectué, vérifiez que vous etes sur le bon kernel avec uname -a
Si c'est le cas, vous pouvez installer pve :
aptitude install ntp lvm2
aptitude install proxmox-ve-2.6.32
Supprimez eth0 de votre fichier /etc/network/interfaces
et ajoutez y ceci :
auto eth0 iface eth0 inet manual auto vmbr0 iface vmbr0 inet static address xxxxx netmask 255.255.255.0 network xxxx broadcast xxxx gateway xxxx bridge_ports eth0 bridge_stp off bridge_fd 0
Rebootez une dernière fois pour appliquer les changements.
Votre proxmox sera accessible à l'adresse https://ip:8006)
Configuration réseau avancée
Ajout d'une IPv6 sur vmbr0
Ajoutez les lignes suivantes dans /etc/network/interfaces
iface vmbr0 inet6 static address <votreipv6> netmask <votre masque ipv6 (généralement 64)
Il est aussi capital d'adapter votre fichier /etc/hosts en fonction de toutes les IPs (qu'elles soient ipv4 ou ipv6 que vous configurez sur votre hôte). En effet, proxmox se sert du fichier /etc/hosts pour déterminer des éléments de configuration locale.
Ajout d'un réseau interne vmbr1
Nous allons voir comment créer un réseau interne avec proxmox, c'est à dire, un réseau qui ne sera attaché à aucune interface réseau physique. L'intérêt est d'offrir un débit bien supérieur pour les communications entre les VMs.
Ajoutez les lignes suivantes dans /etc/network/interfaces
:
auto vmbr1 iface vmbr1 inet static address 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255 bridge_ports dummy0 bridge_stp off bridge_fd 0 #post-up /etc/pve/kvm-networking.sh
Si vous voulez utiliser deux interfaces internes, ajoutez la ligne suivante dans /etc/modprobe.d/local
:
options dummy numdummies=2
Note : vous pouvez faire de même en ipv6 :
- il faut utiliser le range fd00::/8 (http://en.wikipedia.org/wiki/Unique_Local_Address)
- pour générer votre ula : http://pfoo.csnu.org/ula/gen-ula.html
Sécurisation de base
Je vous conseil de commencer à sécuriser votre ssh :
- désactivez le login root (directive
PermitRootLogin no
dans/etc/ssh/sshd_config
) - utilisez la directive
allowusers <user>
dans/etc/ssh/sshd_config
pour n'autoriser que certains utilisateurs à se connecter en ssh
Configurer le serveur mail postfix
Configuration
Par défaut, postfix fournit une configuration suffisante. Voici les modifications que j'y ai apporté :
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no disable_vrfy_command = yes smtpd_helo_required = yes smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_use_tls=yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache mydomain = proxmox.domain.tld append_dot_mydomain = yes myhostname = proxmox.domain.tld myorigin = /etc/mailname mydestination = proxmox.domain.tld, localhost.localdomain, localhost relayhost = smtp_sasl_password_maps = mynetworks = 127.0.0.0/8 relay_domains = relay_recipient_maps = inet_interfaces = 127.0.0.1, [::1], ipv4_de_votre_serveur, [ipv6_de_votre_serveur] inet_protocols = all alias_maps = proxy:hash:/etc/aliases smtpd_sasl_auth_enable = no smtpd_sasl_local_domain = $myhostname smtpd_sender_restrictions = reject_unknown_sender_domain, reject_non_fqdn_sender smtpd_recipient_restrictions = permit_inet_interfaces, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unauth_destination smtpd_client_restrictions = permit_inet_interfaces, permit_mynetworks, permit_sasl_authenticated, reject_unauth_pipelining smtpd_helo_restrictions = permit_inet_interfaces, permit_mynetworks, permit_sasl_authenticated, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, reject_unknown_helo_hostname smtpd_data_restrictions = permit_inet_interfaces, permit_mynetworks, permit_sasl_authenticated, reject_unauth_pipelining
Il faudra évidemment configurer les directives inet_interfaces
myhostname
et mydomain
Certificats SSL
Si vous avez votre propre autorité ssl, vous pouvez générer votre propre certificat. Si ce n'est pas le cas, vous pouvez toujours aller lire ceci afin d'apprendre à créer votre autorité ssl.
Ajoutez les lignes suivantes dans /etc/ssl/openssl.cnf
:
[POSTFIX] nsComment = "SMTP Server Certificate" subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer:always issuerAltName = issuer:copy basicConstraints = critical,CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment nsCertType = server extendedKeyUsage = serverAuth
Puis générez la clé et le certificat, et signez le avec votre autorité (onyx_ca dans mon cas) :
openssl req -config /etc/ssl/openssl.cnf -nodes -newkey rsa:2048 -keyout postfix.key -out postfix.req openssl ca -config /etc/ssl/openssl.cnf -name onyx_ca -extensions POSTFIX -in postfix.req -out postfix.pem
Déplacez les fichiers dans le répertoire /etc/postfix/ssl
:
mkdir /etc/postfix/ssl mv postfix.key /etc/postfix/ssl/ mv postfix.pem /etc/postfix/ssl/ chmod 600 /etc/postfix/ssl/* cat /etc/ssl/root_ca/root_ca.pem /etc/ssl/onyx_ca/onyx_ca.pem > /etc/postfix/ssl/ca_chain.pem
Il faut encore modifier /etc/postfix/main.cf
:
smtpd_tls_cert_file=/etc/postfix/ssl/postfix.pem smtpd_tls_key_file=/etc/postfix/ssl/postfix.key smtpd_tls_CAfile=/etc/postfix/ssl/ca_chain.pem smtpd_use_tls=yes smtp_tls_cert_file=/etc/postfix/ssl/postfix.pem smtp_tls_key_file=/etc/postfix/ssl/postfix.key smtp_tls_CAfile=/etc/postfix/ssl/ca_chain.pem smtpd_tls_security_level=may smtp_tls_security_level=may smtpd_tls_loglevel = 1 smtp_tls_loglevel = 1 #smtp_tls_policy_maps = hash:/etc/postfix/tls_policy
Utiliser sa propre CA pour le certificat proxmox
Copiez les fichiers de votre ca ici : /etc/pve/pve-root-ca.pem et /etc/pve/priv/pve-root-ca.key
Pour générer automatiquement les certificats serveurs :
rm /etc/pve/local/pve-ssl.* pvecm updatecerts
Vous pouvez aussi générez vous même le certificat serveur avec openssl et le placer ici : /etc/pve/local/pve-ssl.pem etc/pve/local/pve-ssl.key
Il faudra modifier la configuration apache dans /etc/apache2/sites-enabled/pve.conf afin d'ajouter votre éventuel chaine de certification
Configurer les alertes raid software
Une fois votre serveur mail configuré, éditez le fichier /etc/mdadm/mdadm.conf
et définissez l'adresse à laquelle vous souhaitez recevoir les alertes à la ligne MAILADDR
Relancez mdadm :
/etc/init.d/mdadm restart
Surveiller l'état des disques avec SMART
Commencez par installer le paquet smartmontools :
aptitude install smartmontools
Vérifiez que vos disques gèrent smart et qu'il est activé :
smartctl -i /dev/sda smartctl -i /dev/sdb
Si smart n'est pas activé, essayez de l'activer comme ceci :
smartctl -s on -d ata /dev/sda
Vérifiez le statut de santé de vos disques :
smartctl -H /dev/sda smartctl -H /dev/sdb
S'il indique PASSED
c'est bon de ce côté. S'il vous indique FAILED
, sauvegardez immédiatement vos données !
Vérifiez la présence d'erreurs dans le log smart :
smartctl -l error /dev/sda smartctl -l error /dev/sdb
Si vous voyez No Errors Logged
ou quelques erreurs, c'est bon. S'il y eu a beaucoup, il faut envisager de changer le disque.
Pour autoriser le lancement de smartd, éditez le fichier /etc/default/smartmontools
ainsi :
# uncomment to start smartd on system startup start_smartd=yes # uncomment to pass additional options to smartd on startup smartd_opts="--interval=1800"
Le fichier de configuration de smartd est /etc/smartd.conf
. Commentez la ligne DEVICESCAN
puis ajoutez les lignes suivantes pour surveiller les deux disques durs :
/dev/sda -a -o on -S on -s (S/../.././02|L/../../6/03) -m mail@domain.tld /dev/sdb -a -o on -S on -s (S/../.././02|L/../../6/03) -m mail@domain.tld
Nous activons la surveillance de tous les attributs (-a), et lançons un short self test
tous les jours à 2h du matin, et un long self test
tous les samedi à 3h du matin. Si des erreurs sont détectés, un email est envoyé à mail@domain.tld.
Utiliser son propre certificat ssl pour l'interface web
Protéger votre proxmox
sshguard
http://wiki.csnu.org/index.php?title=Prot%C3%A9ger_SSH_avec_sshguard
firewall iptables
VMs
Télécharger vos images
Vous pouvez placer les iso dans /var/lib/vz/template/iso/
avec wget
par exemple.
Notez que l'interface graphique de proxmox propose une fonction d'upload.
Créer votre première VM
Configuration réseau en bridge vmbr0 (ip public)
Configuration réseau en bridge vmbr1 (ip locale)
Configuration réseau de la VM :
iface eth0 inet static address 192.168.0.2 netmask 255.255.255.0 gateway 192.168.0.1
Règle iptables à ajouter sur l'hôte :
iptables -t nat -A POSTROUTING -s 192.168.0.2 -o vmbr0 -j SNAT --to IP-PUBLIC-DE-VOTRE-HOTE
Si vous souhaitez rendre accessible l'un des services de la VM depuis l'ip de l'hote sur un port sépcifique :
iptables -t nat -A PREROUTING -p tcp -d <ip de l'hote> --dport <port souhaité> -i vmbr0 -j DNAT --to-destination 192.168.0.2:port
Accéder a une VM avec un client vnc
http://pve.proxmox.com/wiki/Vnc_2.0
Importer une VM depuis vmware ESXi
qm et modification des VMs en ligne de commande
Protéger SSH dans une VM
Reportez vous à Protéger SSH avec sshguard
Monter les partitions d'une VM depuis l'host
Annexes
Problème de layout dans la console vnc
Dans l'interface web de proxmox : datacenter > option > passez Keyboard de default
à French
.
Erreurs du type IPv6 addrconf: prefix with wrong length 56
Cette erreur est typique sous linux si les routeurs de votre serveur annoncent des blocs IPv6 /56 alors que vous configurez des /64.
Ajouter les lignes suivantes dans votre fichier /etc/sysctl.conf
:
net.ipv6.conf.all.autoconf = 0 net.ipv6.conf.default.autoconf = 0 net.ipv6.conf.lo.autoconf = 0 net.ipv6.conf.eth0.autoconf = 0 net.ipv6.conf.vmbr0.autoconf = 0 net.ipv6.conf.vmbr1.autoconf = 0 net.ipv6.conf.dummy0.autoconf = 0
Si vous avez créé d'autres interfaces réseau, il faudra faire selon le même modèle.
Terminez par relancer procps :
/etc/init.d/procps restart
LVM inaccessible depuis l'host
lvm pvscan lvm vgchange -ay
L'interface web ne fonctionne pas, apache n'est pas lancé, et la commande qm retourne une erreur ipcc_send_rec failed: Connection refused
Vérifiez la présence de fichiers et dossiers dans /etc/pve/
. Si ce dossier est vide, c'est probablement que votre fichier /etc/hosts
est mal configuré.
Essayez de relancer pve-cluster
:
/etc/init.d/pve-cluster restart
Si vous avez une erreur ou un warning, lancez la commande pmxcfs. Vous devriez obtenir ceci :
$# pmxcfs Jan 21 15:28:19 proxmox pmxcfs[1846]: Unable to get local IP address (pmxcfs.c:721:main)
Vérifiez alors que le contenu de /etc/hostname
est défini dans /etc/hosts
.
Si par exemple /etc/hostname
contient proxmox.domain.tld
vous devriez avoir la ligne suivante dans /etc/hosts
:
VOTREIP proxmox.domain.tld
Gestion du raid virtuel avec mdadm
mdadm --manage /dev/md0 --set-faulty /dev/sdb1 mdadm --manage /dev/md0 --remove /dev/sdb1 mdadm --manage /dev/md0 --add /dev/sdb1
Vous pouvez suivre la reconstruction avec
cat /proc/mdstat
Surveillance des disques durs
smartctl -t offline /dev/sda
Pour vérifier le journal d'erreur
smartctl -l error /dev/sda
Les selftests :
smartctl -t short /dev/sda smartctl -t long /dev/sda smartctl -t conveyance /dev/sda
Pour vérifier le journal d'erreur des selftests :
smartctl -l selftest /dev/sda
Pas assez d'interfaces loopback
Créer le fichier /etc/modprobe.d/local-loop.conf
contenant :
options loop max_loop=64
Vous pouvez ensuite redémarrer ou recharger le module loop :
rmmod loop && modprobe loop