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
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
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
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
Télécharger vos images
Vous pouvez placer les iso dans /var/lib/vz/template/iso/
avec wget
par exemple
VMs
Créer votre première VM
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
Monter les partitions d'une VM depuis l'host
Annexes
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