« Proxmox et OpenVZ » : différence entre les versions
Ligne 324 : | Ligne 324 : | ||
Lors de l'installation de l'interface proxmox, <code>postfix</code> a été automatiquement installé. | 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 : | |||
<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> | |||
<pre> | |||
mkdir /etc/postfix/ssl | |||
mv smtpd.key /etc/postfix/ssl/ | |||
mv smtpd.pem /etc/postfix/ssl/ | |||
chmod 600 /etc/postfix/ssl/* | |||
cat /etc/ssl/root_ca/root_ca.pem /etc/ssl/core_ca/core_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/smtpd.pem | |||
smtpd_tls_key_file=/etc/postfix/ssl/smtpd.key | |||
smtpd_tls_CAfile=/etc/ssl/csnu.org/ca.pem | |||
smtp_tls_cert_file=/etc/postfix/ssl/smtpd.pem | |||
smtp_tls_key_file=/etc/postfix/ssl/smtpd.key | |||
smtp_tls_CAfile=/etc/postfix/ssl/ca_chain.pem | |||
</pre> | |||
=Créer et configurer un VE Debian 6.0= | =Créer et configurer un VE Debian 6.0= |
Version du 8 juin 2011 à 16:27
Partitionnement du disque dur
Pour commencer, partitionnez votre disque. Faites une partition / de 15Go, un swap, et enfin, une partition LVM2 avec l'espace restant.
Créez les systèmes de fichiers pour les partitions / et swap :
mkswap /dev/sda2 mkfs.ext3 /dev/sda1
Nous allons maintenant créer notre architecture LVM puis le système de fichier de la dernière partition.
Pour commencer, créez le volume physique :
$ pvcreate /dev/sda3 Physical volume "/dev/sda3" successfully created
Créez ensuite le groupe pve
:
$ vgcreate pve /dev/sda3 Volume group "pve" successfully created
Vous pouvez vérifier les informations du groupe avec la commande vgdisplay
:
$ vgdisplay -v pve Using volume group(s) on command line Finding volume group "pve" --- Volume group --- VG Name pve System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 215.09 GB PE Size 4.00 MB Total PE 55064 Alloc PE / Size 0 / 0 Free PE / Size 55064 / 215.09 GB VG UUID AenAEU-jdG2-RUh1-4khe-R990-MInR-cdRIe0 --- Physical volumes --- PV Name /dev/sda3 PV UUID CsIxAk-xa18-1W2q-jm1Y-fVqg-VSnW-KMaXvx PV Status allocatable Total PE / Free PE 55064 / 55064
Nous pouvons maintenant créer le volume logique data
dans le groupe pve
.
Notez que la commande vgdisplay nous a permit d'identifier la dimension du volume (Total PE
) que nous préciseront via l'argument -l
:
$ lvcreate -l55064 -n data pve Logical volume "data" created
Vous pouvez vérifier les informations du volume avec la commande lvdisplay
:
$ lvdisplay -v /dev/pve/data Using logical volume(s) on command line --- Logical volume --- LV Name /dev/pve/data VG Name pve LV UUID KlFCb8-yE7K-NYCN-RNnN-LEV3-maIw-mDtZZq LV Write Access read/write LV Status available # open 0 LV Size 215.09 GB Current LE 55064 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0
Enfin, créez le système de fichier dans votre volume logique :
mkfs.ext3 /dev/pve/data
Installation du système de base
$ mount /dev/sda1 /mnt $ debootstrap --arch=amd64 lenny /mnt ... I: Base system installed successfully.
Configuration de debian et installation de proxmox
Afin d'avoir accès au réseau et au matériel, montez /proc, /dev et /sys dans votre nouveau système puis chrootez y:
mount -o bind /proc /mnt/proc mount -o bind /dev /mnt/dev mount -o bind /sys /mnt/sys mount /dev/pve/data /mnt/var/lib/vz chroot /mnt
Modifiez le fichier sysctl.conf
afin de permettre le forwarding ipv4 :
net.ipv4.ip_forward=1
Mettez les paquets à jour, puis installez les locales :
aptitude update aptitude safe-upgrade aptitude install locales dpkg-reconfigure locales aptitude install console-data dpkg-reconfigure console-data # from arch > french > latin9)
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
Pour profiter d'openVZ
, installez le kernel 2.6.32* :
aptitude install pve-kernel-2.6.32-4-pve
Si vous n'aviez pas grub d'installé :
mkdir /boot/grub grub-install /dev/sda
Créez et configurez le fichier /boot/grub/menu.lst
. Il devrait ressembler à ceci :
timeout 10 default 0 title proxmox root (hd0,0) kernel /boot/vmlinuz-2.6.32-4-pve root=/dev/sda1 read-only initrd /boot/initrd.img-2.6.32-4-pve
Installez les headers du kernel (optionnel) :
aptitude install pve-headers-2.6.32-4-pve
Mettez votre serveur sur la bonne timezone :
tzselect dpkg-reconfigure tzdata
Pensez à installer openssh puis à modifier le password root
aptitude install openssh-server passwd
Editez le fichier /etc/fstab
:
/dev/sda1 / ext3 errors=remount-ro 0 1 /dev/sda2 swap swap defaults 0 0 /dev/pve/data /var/lib/vz ext3 defaults 1 2 proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0
echo onyx.csnu.org > /etc/hostname echo onyx.csnu.org > /etc/mailname
Enfin, installez ntp, lvm2 ainsi que l'interface de proxmox :
aptitude install proxmox-ve-2.6.32 ntp lvm2
Pour simplifier l'administration, créez un lien virtuel de /vz vers /var/lib/vz :
ln -s /var/lib/vz /vz
Configuration réseau de proxmox
Ajoutez les lignes suivantes dans le fichier /etc/network/interfaces
:
# network interface settings auto lo iface lo inet loopback iface eth0 inet manual auto vmbr0 iface vmbr0 inet static address 91.121.141.220 netmask 255.255.255.0 gateway 91.121.141.254 broadcast 91.121.141.255 bridge_ports eth0 bridge_stp off bridge_fd 0 network 91.121.141.0 post-up ifconfig vmbr0 inet6 add 2001:41d0:1:bcdc::220/64 pre-down ifconfig vmbr0 inet6 del 2001:41d0:1:bcdc::220/64 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
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 VMs
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;
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
Ajouter des templates manuellement
Il suffit de télécharger directement les archives dans /var/lib/vz/template/cache/
.
Vous pouvez trouver des templates sur http://download.proxmox.com/appliances/ et http://wiki.openvz.org/Download/template/precreated
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</code/ 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 :
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
mkdir /etc/postfix/ssl
mv smtpd.key /etc/postfix/ssl/
mv smtpd.pem /etc/postfix/ssl/
chmod 600 /etc/postfix/ssl/*
cat /etc/ssl/root_ca/root_ca.pem /etc/ssl/core_ca/core_ca.pem > /etc/postfix/ssl/ca_chain.pem
Il faut encore modifier /etc/postfix/main.cf
:
smtpd_tls_cert_file=/etc/postfix/ssl/smtpd.pem
smtpd_tls_key_file=/etc/postfix/ssl/smtpd.key
smtpd_tls_CAfile=/etc/ssl/csnu.org/ca.pem
smtp_tls_cert_file=/etc/postfix/ssl/smtpd.pem
smtp_tls_key_file=/etc/postfix/ssl/smtpd.key
smtp_tls_CAfile=/etc/postfix/ssl/ca_chain.pem
Créer et configurer un VE Debian 6.0
Connectez vous à votre interface proxmox. Cliquez sur Virtual Machines
puis sur Create
.
Sélectionnez le type de VE à créer (OpenVZ dans mon cas étant donné que mon CPU ne supporte pas la technologie intel VT).
Dans Templates, selectionnez la version voulue de debian.
Remplissez le champ hostname, ainsi que password (ce sera le mot-de-passe root par défaut).
Pour la configuration réseau, deux choix s'offrent à vous :
- venet : il s'agit de créer un réseau virtuel, donc avec des adresses virtuelles que vous devrez ensuite natter ou router au niveau de l'host. Cette technologie est basée sur la couche 3 du model OSI. Le principal intérêt de venet est qu'il suffit de sécuriser (firewall, ...) l'host et non pas chaque VE.
- veth : il s'agit de créer une interface réseau virtuelle à laquelle il faudra attribuer une adresse MAC virtuelle et une adresse IP générée dans la console de gestion de votre provider dédié. Dans ce cas, il faudra faire attention à sécuriser (firewall, ...) chaque VE.
Si vous choisissez veth, veillez à bien entrer l'adresse MAC virtuelle fournit par la console de votre provider.
De plus, si vous avez suivi ce wiki, selectionnez vmbr0
à la ligne brdige
.
Cliquez enfin sur create
afin de lancer la génération du VE. Attendez quelques dizaines de secondes puis retournez à la liste des VMs.
Cliquez sur la VM fraîchement créée, localisez le bouton Start
et cliquez dessus. Votre VM démarre, reste à la configurer.
Configuration réseau en veth
Connectez vous en ssh sur l'host en utilisateur root puis entrez :
vzctl enter 101
101
est le numéro de votre VM (VMID) disponible dans le status de la VM sur l'interface web de proxmox.
Éditez le fichier /etc/network/interfaces
comme suit :
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address <ip-fail-over>
netmask 255.255.255.255
up route add -host <gateway> dev eth0
up route add default gw <gateway>
La gateway est la même que celle que vous avez indiqué lors de la configuration du fichier interfaces
de l'host.
Relancez votre réseau :
/etc/init.d/networking restart
Attention, si vous n'avez pas de serveur dns installé, vous ne pourrez pas résoudre les dns et il vous faudra essayer de pinger internet directement via l'ip !
Pour resortir de votre VM, tapez
exit
Ajouter une interface réseau virtuelle locale
Comme vous avez pu le voir, j'ai créé sur l'host une interface vmbr1
bridgé sur dummy0. Ceci est parfait pour créer un réseau interne pour ses VMs. Il ne reste plus qu'à ajouter une interface réseau virtuelle sur chaque VM.
L'intérêt principal d'un réseau interne pour vos VMs est d'offrir un débit bien supérieur à celui du bridge sur l'interface principale.
Sur l'host, utilisez vzctl
pour créer une nouvelle interface réseau virtuelle :
vzctl set <VMID> --netif_add eth<N>,,,,vmbr<M> --save
Par exemple, pour ajouter une interface virtuelle eth1 bridgé sur vmbr1 :
vzctl set 101 --netif_add eth1,,,,vmbr1 --save
Vous pouvez supprimer cette interface avec :
vzctl set <VMID> --netif_del eth<N> --save
Ensuite, il ne vous reste plus qu'à configurer l'interface sur votre VM. Editez le fichier /etc/network/interfaces
et ajoutez y :
auto eth1
iface eth1 inet static
address 192.168.0.2
netmask 255.255.255.0
Redémarrez votre VM. Vous pouvez désormais pinguer 192.168.0.1, qui est l'adresse ip locale de votre host.
Vous pouvez utiliser iperf
pour tester le débit entre deux VMs.
Sur une VM lancez iperf en mode serveur :
iperf -s
Sur l'autre, lancez iperf en mode client :
iperf -c 192.168.0.3
Configuration réseau en venet
Nous allons supposer que vous avez défini l'adresse IP 192.168.0.1 à votre VM lors de sa création.
Sur l'host, tapez simplement :
iptables -t nat -A POSTROUTING -s 192.168.0.1 -o vmbr0 -j SNAT --to 91.121.141.220
Régénérer les clés ssh
rm -f /etc/ssh/ssh_host_*
ssh-keygen -f /etc/ssh/ssh_host_rsa_key -t rsa -N ''
ssh-keygen -f /etc/ssh/ssh_host_dsa_key -t dsa -N ''
Partager des fichiers d'un VE à un autre VE
OpenVZ, de part son architecture, permet de partager des fichiers d'un VE à un autre très facilement. Pour cela, connectez vous en ssh à votre host et utilisez la commande mount
:
mount --bind /vz/private/102/directory /vz/root/101/directory
Pour que ce partage reste actif même en cas de reboot créez le fichier /etc/vz/conf/101.mount
:
#!/bin/bash
source /etc/vz/vz.conf
source ${VE_CONFFILE}
mount -n --bind /vz/private/102/directory /vz/root/101/directory
N'oubliez pas de rendre ce fichier executable :
chmod +x /etc/vz/conf/101.mount
Installer une interface graphique avec NX server sur une VM OpenVZ
aptitude install xorg xdm
aptitude install xfce4
Téléchargez NX Free Edition client, node et server sur http://www.nomachine.com/select-package.php?os=linux&id=1
aptitude install libaudiofile0
dpkg -i nxclient_3.5.0-6_amd64.deb
dpkg -i nxnode_3.5.0-3_amd64.deb
dpkg -i nxserver_3.5.0-4_amd64.deb
Configuration de X
Dans /etc/X11/xdm/xdm-config
, commentez la ligne DisplayManager.requestPort: 0
Dans /etc/X11/xdm/Xservers
, commentez la ligne :0 local /usr/bin/X :0 vt7
Dans /etc/X11/xdm/Xaccess
, décommentez la ligne * #any host can get a login window
(Please keep in mind the security implications by the above line. Read the comments found in the file and set it appropriately)
Configuration de NX Server
Éditez /etc/X11/xorg.conf
:
Section "Files"
# path to defoma fonts
FontPath "/usr/share/fonts/X11/misc"
FontPath "/usr/share/fonts/X11/100dpi/:unscaled"
FontPath "/usr/share/fonts/X11/75dpi/:unscaled"
FontPath "/usr/share/fonts/X11/Type1"
FontPath "/usr/share/fonts/X11/100dpi"
FontPath "/usr/share/fonts/X11/75dpi"
EndSection
Enfin, créez un utilisateur afin de ne pas avoir à vous connecter en root.
Configuration de NX Client
A faire sur votre machine.
Téléchargez et installez http://www.nomachine.com/download-client-linux.php
Configurez l'hostname et le ort.
Dans la section Desktop
, selectionnez Unix and custom
. Cliquez sur Settings
et selectionnez Run the default X client script on server
ainsi que New virtual Desktop
S'il vous manque des icones après vous être logué, essayez d'installer le paquet gnome-icon-theme
sur le serveur.