« Proxmox et KVM » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
(55 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 2 : | Ligne 2 : | ||
[[Category:debian]] | [[Category:debian]] | ||
[[Category:virtualisation]] | [[Category:virtualisation]] | ||
* '''Cette page n'est plus maintenue, les informations contenues ici sont potentiellement obsolètes''' | |||
=Prérequis= | =Prérequis= | ||
Ligne 16 : | Ligne 19 : | ||
* <code>/etc/hosts</code> | * <code>/etc/hosts</code> | ||
* <code>/etc/fstab</code> | * <code>/etc/fstab</code> | ||
* <code>/etc/mdadm/mdadm.conf </code> | * <code>/etc/mdadm/mdadm.conf</code> si vous disposez d'un raid logiciel | ||
* tout fichier de personnalisation de grub (<code>/etc/grub.d/06_OVHkernel</code> par exemple) | * tout fichier de personnalisation de grub (<code>/etc/grub.d/06_OVHkernel</code> par exemple) | ||
Ligne 22 : | Ligne 25 : | ||
Commencer par partitionner ainsi vos deux disques (avec fdisk ou cfdisk) : | Commencer par partitionner ainsi vos deux disques (avec fdisk ou cfdisk) : | ||
* /dev/sd*1 | * /dev/sd*1 200 Mo (/boot) (type de partition : FD) | ||
* /dev/sd*2 | * /dev/sd*2 15 Go (/) (type de partition : FD) | ||
* /dev/sd*3 4096 Go (swap) | * /dev/sd*3 4096 Go (swap) (type de partition : 82) | ||
* /dev/sd*4 reste de l'espace disque (lvm) | * /dev/sd*4 partition étendue (invisible sous cfdisk) | ||
* /dev/sd*5 20 Go (/var) (type de partition : FD) | |||
* /dev/sd*6 reste de l'espace disque (lvm) (type de partition : FD) | |||
Nous allons créer le RAID software (raid 1) : | Nous allons créer le RAID software (raid 1) : | ||
* /dev/md0 regroupant /dev/sda1 et /dev/sdb1 (/) | * /dev/md0 regroupant /dev/sda1 et /dev/sdb1 (/boot) | ||
* /dev/md1 regroupant /dev/sda2 et /dev/sdb2 (/var) | * /dev/md1 regroupant /dev/sda2 et /dev/sdb2 (/) | ||
* /dev/md2 | * /dev/md2 regroupant /dev/sda5 et /dev/sdb5 (/var) | ||
* /dev/md3 regroupant /dev/sda6 et /dev/sdb6 (lvm) | |||
<pre> | |||
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/sda2 /dev/sdb2 | |||
#sd*4 est la partition étendue | |||
mdadm --create /dev/md2 --level=1 --assume-clean --raid-devices=2 /dev/sda5 /dev/sdb5 | |||
mdadm --create /dev/md3 --level=1 --assume-clean --raid-devices=2 /dev/sda6 /dev/sdb6 | |||
</pre> | |||
==Création des systèmes de fichiers== | |||
<pre> | |||
mkfs.ext3 /dev/md0 | |||
mkfs.ext3 /dev/md1 | |||
mkfs.ext3 /dev/md2 | |||
mkswap /dev/sda3 | |||
mkswap /dev/sdb3 | |||
</pre> | |||
==Création du LVM== | |||
<pre> | |||
pvcreate /dev/md3 | |||
vgcreate main /dev/md3 | |||
</pre> | |||
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== | |||
<pre> | |||
mount /dev/md1 /mnt | |||
mkdir /mnt/boot | |||
mkdir /mnt/var | |||
mount /dev/md0 /mnt/boot | |||
mount /dev/md2 /mnt/var | |||
</pre> | |||
<pre>debootstrap --arch=amd64 lenny /mnt http://ftp.fr.debian.org/debian</pre> | |||
==Configuration de Debian== | |||
<pre> | |||
mount -o bind /proc /mnt/proc | |||
mount -o bind /dev /mnt/dev | |||
mount -o bind /sys /mnt/sys | |||
chroot /mnt | |||
</pre> | |||
Editez le fichier /etc/apt/sources.list : | |||
<pre> | |||
deb http://ftp.fr.debian.org/debian lenny main contrib non-free | |||
deb-src http://ftp.fr.debian.org/debian lenny main contrib non-free | |||
#Sec | |||
deb http://security.debian.org/ lenny/updates main contrib non-free | |||
deb-src http://security.debian.org/ lenny/updates main contrib non-free | |||
deb http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free | |||
</pre> | |||
Mettez à jour les paquets : | |||
<pre> | |||
aptitude update | |||
aptitude safe-upgrade | |||
</pre> | |||
Installez les locales et la configuration de console : | |||
<pre> | |||
aptitude install locales | |||
dpkg-reconfigure locales | |||
aptitude install console-data | |||
dpkg-reconfigure console-data # from arch > french > latin9) | |||
</pre> | |||
Définissez la zone horaire : | |||
<pre> | |||
tzselect | |||
dpkg-reconfigure tzdata | |||
</pre> | |||
Installez mdadm pour gérer le raid software : | |||
<pre> | |||
aptitude install mdadm | |||
</pre> | |||
Configurez votre /etc/fstab : | |||
<pre> | |||
# /etc/fstab: static file system information. | |||
# | |||
# <file system> <mount point> <type> <options> <dump> <pass> | |||
proc /proc proc defaults 0 0 | |||
/dev/md1 / ext3 defaults,errors=remount-ro 0 1 | |||
/dev/md0 /boot ext3 defaults 0 2 | |||
/dev/sda3 none swap sw 0 0 | |||
/dev/sdb3 none swap sw 0 0 | |||
/dev/md2 /var ext3 defaults 0 2 | |||
</pre> | |||
/etc/network/interfaces : | |||
<pre> | |||
# This file describes the network interfaces available on your system | |||
# and how to activate them. For more information, see interfaces(5). | |||
# The loopback network interface | |||
auto lo | |||
iface lo inet loopback | |||
# The primary network interface | |||
auto vmbr0 | |||
iface vmbr0 inet static | |||
address <IP> | |||
netmask 255.255.255.0 | |||
gateway <GW> | |||
bridge_ports eth0 | |||
bridge_stp off | |||
bridge_fd 0 | |||
</pre> | |||
/etc/hosts : | |||
<pre> | |||
127.0.0.1 localhost | |||
::1 localhost ip6-localhost ip6-loopback | |||
fe00::0 ip6-localnet | |||
ff00::0 ip6-mcastprefix | |||
ff02::1 ip6-allnodes | |||
ff02::2 ip6-allrouters | |||
<IP> <hostname> | |||
</pre> | |||
<pre> | |||
echo votrehostname > /etc/hostname | |||
echo votrehostname > /etc/mailname | |||
</pre> | |||
N'oubliez pas de configurer les dns (ceux de votre hébergeur dédié) : | |||
<pre>nameserver XX.XX.XX.XX</pre> | |||
==Installation de proxmox== | |||
Ajoutez le dépot proxmox dans le fichier /etc/apt/source.list : | |||
<pre> | |||
# PVE packages provided by proxmox.com | |||
deb ftp://download.proxmox.com/debian lenny pve | |||
</pre> | |||
Ajoutez la clé du dépôt proxmox : | |||
<pre> | |||
wget -O- "http://download.proxmox.com/debian/key.asc" | apt-key add - | |||
aptitude update | |||
</pre> | |||
<pre> | |||
aptitude install grub-pc | |||
grub-install /dev/sda | |||
grub-install /dev/sdb | |||
</pre> | |||
http://pve.proxmox.com/wiki/Proxmox_VE_Kernel | |||
Pour profiter d'openVZ, installez le kernel 2.6.32* : | |||
<pre>aptitude install pve-kernel-2.6.32-4-pve | |||
update-grub | |||
</pre> | |||
Sinon, installez le kernel pve-kernel-2.6.35-1-pve qui permet de profiter de KSM : | |||
<pre> | |||
aptitude install pve-kernel-2.6.35-1-pve | |||
update-grub | |||
</pre> | |||
Attention ! Vérifiez votre fichier /boot/grub/grub.cfg ! En particulier les directives menuentry | |||
update-grub avait configuré la ligne de boot suivante sur mon installation : | |||
<pre>linux /vmlinuz-2.6.35-1-pve root=/dev/md/1 ro</pre> | |||
a corriger en | |||
<pre>linux /vmlinuz-2.6.35-1-pve root=/dev/md1 ro</pre> | |||
Accesoirement installez les headers | |||
<pre>aptitude install pve-headers-2.6.35-1-pve | |||
</pre> | |||
<pre> | |||
aptitude install openssh-server | |||
passwd | |||
</pre> | |||
Si vous avez installé le kernel pve-kernel-2.6.35-1-pve installez proxmox-ve-2.6.35. Sinon, adaptez en fonction de votre kernel. | |||
<pre> | |||
aptitude install proxmox-ve-2.6.35 ntp lvm2 | |||
</pre> | |||
==configuration réseau avancée== | |||
===Ajout d'une IPv6 sur vmbr0=== | |||
Ajoutez les lignes suivantes dans <code>/etc/network/interfaces</code> | |||
<pre> | |||
iface vmbr0 inet6 static | |||
address <votreipv6> | |||
netmask <votre masque ipv6 (généralement 64) | |||
</pre> | |||
===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 <code>/etc/network/interfaces</code> | |||
<pre> | |||
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 | |||
</pre> | |||
Si vous voulez utiliser deux interfaces internes, ajoutez la ligne suivante dans <code>/etc/modprobe.d/local</code> : | |||
<pre>options dummy numdummies=2</pre> | |||
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 | |||
==reboot et postinstallation== | |||
<pre> | |||
exit | |||
umount /mnt/boot | |||
umount /mnt/var | |||
umount /mnt/proc | |||
umount /mnt/sys | |||
umount /mnt/dev | |||
umount /mnt | |||
</pre> | |||
Rebootez votre serveur en mode normal : | |||
<pre>reboot</pre> | |||
Créez votre utilisateur : | |||
<pre>adduser pfoo</pre> | |||
Je vous conseil de commencer à sécuriser votre ssh : | |||
* désactivez le login root (directive PermitRootLogin no dans <code>/etc/ssh/sshd_config</code>) | |||
* ajoutez la directive allowusers pfoo dans <code>/etc/ssh/sshd_config</code> | |||
=Utiliser son propre certificat ssl pour l'interface web= | |||
Je vous renvoi sur http://wiki.csnu.org/index.php?title=Installation_et_configuration_de_OpenSSL pour la mise en place d'une autorité de certification. | |||
Dans l'exemple suivant, je créé un certificat proxmox et le signe avec l'autorité onyx_ca : | |||
<pre> | |||
openssl req -newkey rsa:2048 -keyout proxmox.key -out proxmox.req | |||
openssl ca -name onyx_ca -extensions PROXMOX -in proxmox.req -out proxmox.pem | |||
</pre> | |||
<pre> | |||
mkdir /etc/apache2/ssl/ | |||
mv proxmox.* /etc/apache2/ssl/ | |||
cat /etc/ssl/root_ca/root_ca.pem /etc/ssl/onyx_ca/onyx_ca.pem > /etc/apache2/ssl/cachain.pem | |||
</pre> | |||
Modifiez le fichier <code>/etc/apache2/sites-enabled/pve.conf</code> comme suit : | |||
<pre> | |||
<VirtualHost *:443> | |||
SSLEngine on | |||
SSLProtocol all -SSLv2 | |||
#SSLCertificateFile /etc/pve/pve-ssl.pem | |||
#SSLCertificateKeyFile /etc/pve/pve-ssl.key | |||
SSLCertificateFile /etc/apache2/ssl/proxmox.pem | |||
SSLCertificateKeyFile /etc/apache2/ssl/proxmox.key | |||
SSLCertificateChainFile /etc/apache2/ssl/cachain.pem | |||
RewriteEngine on | |||
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) | |||
RewriteRule .* - [F] | |||
</VirtualHost> | |||
</pre> | |||
=Installer un serveur dns pour ses VEs= | |||
Commencez par installer le serveur bind9 : | |||
<pre>aptitude install bind9 bind9-host dnsutils</pre> | |||
Éditez le fichier <code>/etc/bind/named.conf.options</code> et ajoutez y les lignes suivantes : | |||
<pre> | |||
allow-query { | |||
127.0.0.1; | |||
91.121.141.220; | |||
::1; | |||
2001:41d0:1:bcdc::220; | |||
192.168.0.0/24; | |||
}; | |||
allow-recursion { | |||
127.0.0.1; | |||
91.121.141.220; | |||
::1; | |||
2001:41d0:1:bcdc::220; | |||
192.168.0.0/24; | |||
}; | |||
allow-query-cache { | |||
127.0.0.1; | |||
91.121.141.220; | |||
::1; | |||
2001:41d0:1:bcdc::220; | |||
192.168.0.0/24; | |||
}; | |||
version "[SECURED]"; | |||
allow-notify { | |||
127.0.0.1; | |||
91.121.141.220; | |||
::1; | |||
2001:41d0:1:bcdc::220; | |||
192.168.0.0/24; | |||
}; | |||
//interdiction du transfère complet de zones | |||
allow-transfer {"none";}; | |||
listen-on { 127.0.0.1; 192.168.0.0/24; 91.121.141.220; }; | |||
listen-on-v6 { ::1; 2001:41d0:1:bcdc::220; }; | |||
transfer-source 91.121.141.220; | |||
transfer-source-v6 2001:41d0:1:bcdc::220; | |||
notify-source 91.121.141.220; | |||
notify-source-v6 2001:41d0:1:bcdc::220; | |||
</pre> | |||
Vous pouvez noter que j'ai autorité toutes les IPs 192.168.0.0 à interroger le serveur dns étant donné que je me servirais de cette classe pour créer un réseau interne pour mes VEs. | |||
Ajoutez les lignes suivantes dans <code>/etc/resolv.conf</code> : | |||
<pre> | |||
nameserver ::1 | |||
nameserver 127.0.0.1 | |||
nameserver 192.168.0.1 | |||
nameserver 2001:41d0:1:bcdc::220 | |||
nameserver 91.121.141.220 | |||
</pre> | |||
=Sécuriser et configurer le serveur mail de son host= | |||
Lors de l'installation de l'interface proxmox, <code>postfix</code> a été automatiquement installé. | |||
Modifiez la configuration de postfix dans <code>/etc/postfix/main.cf</code> comme suit : | |||
<pre> | |||
# See /usr/share/postfix/main.cf.dist for a commented, more complete version | |||
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) | |||
biff = no | |||
# appending .domain is the MUA's job. | |||
append_dot_mydomain = no | |||
# Uncomment the next line to generate "delayed mail" warnings | |||
#delay_warning_time = 4h | |||
readme_directory = no | |||
# TLS parameters | |||
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 | |||
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for | |||
# information on enabling SSL in the smtp client. | |||
myhostname = onyx.csnu.org | |||
mydomain = onyx.csnu.org | |||
alias_maps = hash:/etc/aliases | |||
alias_database = hash:/etc/aliases | |||
myorigin = /etc/mailname | |||
mydestination = onyx.csnu.org, localhost | |||
relayhost = | |||
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24 | |||
mailbox_size_limit = 0 | |||
recipient_delimiter = + | |||
inet_protocols = all | |||
inet_interfaces = 127.0.0.1, [::1], 192.168.0.1, 91.121.141.220, [2001:41d0:1:bcdc::220] | |||
smtpd_sender_restrictions = | |||
reject_unknown_sender_domain, | |||
reject_non_fqdn_sender | |||
smtpd_recipient_restrictions = | |||
permit_mynetworks, | |||
permit_sasl_authenticated, | |||
reject_non_fqdn_hostname, | |||
reject_non_fqdn_sender, | |||
reject_non_fqdn_recipient, | |||
reject_unauth_destination, | |||
reject_unauth_pipelining, | |||
reject_invalid_hostname | |||
</pre> | |||
==SSL== | |||
Si vous avez votre propre autorité ssl, vous pouvez générer votre propre certificat. | |||
Ajoutez les lignes suivantes dans <code>/etc/ssl/openssl.cnf</code> : | |||
<pre> | |||
[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 | |||
</pre> | |||
Puis générez la clé et le certificat, et signez le avec votre autorité (onyx_ca dans mon cas) : | |||
<pre> | |||
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 | |||
</pre> | |||
Déplacez les fichiers dans le répertoire <code>/etc/postfix/ssl</code>: | |||
<pre> | |||
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 | |||
</pre> | |||
Il faut encore modifier <code>/etc/postfix/main.cf</code> : | |||
<pre> | |||
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 | |||
</pre> | |||
=Protéger votre proxmox= | |||
==sshguard== | |||
http://wiki.csnu.org/index.php?title=Prot%C3%A9ger_SSH_avec_sshguard | |||
==iptables== | |||
=Télécharger vos images= | |||
Téléchargez les iso des OS que vous souhaitez utiliser dans <code>/var/lib/vz/template/iso</code> | |||
=Créer votre première VM= | |||
Utilisez votre navigateur web pour accéder à https://ip_de_votre_serveur. C'est l'interface web de proxmox. | |||
Cliquez sur <code>Storage</code> puis ajoutez un storage de type "lvm group" | |||
Sur la page d'ajout, sélectionnez le groupe lvm que vous avez créé durant l'installation (ici, je l'avais appelé "main") puis sauvegardez. | |||
Cliquez sur <code>Virtual Machines</code> puis sur <code>create</code> | |||
Dans <code>Installation Media:</code> sélectionnez l'iso que vous avez téléchargé au préalable. | |||
Dans <code>Disk Storage:</code> selectionnez votre LVM. | |||
Configurez l'espace disque et la ram, et nommez votre VM. | |||
Dans la partie <code>Network</code> selectionnez <code>vmbr0</code> comme bridge et précisez l'adresse mac fournie par votre prestataire de service | |||
Cliquez sur <code>create</code> pour créer votre VM | |||
Sélectionnez ensuite votre VM et cliquez sur le bouton <code>Start</code> | |||
=Accéder a une VM avec un client vnc= | |||
Lorsque la VM est lancée, loguez vous en ssh sur votre proxmox et tapez : | |||
<pre>nc -l -p 5900 -c "qm vncproxy VMID PASSWORD"</pre> | |||
VMID étant le numéro de la VM, et password le mot-de-passe pour accéder au vnc. | |||
Il ne vous reste plus qu'à lancer votre client vnc préféré. | |||
Souvenez vous que dans le cas présent, la connexion vnc n'est pas chiffrée ! Il serait bon d'envisager de se connecter au travers d'un tunnel ssh. | |||
=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]] | |||
=Annexes= | |||
==Erreurs du type <code>IPv6 addrconf: prefix with wrong length 56</code> == | |||
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 <code>/etc/sysctl.conf</code> : | |||
<pre> | |||
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 | |||
</pre> |
Dernière version du 16 mai 2015 à 11:50
- Cette page n'est plus maintenue, les informations contenues ici sont potentiellement obsolètes
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
Commencer par partitionner ainsi vos deux disques (avec fdisk ou cfdisk) :
- /dev/sd*1 200 Mo (/boot) (type de partition : FD)
- /dev/sd*2 15 Go (/) (type de partition : FD)
- /dev/sd*3 4096 Go (swap) (type de partition : 82)
- /dev/sd*4 partition étendue (invisible sous cfdisk)
- /dev/sd*5 20 Go (/var) (type de partition : FD)
- /dev/sd*6 reste de l'espace disque (lvm) (type de partition : FD)
Nous allons créer le RAID software (raid 1) :
- /dev/md0 regroupant /dev/sda1 et /dev/sdb1 (/boot)
- /dev/md1 regroupant /dev/sda2 et /dev/sdb2 (/)
- /dev/md2 regroupant /dev/sda5 et /dev/sdb5 (/var)
- /dev/md3 regroupant /dev/sda6 et /dev/sdb6 (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/sda2 /dev/sdb2 #sd*4 est la partition étendue mdadm --create /dev/md2 --level=1 --assume-clean --raid-devices=2 /dev/sda5 /dev/sdb5 mdadm --create /dev/md3 --level=1 --assume-clean --raid-devices=2 /dev/sda6 /dev/sdb6
Création des systèmes de fichiers
mkfs.ext3 /dev/md0 mkfs.ext3 /dev/md1 mkfs.ext3 /dev/md2 mkswap /dev/sda3 mkswap /dev/sdb3
Création du LVM
pvcreate /dev/md3 vgcreate main /dev/md3
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/md1 /mnt mkdir /mnt/boot mkdir /mnt/var mount /dev/md0 /mnt/boot mount /dev/md2 /mnt/var
debootstrap --arch=amd64 lenny /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 lenny main contrib non-free deb-src http://ftp.fr.debian.org/debian lenny main contrib non-free #Sec deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://volatile.debian.org/debian-volatile lenny/volatile 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 mdadm
Configurez votre /etc/fstab :
# /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/md1 / ext3 defaults,errors=remount-ro 0 1 /dev/md0 /boot ext3 defaults 0 2 /dev/sda3 none swap sw 0 0 /dev/sdb3 none swap sw 0 0 /dev/md2 /var ext3 defaults 0 2
/etc/network/interfaces :
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto vmbr0 iface vmbr0 inet static address <IP> netmask 255.255.255.0 gateway <GW> bridge_ports eth0 bridge_stp off bridge_fd 0
/etc/hosts :
127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters <IP> <hostname>
echo votrehostname > /etc/hostname echo votrehostname > /etc/mailname
N'oubliez pas de configurer les dns (ceux de votre hébergeur dédié) :
nameserver XX.XX.XX.XX
Installation de proxmox
Ajoutez le dépot proxmox dans le fichier /etc/apt/source.list :
# PVE packages provided by proxmox.com deb ftp://download.proxmox.com/debian lenny pve
Ajoutez la clé du dépôt proxmox :
wget -O- "http://download.proxmox.com/debian/key.asc" | apt-key add - aptitude update
aptitude install grub-pc grub-install /dev/sda grub-install /dev/sdb
http://pve.proxmox.com/wiki/Proxmox_VE_Kernel
Pour profiter d'openVZ, installez le kernel 2.6.32* :
aptitude install pve-kernel-2.6.32-4-pve update-grub
Sinon, installez le kernel pve-kernel-2.6.35-1-pve qui permet de profiter de KSM :
aptitude install pve-kernel-2.6.35-1-pve update-grub
Attention ! Vérifiez votre fichier /boot/grub/grub.cfg ! En particulier les directives menuentry update-grub avait configuré la ligne de boot suivante sur mon installation :
linux /vmlinuz-2.6.35-1-pve root=/dev/md/1 ro
a corriger en
linux /vmlinuz-2.6.35-1-pve root=/dev/md1 ro
Accesoirement installez les headers
aptitude install pve-headers-2.6.35-1-pve
aptitude install openssh-server passwd
Si vous avez installé le kernel pve-kernel-2.6.35-1-pve installez proxmox-ve-2.6.35. Sinon, adaptez en fonction de votre kernel.
aptitude install proxmox-ve-2.6.35 ntp lvm2
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)
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
reboot et postinstallation
exit umount /mnt/boot umount /mnt/var umount /mnt/proc umount /mnt/sys umount /mnt/dev umount /mnt
Rebootez votre serveur en mode normal :
reboot
Créez votre utilisateur :
adduser pfoo
Je vous conseil de commencer à sécuriser votre ssh :
- désactivez le login root (directive PermitRootLogin no dans
/etc/ssh/sshd_config
) - ajoutez la directive allowusers pfoo dans
/etc/ssh/sshd_config
Utiliser son propre certificat ssl pour l'interface web
Je vous renvoi sur http://wiki.csnu.org/index.php?title=Installation_et_configuration_de_OpenSSL pour la mise en place d'une autorité de certification. Dans l'exemple suivant, je créé un certificat proxmox et le signe avec l'autorité onyx_ca :
openssl req -newkey rsa:2048 -keyout proxmox.key -out proxmox.req openssl ca -name onyx_ca -extensions PROXMOX -in proxmox.req -out proxmox.pem
mkdir /etc/apache2/ssl/ mv proxmox.* /etc/apache2/ssl/ cat /etc/ssl/root_ca/root_ca.pem /etc/ssl/onyx_ca/onyx_ca.pem > /etc/apache2/ssl/cachain.pem
Modifiez le fichier /etc/apache2/sites-enabled/pve.conf
comme suit :
<VirtualHost *:443> SSLEngine on SSLProtocol all -SSLv2 #SSLCertificateFile /etc/pve/pve-ssl.pem #SSLCertificateKeyFile /etc/pve/pve-ssl.key SSLCertificateFile /etc/apache2/ssl/proxmox.pem SSLCertificateKeyFile /etc/apache2/ssl/proxmox.key SSLCertificateChainFile /etc/apache2/ssl/cachain.pem RewriteEngine on RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) RewriteRule .* - [F] </VirtualHost>
Installer un serveur dns pour ses VEs
Commencez par installer le serveur bind9 :
aptitude install bind9 bind9-host dnsutils
Éditez le fichier /etc/bind/named.conf.options
et ajoutez y les lignes suivantes :
allow-query { 127.0.0.1; 91.121.141.220; ::1; 2001:41d0:1:bcdc::220; 192.168.0.0/24; }; allow-recursion { 127.0.0.1; 91.121.141.220; ::1; 2001:41d0:1:bcdc::220; 192.168.0.0/24; }; allow-query-cache { 127.0.0.1; 91.121.141.220; ::1; 2001:41d0:1:bcdc::220; 192.168.0.0/24; }; version "[SECURED]"; allow-notify { 127.0.0.1; 91.121.141.220; ::1; 2001:41d0:1:bcdc::220; 192.168.0.0/24; }; //interdiction du transfère complet de zones allow-transfer {"none";}; listen-on { 127.0.0.1; 192.168.0.0/24; 91.121.141.220; }; listen-on-v6 { ::1; 2001:41d0:1:bcdc::220; }; transfer-source 91.121.141.220; transfer-source-v6 2001:41d0:1:bcdc::220; notify-source 91.121.141.220; notify-source-v6 2001:41d0:1:bcdc::220;
Vous pouvez noter que j'ai autorité toutes les IPs 192.168.0.0 à interroger le serveur dns étant donné que je me servirais de cette classe pour créer un réseau interne pour mes VEs.
Ajoutez les lignes suivantes dans /etc/resolv.conf
:
nameserver ::1 nameserver 127.0.0.1 nameserver 192.168.0.1 nameserver 2001:41d0:1:bcdc::220 nameserver 91.121.141.220
Sécuriser et configurer le serveur mail de son host
Lors de l'installation de l'interface proxmox, postfix
a été automatiquement installé.
Modifiez la configuration de postfix dans /etc/postfix/main.cf
comme suit :
# See /usr/share/postfix/main.cf.dist for a commented, more complete version smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no # appending .domain is the MUA's job. append_dot_mydomain = no # Uncomment the next line to generate "delayed mail" warnings #delay_warning_time = 4h readme_directory = no # TLS parameters 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 # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for # information on enabling SSL in the smtp client. myhostname = onyx.csnu.org mydomain = onyx.csnu.org alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = onyx.csnu.org, localhost relayhost = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24 mailbox_size_limit = 0 recipient_delimiter = + inet_protocols = all inet_interfaces = 127.0.0.1, [::1], 192.168.0.1, 91.121.141.220, [2001:41d0:1:bcdc::220] smtpd_sender_restrictions = reject_unknown_sender_domain, reject_non_fqdn_sender smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname
SSL
Si vous avez votre propre autorité ssl, vous pouvez générer votre propre certificat.
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
Protéger votre proxmox
sshguard
http://wiki.csnu.org/index.php?title=Prot%C3%A9ger_SSH_avec_sshguard
iptables
Télécharger vos images
Téléchargez les iso des OS que vous souhaitez utiliser dans /var/lib/vz/template/iso
Créer votre première VM
Utilisez votre navigateur web pour accéder à https://ip_de_votre_serveur. C'est l'interface web de proxmox.
Cliquez sur Storage
puis ajoutez un storage de type "lvm group"
Sur la page d'ajout, sélectionnez le groupe lvm que vous avez créé durant l'installation (ici, je l'avais appelé "main") puis sauvegardez.
Cliquez sur Virtual Machines
puis sur create
Dans Installation Media:
sélectionnez l'iso que vous avez téléchargé au préalable.
Dans Disk Storage:
selectionnez votre LVM.
Configurez l'espace disque et la ram, et nommez votre VM.
Dans la partie Network
selectionnez vmbr0
comme bridge et précisez l'adresse mac fournie par votre prestataire de service
Cliquez sur create
pour créer votre VM
Sélectionnez ensuite votre VM et cliquez sur le bouton Start
Accéder a une VM avec un client vnc
Lorsque la VM est lancée, loguez vous en ssh sur votre proxmox et tapez :
nc -l -p 5900 -c "qm vncproxy VMID PASSWORD"
VMID étant le numéro de la VM, et password le mot-de-passe pour accéder au vnc. Il ne vous reste plus qu'à lancer votre client vnc préféré.
Souvenez vous que dans le cas présent, la connexion vnc n'est pas chiffrée ! Il serait bon d'envisager de se connecter au travers d'un tunnel ssh.
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
Annexes
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