Dans cet article, nous allons passer en revue toutes les actions à faire en post-installation d'un serveur Proxmox VE (Virtual Environment) exposé sur Internet. Pour cela, nous prendrons l'exemple d'un serveur Proxmox VE installé sur un Bare Metal hébergé cher OVH.
Nous allons tout particulièrement nous attacher aux opérations destinées à sécuriser le serveur.
Changement du mot de passe root
A la fin de l'installation de Proxmox, un mail est envoyé par OVH contenant un lien permettant d'afficher le mot de passe de l'utilisateur root sur le serveur. Il est important de changer ce mot de passe le plus rapidement possible. On peut le faire en ligne de commande après s'être connecté en ssh ou via l'interface graphique de Proxmox en cliquant sur le bouton Password comme montré dans la figure ci-dessous.
Activation de l'authentification à double facteur
En dessous de Users, dans la figure ci-dessus, on trouve l'option Two Factor.
Le bouton Add nous propose 4 options :
- TOTP - C'est le choix le plus courant. Il repose sur une application d'authentification.
- WebAuthn - Appellé auparavant "U2F", Web Authentication peut être utilisé avec une clé physique, comme une Yubikey ou une clé s'appuyant sur le système d'exploitation (Windows Hello, Apple touch/faceID, ...).
- Recovery Keys - Génération de clés de secours.
- Yubico OTP - Mécanisme d'authentification faisant appel à des clés physiques de type YubiKey 5 ou YubiKey FIPS Series.
Choisissez la méthode qui vous convient le mieux, dans mon cas, je vais choisir TOTP. Et n'oubliez pas de générer également les clés de secours qui devront être conservées bien à l'abris.
Réglage des locales
Lorsque le serveur est livré, du moins au moment où j'écris l'article, la configuration des locales n'est pas complète.
Voici comment y remédier. La commande suivante ouvre une interface qui permet de sélectionner le jeux de caractères régionaux.
dpkg-reconfigure locales
Nous allons ajouter fr_FR.UTF-8 UTF-8 pour la France en plus de en_US.UTF-8 UTF-8 déjà configuré. En choix par défaut, je suggère de laisser en_US.UTF-8 UTF-8.
Il faut noter que l'on peut aussi le faire manuellement en éditant le fichier de configuration /etc/locale.gen.
Création d'un utilisateur
En se connectant en SSH sur le serveur, nous allons créer un nouvel utilisateur. Dans la commande suivante, le paramètre --uid <id> n'est pas obligatoire. C'est juste que j'aime bien attribuer le même id utilisateur sur toutes mes machines à mon user.
adduser --uid <id> <nom_utilisateur>
On accorde ensuite les droits d'administration à notre utilisateur.
adduser <nom_utilisateur> sudo
On copie ensuite la clé SSH de notre utilisateur sur le serveur (l'opération doit se faire depuis une autre machine).
ssh-copy-id -i <chemin_vers_cle_publique> <user>@<machine>
Une fois la clé ajoutée, nous allons pouvoir configurer le serveur SSH.
Configuration de SSH
Nous allons sécuriser la connexion SSH en modifiant la configuration par défaut.
Notre choix se porte sur une méthode de connexion par clé et nous allons configurer le daemon SSH afin de limiter strictement les connexion à ce mode. De plus nous allons refuser la connexion de l'utilisateur root.
Nous allons créer un fichier de configuration /etc/ssh/sshd_config.d/my_sshd_config.conf pour le serveur ssh. Les paramètres modifiés dans ce fichier écraseront la configuration par défaut du fichier /etc/ssh/sshd_config. Il est aussi possible de modifier directement le fichier /etc/sshd_config si vous préférez.
Port <port>
PermitRootLogin no
MaxAuthTries 3
PubkeyAuthentication yes
AllowUsers <nom_utilisateur>
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
Port nous permet de changer le port d'écoute du serveur SSH. C'est une faible protection contre le scan de ports, mais ça évite pas mal de polution dans les logs en supprimant les tentatives sur le port 22.
Nous allons ensuite modifier le port du client SSH qui permet d'assurer la communication de notre Proxmox avec d'autres serveurs. Selon le même principe, nous allons créer un fichier /etc/ssh_config.d/my_ssh_config.
Port <port>
Attention avant de continuer. Vérifiez bien tous les paramètres faute de quoi, vous risquez de vous retrouver coupé de votre serveur.
Il est maintenant temps de relancer le serveur SSH avec la nouvelle configuration afin de constater que tout fonctionne normalement.
systemctl restart sshd
Ajout de l'utilisateur dans Proxmox
Notre utilisateur a été créé sur la machine linux sur laquelle tourne Proxmox, mais il n'est pas pour autant possible pour lui de se connecter à l'interface de l'administration de Proxmox. Nous allons remédier à ça.
Nous allons commencer par créer un groupe Administrateurs en suivant le chemin Datacenter -> Permissions -> Groupes et en cliquant sur le bouton Create.
Ensuite, il faut définir les permissions pour ce groupe. Pour ce faire, nous allons sur Datacenter -> Permissions et nous cliquons sur le bouton Add. Dans le menu déroulant, on choisi l'option Group Permission.
Le Path représente l'étendu des droits. Dans notre cas, ce groupe dispose de droits sur tout le système. Ensuite, on attribue le Role Administrateur à notre groupe.
Nous allons enfin pouvoir ajouter notre utilisateur en suivant le chemin Datacenter -> Permissions -> User -> Add.
Dans Realm, nous allons sélectionner Linux PAM standard authentication. Puis nous allons nous connecter avec l'utilisateur nouvellement créé afin de vérifier que tout fonctionne avant de supprimer l'accès à l'utilisateur root en décochant la case Enabled.
Une fois votre utilisateur configuré, n'oubliez pas d'activer l'authentification à double facteur. Et de la même façon que nous l'avions fait pour le compte root, n'oubliez pas de créer des clés de secours.
Vérrouillage du compte root sur la machine
Maintenant que nous disposons d'un utilisateur avec les droits sudo capable de se connecter en ssh et par l'interface web, nous allons supprimer l'accès au compte root au niveau de la machine.
sudo passwd -dl root
Les opérations que nous avons faites, tant au niveau de la machine qu'au niveau de l'interface web, interdisent tout accès direct au compte root. Ainsi, les attaques sur ce compte sont impossible.
Configuration du pare-feu
WIP
Installation de fail2ban
Cet article date un peu... De nos jours, on préférera installer CrowdSec qui est un dispositif de ban d'IP basé sur une communauté d'utilisateurs qui s'échangent des informations sur les adresses à bannir.
Dernier point pour améliorer la sécurité de notre serveur Proxmox, l'installation d'un outil capable de bannir les IP responsables de trop nombreuses tentatives d'intrusion.
sudo apt install fail2ban
Nous allons ensuite copier le fichier de configuration par défaut dans un fichier local afin de préserver notre configuration des mises à jour de fail2ban.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
On édite ensuite le fichier /etc/fail2ban/jail.local avec les paramètres suivants :
ignoreip = 127.0.0.1/8 ::1 <ip_du_serveur>
maxretry = 3
findtime = 10m
bantime = 24h
mta = sendmail
sender = <adresse_mail_expéditeur>
destmail = <adresse_mail_destinataire>
Pour la configuration des jails, nous allons supprimer la section [sshd] contenue dans le fichier jail.local afin d'en refaire une au propre dans le dossier /etc/fail2ban/jail.d. Nous allons également supprimer le fichier /etc/fail2ban/jail.d/defaults-debian.conf qui ne fait qu'activer la jail ssh.
sudo rm /etc/fail2ban/jail.d/defaults-debian.conf
Nous allons ensuite créer un fichier /etc/fail2ban/jail.d/sshd.conf avec le contenu suivant (en remplaçant <port> par le numéro de port que vous avez choisi) :
[sshd]
enabled = true port = <port> maxretry = 3 findtime = 10m bantime = 24h logpath = %(sshd_log)s backend = %(sshd_backend)s
De même, nous allons créer un fichier /etc/fail2ban/jail.d/proxmox.conf.
[proxmox]
enabled = true
port = https,http,8006
filter = proxmox
logpath = /var/log/daemon.log
maxretry = 3
findtime = 10m
bantime = 24h
Puis nous allons créer le fichier de filtre /etc/fail2ban/filter.d/proxmox.conf pour l'analyse du journal :
[Definition]
failregex = pvedaemon\[.*authentication failure; rhost=<HOST> user=.* msg=.*
ignoreregex =
Pour finir on relance fail2ban et on s'assure qu'il sera bien lancé au redémarrage du système.
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban
Mise à jour de Proxmox
Maintenant que nous avons tout configuré, je vous invite à faire la mise à jour de Proxmox. Comme nous avons verrouillé l'utilisateur root, il est impossible de le faire par l'interface web (un bug de Proxmox). Nous pouvons toutefois consulter les mises à jour disponibles en cliquant sur le bouton Refresh dans le menu Updates du serveur concerné. Pour faire la mise à jour, nous allons nous connecter en ssh ou utiliser la console de l'interface graphique et taper les commandes suivantes.
sudo apt update
sudo apt full-upgrade
Si la mise à jour installe un nouveau paquet pve-kernel et que vous pouvez le faire sans perturber la production, vous devez redémarrer le serveur Proxmox pour prendre en compte la mise à jour.