« Proxmox3 » : différence entre les versions

De Linux Server Wiki
Aller à la navigation Aller à la recherche
Ligne 488 : Ligne 488 :


==firewall iptables==
==firewall iptables==
Voici un petit script
<pre>
#! /bin/bash
trusted_ipv6="votreipv6"
db=fr.zone
wget http://www.ipdeny.com/ipblocks/data/countries/fr.zone
trusted=$(egrep -v "^#|^$" $db)
rm $db
echo "clearing iptables"
/sbin/iptables -t filter -D INPUT -p tcp -i vmbr0 -m multiport --dports 21,22,8006 -j firewall
/sbin/iptables -F firewall
/sbin/iptables -X firewall
echo "adding rules to iptables"
/sbin/iptables -t filter -N firewall
/sbin/iptables -t filter -A INPUT -p tcp -i vmbr0 -m multiport --dports 21,22,8006 -j firewall
for ipblock in $trusted; do
        /sbin/iptables -t filter -A firewall -s $ipblock -j ACCEPT
done
/sbin/iptables -t filter -A firewall -j DROP
echo "clearing ip6tables"
/sbin/ip6tables -t filter -D INPUT -p tcp -i vmbr0 -m multiport --dports 21,22,8006 -j firewall
/sbin/ip6tables -F firewall
/sbin/ip6tables -X firewall
echo "adding rules to ip6tables"
/sbin/ip6tables -t filter -N firewall
/sbin/ip6tables -t filter -A INPUT -p tcp -i vmbr0 -m multiport --dports 21,22,8006 -j firewall
/sbin/ip6tables -t filter -A firewall -s $trusted_ipv6 -j ACCEPT
/sbin/ip6tables -t filter -A firewall -j DROP
</pre>


=VMs=
=VMs=

Version du 3 février 2012 à 17:08


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 :

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, [::1], ipv4_de_votre_serveur, [ipv6_de_votre_serveur]

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.

Protéger votre proxmox

sshguard

http://wiki.csnu.org/index.php?title=Prot%C3%A9ger_SSH_avec_sshguard

firewall iptables

Voici un petit script

#! /bin/bash

trusted_ipv6="votreipv6"
db=fr.zone
wget http://www.ipdeny.com/ipblocks/data/countries/fr.zone
trusted=$(egrep -v "^#|^$" $db)
rm $db

echo "clearing iptables"
/sbin/iptables -t filter -D INPUT -p tcp -i vmbr0 -m multiport --dports 21,22,8006 -j firewall
/sbin/iptables -F firewall
/sbin/iptables -X firewall

echo "adding rules to iptables"
/sbin/iptables -t filter -N firewall
/sbin/iptables -t filter -A INPUT -p tcp -i vmbr0 -m multiport --dports 21,22,8006 -j firewall

for ipblock in $trusted; do
        /sbin/iptables -t filter -A firewall -s $ipblock -j ACCEPT
done
/sbin/iptables -t filter -A firewall -j DROP

echo "clearing ip6tables"
/sbin/ip6tables -t filter -D INPUT -p tcp -i vmbr0 -m multiport --dports 21,22,8006 -j firewall
/sbin/ip6tables -F firewall
/sbin/ip6tables -X firewall

echo "adding rules to ip6tables"
/sbin/ip6tables -t filter -N firewall
/sbin/ip6tables -t filter -A INPUT -p tcp -i vmbr0 -m multiport --dports 21,22,8006 -j firewall

/sbin/ip6tables -t filter -A firewall -s $trusted_ipv6 -j ACCEPT
/sbin/ip6tables -t filter -A firewall -j DROP

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