Ayant actuellement besoin d’utiliser Ubuntu, je rencontre un « pti » problème:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "fr_FR.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

Ce message apparaît entre autre quand je veux faire des mises à jours ou quand un de mes programmes a besoin de perl.
Après avoir un peu fouillé, j’ai remarqué qu’il manquait quelques trucs « basiques » sous ubuntu par défaut:
root@mysrv ~# locale -a
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
C
POSIX

Oui … « fr_FR.utf8″ n’est pas dans les locales disponibles par défaut.
Bon, j’ai encore un peu cherché et j’ai trouvé qu’il fallait simplement installer le paquet: language-pack-fr-base. Une fois cela fait, le résultat est un peu mieux quand même:
root@mysrv ~# aptitude install language-pack-fr-base
root@mysrv ~# locale -a
C
fr_BE.utf8
fr_CA.utf8
fr_CH.utf8
fr_FR.utf8
fr_LU.utf8
POSIX

Fail2Ban est un petit logiciel écrit en Python qui fait un travail exemplaire : bannir des ip qui tentent de se connecter à une machine. Avec quelques filtres et règles iptables fournit, il arrive à faire un très bon travail et à prévenir de ce qui a été fait.

On peut en fait créer des jails (prisons) par services (ssh, http, …), on renseigne quelques informations (fichier de log, filtre à appliquer, …) et lorsque le filtre trouve une concordance, une action est réalisée (bannissement, mail, whois, …).

Le logiciel est présent sur une grosse partie des distributions, donc un simple:
aptitude install fail2ban
ou:
yum install fail2ban

Devrait suffire =)

1] Surveillance des connections ssh:

A) Mise en place:

Dupliquer le fichier, puis modifier :
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vi /etc/fail2ban/jail.local
[ssh]
enabled = true
port = ssh,sftp
filter = sshd
banaction = iptables-multiport[name=SSH,port=22,protocol=tcp]
mail[dest="your@mail.com",name="ssh",sender="fail2ban@mail.com"]
# Analyse les 600 dernières secondes (10minutes)
findtime = 600
# bantime de 25h
bantime = 90000
# Fichier de log analysé:
logpath = /var/log/auth.log
# Maximum d'essais ratés: 3
maxretry = 3

Appliquer les modification :
fail2ban-client reload

Avec cette configuration, un mail d’avertissement sera envoyé pour dire qu’une ip a été bloquée pour 25h suite à 3 essais ratés dans les 10 dernières minutes. Un mail sera également envoyé à chaque arrêt/démarrage de la prison ssh.

Le mail reçu contiendra seulement l’information que telle adresse ip a été bannie. Il est possible d’avoir un « whois » en plus.

Pour cela, il suffit de remplacer la ligne :
mail[dest="your@mail.com",name="ssh",sender="fail2ban@mail.com"]
Par :
sendmail-whois[dest="your@mail.com",name="ssh",sender="fail2ban@mail.com"]

Pour voir toutes les autres actions possibles il suffit de regarder les fichiers présents dans le dossier /etc/fail2ban/action.d/.

Et pour avoir des informations sur l’état de la prison ssh :
fail2ban-client status ssh

B) Commandes utiles pour la surveillance de ssh :

  • Lister tous les accès ssh ratés :
    grep 'Failed' /var/log/auth.log|sort |uniq -c
  • Nombre de connections ssh ratées :
    grep 'Failed' /var/log/auth.log|sort |wc -l

2] Surveillance des logs de Fail2ban :

Il est possible qu’une adresse ip tente a plusieurs reprises de se connecter à un service et se fait bannir (par exemple 5 bannissements avec ssh). Ça fait que l’on reçoit 5 mails et qu’il est possible que l’ip continue ses tentatives. Et ça peut également être sur d’autres services.
Plutôt que de subir ces nombreuses tentatives, il est possible de mettre en place un filtre qui analyse le fichier de log de Fail2Ban, pour bannir sur une plus longue durée une adresse IP qui apparaîtrait trop de fois.

A) Création du filtre :

Créer un nouveau fichier : /etc/fail2ban/filter.d/fail2ban.conf :
# Fail2Ban: fichier de configuration
#
# Author: Tom Hendrikx
# Traduction: Gardouille
#
# Version: 1.0
#
[Definition]
# Option: failregex
# Notes.: regex qui correspond aux messages d'erreur relatifs
# à un mauvais mot de passe dans le fichier de log.
# L'hote doit correspondre à un groupe nommé "host".
# Le tag "<HOST>" peut être utilisé pour faire correspondre
# les IP/hostname et c'est seulement un alias pour
# (?:::f{4,6}:)?(?P<host>\S+)
# Valeur: Texte
#
# Compter toutes les ip bannies dans le fichier de log
failregex = fail2ban.actions: WARNING \[(.*)\] Ban
# Option: ignoreregex
# Notes.: regex à ignorer. Si cette regex correspond, la ligne est ignorée.
# Valeur: Texte
#
# Ignorer nos propres bannissements, pour garder nos comptes exacts.
# Dans le fichier de config, nommer la prison 'fail2ban', ou alors changer cette ligne!
ignoreregex = fail2ban.actions: WARNING \[fail2ban\] Ban

B) Définition de la prison (jail) :

Si ce n’est pas déjà fait, créer une copie du fichier de configuration :
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Créer ensuite une nouvelle prison dans ce dernier fichier :
[fail2ban]
enabled = true
filter = fail2ban
action = iptables-allports[name=fail2ban]
sendmail-whois[dest="votre@mail.com",name="fail2ban",sender="fail2ban"]
# Fichier de log analysé :
logpath = /var/log/fail2ban.log
# Analyse les logs sur 1 semaine
findtime = 604800
# bantime: 1 semaine
bantime = 604800

Note : « sendmail-whois » permet d’avoir un « whois » sur l’adresse IP qui a fait de nombreuses tentatives. Ça me paraît intéressant vu que l’adresse IP a vraisemblablement beaucoup insisté.

3] Divers:

A) Débannir une adresse IP:

Pour connaître la liste des adresses ip bannies :
iptables -LChain fail2ban-ssh (1 reference)
target prot opt source destination
DROP all -- XX.YY.WWW.ZZZ anywhere
RETURN all -- anywhere anywhere

Il y a trois méthodes pour débloquer une adresse ip :
iptables -D nom_de_la_chaine numéro_de_la_ligne
iptables -D fail2ban-ssh 1
iptables -D INPUT -s XX.YY.WWW.ZZZ -j DROP

Avec cette méthode, l’adresse ip ne sera pas rebannie si elle se trompe 3 fois de mot de passe. Pour réactiver ce bannissement automatique, il faut stopper et relancer fail2ban :
fail2ban-client stop
fail2ban-client start

B) Changer la langue des mails reçus :

Par défaut, les fichiers de configuration de Fail2Ban sont en anglais, par conséquent, les mails envoyés seront également en anglais. Cependant on va vu ci-dessus qu’il était possible de un double des fichiers de configuration (*.local). Il suffit de faire pareil pour les fichiers qui définisse les actions puis de traduire le texte que l’on veut dans chaque fichier.

Pour commencer, il faut déterminer quelle action est utilisée pour envoyer un mail, pour savoir quel fichier dupliquer. Cela dépend des prisons définies. Il faut donc aller regarder dans le fichier : /etc/fail2ban/jail.local (ou si il n’existe pas encore : /etc/fail2ban/jail.conf).
Par exemple pour la prison « ssh », on a :
mail[dest="your@mail.com",name="ssh",sender="fail2ban@mail.com"]
Il faudra donc dupliquer le fichier : /etc/fail2ban/action.d/mail.conf.
Pour « fail2ban », on a :
sendmail-whois[dest="votre@mail.com",name="fail2ban",sender="fail2ban"]
Il faudra donc dupliquer le fichier : /etc/fail2ban/action.d/sendmail-whois.conf.

« Dupliquer » un fichier signifie de simplement en faire une copie avec l’extension « .local » à la place de « .conf ». Ainsi Fail2Ban commencera par regarder si il existe un fichier « .local » avec les informations qu’il veut et ensuite, il regardera le fichier « .conf ».
Donc une fois le fichier « mail.local » ou « sendmail-whois.local » crée, il suffit de traduire les commentaires, le texte, … Libre à vous =).

,

Vieille version du kernel, vieille version de l’environnement virutel, …, une petite maj de Proxmox s’impose donc =)

Vous savez ce que vous faites, vous suivez un tuto, …, dans tout les cas -> SAUVEGARDER =)
Cette maj n’inclut pas le support de OpenVZ.

Ça prend plus ou moins de temps suivant la taille de votre serveur, mais ça assure un minimum de garantie en cas de mauvaises manipulations.

Préparation

Une petite vérification de l’état du système actuel:
root@mysrv ~# pveversion -v
pve-manager: 1.7-11 (pve-manager/1.7/5470)
running kernel: 2.6.32-4-pve
proxmox-ve-2.6.32: 1.7-10
pve-kernel-2.6.32-4-pve: 2.6.32-32
... ...

Vérification du /etc/apt/sources.list:
deb ftp://mirror.ovh.net/debian lenny main contrib non-free
# PVE packages provided by proxmox.com
deb ftp://download.proxmox.com/debian lenny pve
# security updates
deb http://security.debian.org/ lenny/updates main contrib

Suivi d’une mise à jour standard si elle n’a pas déjà été faite:
root@mysrv ~# aptitude update
root@mysrv ~# aptitude safe-upgrade

Mise à jour de Proxmox VE:

Le noyau actuel est donc: 2.6.32-4. La dernière version de l’environnement virtuel est: 1.8-10 (2.6.35). Un petit aperçu de la description du paquet:
root@mysrv ~# aptitude show proxmox-ve-2.6.35
Package: proxmox-ve-2.6.35
Priority: optional
Section: admin
Maintainer: Proxmox Support Team <support@proxmox.com>
Architecture: all
Version: 1.8-10
Replaces: proxmox-ve, pve-kernel, proxmox-ve-2.6.18, proxmox-ve-2.6.24,
proxmox-ve-2.6.32, proxmox-virtual-environment
Provides: proxmox-virtual-environment
Depends: libc6 (>= 2.7-18), pve-kernel-2.6.35-1-pve, pve-firmware (>= 1.0-9),
ksm-control-daemon, pve-manager, qemu-server, pve-qemu-kvm, ssh, apt, vncterm,
vzctl, vzdump, vzprocps, vzquota
Conflicts: proxmox-ve, pve-kernel, proxmox-ve-2.6.18, proxmox-ve-2.6.24,
proxmox-ve-2.6.32, proxmox-virtual-environment
Filename: dists/lenny/pve/binary-amd64/proxmox-ve-2.6.35_1.8-10_all.deb
Size: 4152
MD5sum: 5bad5d9ebeef2c8923047a62e0f6b154
SHA1: b5bc87f97584098a1b62caad8365adc59cc701d3
SHA256: e2d2d680a7d51e04400307f6ded33df566478f1137f1ee8554f1bd84d8061bc0
The Proxmox Virtual Environment is an easy to use Open Source virtualization platform for running Virtual Appliances and Virtual Machines. This is a virtual package which will install everything needed. This package also depends on the latest available proxmox kernel from the 2.6.35 series

Le nouvel environnement dépend donc du dernier noyau disponible (2.6.35), on va donc se contenter de l’installer et il se débrouillera avec ses dépendances.

root@mysrv ~# aptitude install proxmox-ve-2.6.35

On fait un petit update du grub au cas ou on ne l’aurais pas vu passer pendant l’install:
root@mysrv ~# update-grub
Updating /boot/grub/grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.35-1-pve
Found initrd image: /boot/initrd.img-2.6.35-1-pve
Found linux image: /boot/vmlinuz-2.6.32-4-pve
Found initrd image: /boot/initrd.img-2.6.32-4-pve
done

Puis on redémarre le serveur. Après quelques minutes on a de nouveau la main et on peut vérifier que l’on est bien sur le nouveau kernel:
root@mysrv ~# pveversion -v
pve-manager: 1.8-15 (pve-manager/1.8/5754)
running kernel: 2.6.35-1-pve
proxmox-ve-2.6.35: 1.8-10
pve-kernel-2.6.32-4-pve: 2.6.32-32
pve-kernel-2.6.35-1-pve: 2.6.35-10

Dans le but d’héberger prochainement un serveur mail Zimbra, j’ai opté pour un serveur dédié chez ovh (super plan mini reloaded) avec Proxmox VE en guise d’hyperviseur de vm. Je vais donc tenter de résumer chaque étape, partant de l’achat du serveur jusqu’à la création d’une vm.

1) Mise en place du serveur dédié avec Proxmox:

Après avoir commandé puis payé le serveur, il s’est écoulé a peu près 4h avant que je reçoive le mail m’indiquant que tout était en place, log, lien, toussa toussa. Pour un début, plutôt content.

Viens ensuite de la première connection au serveur. Changement de mot de passe root bien sur en premier lieu. Puis une petite installation de quelques paquets supplémentaires:
root@mysrv ~# aptitude install zsh screen axel vim-full apt-show-versions most htop

1.1 Cluster?

Dans l’optique d’une future location supplémentaire d’un autre serveur dédié, je vais faire de ce premier serveur un membre du cluster en tant que maitre.

État du cluster:
root@mysrv ~# pveca -l
Créer un nouveau cluster avec la machine locale en maitre:
root@mysrv ~# pveca -c
root@mysrv ~# pveca -l

Si j’avais voulu ajouter la machine a un cluster existant:
root@mysrv ~# pveca -a -h ADRESSE_IP_MAITRE
But du cluster? Migrer des vm locales à froid. Pour migrer les vm à chaud, il faut les stocker sur un volume distant (disque ISCSI), je ne sais pas encore si ça peut fonctionner avec un volume NFS.

1.2 Image iso:

Il va me falloir quelques images iso pour installer mes futures vm, donc je lance en vrac quelques téléchargements (debian, ubuntu, …) et là ça me plait encore un peu plus :p Entre 10000 et 11000KB/S, pas mal pas mal \o/ (pour infos … lol). Il faut stocker les images iso dans /var/lib/vz/template/iso pour qu’elles soient visibles depuis la web gui.

2) Création de machine virtuelle:

2.0 Pré-requis:

Le serveur dédié ne possède qu’une ip publique, cependant, avec OVH on a le droit à 3 IP Failover qui pourront nous servir pour accéder directement aux vms depuis l’extérieur. Commencer par aller sur le manager d’ovh: https://www.ovh.com/managerv3/.

Création d’une IP FailOver:

Sélectionner le bon serveur dédié dans le menu déroulant en haut. Puis aller sur Services > IP FailOver > Ajouter une Fail-Over. Il faudra ensuite choisir un réseau parmis ceux proposés (celui qui vous plaît ^^) puis l’ip sur ce réseau.

Attribuer l’ip FailOver à une adresse MAC virtuelle:

Aller sur Services > Mac >Virtuelle pour VPS > Attribuer une Mac Virtuelle à une adresse Ip. Choisir une adresse ip parmi les IP FailOver créées. Nommer la machine qui utilisera cette adresse Mac. Après validation, on obtient un tableau résumant les correspondances adresses MAC / adresses Ip, bien noter l’adresse mac à utiliser.

OpenVZ ou KVM?

Proxmox gère les deux, c’est toute fois mieux de savoir lequel utilisé avant la création.

D’après les quelques recherches effectuées (pas forcément fraiches), OpenVZ semble avoir de meilleures performances mais impossibilités d’exécuter autre chose que du GNU/Linux (pas forcément dérangeant). KVM a une meilleure isolation entre les VM au niveau réseau et les performances semble s’améliorer grâce au support de VIRTIO (disque et réseau). Les infos n’étant pas très fraîche, la balance a pu pencher d’un côté ou de l’autre. Je n’ai pas réussi à trouver de comparatif, donc en attendant que je fasse mon propre comparatif, je vais utiliser celui que je connais: KVM.

2.1 Création de machine virtuelle:

Il faut se rendre sur la page https://IP_SERVEUR ou https://xxxxxx.ovh.net

Options:

Si ça n’a pas déjà été fait à partir de ssh, changer le mot de passe de l’admin dans Configuration > Système > Administrateur.

Pour modifier la langue de l’interface, aller dans Configuration > Système > Options.

Création de la vm:

Aller sur Gestionnaire de VM > Machines virtuelles > Créer.

Le wiki de proxmox recommande les paramètres suivants:

Configuration:

  • Type: sélectionner « Fully virtualized (KVM) »
  • Emplacement de l’ISO: laisser « local (dir) » à moins de posséder un stockage nfs pour les images iso.
  • Média d’installation: sélectionner une image ISO téléchargée précédemment
  • Disk Storage: laisser « local (dir) » à moins de stocker les vm sur un nas ou autre
  • Espace Disque: Espace disque en GB alloué à la vm
  • Nom: donner un nom unique à la vm
  • Mémoire: spécifier la mémoire (ram) à attribuer, en MB, à la vm
  • VMID: laisser le numéro généré ou en mettre un supérieur ou égal à 10
  • Nœud du cluster: si un cluster avec plusieurs nœuds est déjà en place, sélectionner celui sur lequel sera stocké la vm.
  • Démarrer au boot: cocher pour que la vm démarre en même temps que le serveur Proxmox VE.
  • Format de l’image: raw semble avoir de meilleures performances tandis que qcow2 offre des outils intéressants (« copy on write », snapshot, …)
  • Type de disque: VIRTIO. Pour une vm windows il faudra utiliser des drivers supplémentaires lors de son installation. Sinon utiliser IDE pour window$.
  • Type d’invité (guest): type d’OS installé (windows, kernel Linux, …)
  • CPU Sockets: nombre de cpu attribué

Réseau:

  • Bridge: vmbr0
  • Carte réseau: VIRTIO (pour un système windows, il faudra utiliser ces drivers, fournis par Redhat, pour que la carte fonctionne).
  • Adresse MAC: l’adresse virtuelle créée précédemment au 2.0.

Puis cliquer sur « Create », au bout de quelques secondes, il sera indiqué « VM created ». Il suffit ensuite d’aller sur « Lister » pour obtenir l’ensemble des vm disponibles.

2.2 Lancer/configurer sa VM:

Une fois sur la liste des vm, cliquer sur la vm à lancer. On est à présent sur sa page de configuration (mémoire, cpu, ajout de matériel, …). Cliquer sur « Démarrage » pour lancer la vm puis sur « Open VNC console » une fois que ça sera apparu. Une nouvelle fenêtre s’ouvrira offrant un accès graphique à notre nouvelle vm.

La machine devrait donc démarrer sur l’image iso de votre distrib préférée. Son installation reste standart hormis pour un point: le réseau. En effet, il va falloir lui appliquer l’ip FailOver que l’on a récupéré précédemment. On se retrouve donc avec une configuration qui ressemble à ça:

  • Adresse ip: Adresse IP FailOver
  • Netmask: 255.255.255.255
  • Broadcast: Adresse IP FailOver
  • Passerelle/Gateway: IP Serveur Dédié.254 (remplacer le dernier nombre de l’adresse par 254)
  • DNS: OpenDNS ou le DNS du serveur dédié

La fin de l’installation reste classique. Une fois le système installé, il est possible de se reporter à cette doc pour le réseau.

2.3 Accès VNC à la VM:

Pour ouvrir une fenêtre vnc sur une vm à partir de Mozilla Firefox/Iceweasel Linux, j’ai du ajouter un lien vers le plugin jre:
root@mypc ~# mkdir -p ~/.mozilla/plugins
root@mypc ~# locate libnpjp2.so
root@mypc ~# ln -s /usr/lib/jvm/java-6-sun-1.6.0.24/jre/lib/i386/libnpjp2.so ~/.mozilla/plugins/

Pour chromium-browser:
root@mypc ~# cd /usr/lib/chromium/plugins
root@mypc ~# ln -s /usr/lib/jvm/java-6-sun-1.6.0.24/jre/lib/i386/libnpjp2.so

voila =)

Je vais m’arrêter là pour ce premier article sur Proxmox. Je vais tenter de mettre au propre des comparatifs OpenVZ/KVM, qcow2/raw, l’installation de zimbra sur ce proxmox, … Au plaisir =)

Liens:

http://pve.proxmox.com/wiki/Installation

, ,