Proxmox, de son nom complet Proxmox Virtual Environment, permet de créer des containers basés sur LXC. Ces containers ont l’avantage d’être plus légers que des machines virtuelles.
Prérequis: une clé USB où l’ISO de Proxmox est flashée, une machine hôte qui servira de serveur.
Installation
Introduire la clé dans le lecteur USB et booter la machine sur la clé pour procéder à l’installation. Une fenêtre apparaît avec l’option « Install Proxmox VE », la sélectionner.
Sur la page suivante, accepter le contrat.
Renseigner le pays afin d’avoir une bonne configuration clavier, confirmer, puis entrer le mot de passe de root, qui servira à accéder à l’interface web, ainsi qu’une adresse mail.
Ensuite diverses configurations, telles que le FQDN, le réseau, le masque, le nom du serveur sont demandées.
Dans mon cas, ce serveur est sur mon réseau domestique, il aura donc une adresse héritée de la box du FAI, qui débutera en 192.168.1.X /24. La passerelle et le DNS seront la box.
Après avoir cliqué sur Next, checker le résumé et procéder à l’installation.
Dès que l’installation est terminée, le serveur procède à un reboot et demande à éjecter la clé USB. Ensuite connexion à partir d’un navigateur web grâce à l’adresse IP renseignée précédemment, mappée au port 8006, ce qui donne: https://<adresseIPserveur>:8006
Utiliser les identifiants de root pour se connecter.
Configuration et protection du serveur.
Dans un premier temps, configuration des sources pour que les mises à jour se fassent à partir des dépôts « no subscription ».
Dans le répertoire /etc/apt/sources.list.d/ éditer le fichier pve-enterprise.list. Mettre en commentaire la ligne présente.
Créer le fichier pve-no-subscription.list, y insérer les lignes suivantes:
deb http://ftp.debian.org/debian bullseye main contrib deb http://ftp.debian.org/debian bullseye-updates main contrib # PVE pve-no-subscription repository provided by proxmox.com, # NOT recommended for production use deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription # security updates deb http://security.debian.org/debian-security bullseye-security main contrib
Faire les mises à jour:
apt update apt upgrade -y
Configuration de /etc/sysctl.conf : insérer les lignes suivantes:
net.ipv4.ip_forward = 1 net.ipv6.conf.default.forwarding = 1 net.ipv6.conf.all.forwarding = 1 net.ipv4.conf.default.proxy_arp = 0 # Enables source route verification net.ipv4.conf.all.rp_filter = 1 # Enables the magic-sysrq key kernel.sysrq = 1 # We do not want all our interfaces to send redirects net.ipv4.conf.default.send_redirects = 1 net.ipv4.conf.all.send_redirects = 0 #Blocage ICMP net.ipv4.icmp_echo_ignore_all=1
Charger la configuration.
sysctl -p
Maintenant, configuration du firewall pour autoriser toutes les connexions sortantes du serveur, bloquer celles qui entrent et effectuer une redirection de ports pour les containers.
Copier firewall_Host.sh et MyNatRules.config dans /etc/init.d
Firewall_Host.sh *
#! /bin/bash ### BEGIN INIT INFO # Provides: my-start-script # Required-Start: \$local_fs \$syslog # Required-Stop: \$local_fs \$syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts my-start-script # Description: starts my-start-script using start-stop-daemon ### END INIT INFO # script /etc/firewall_HOST.sh (mode 700 - root) # Valable pour tous les HNs (Fronts et Backs) de l'infra. ############################################################## ### ATTENTION ###### ### Les règles diffèrent selon qu'on soit sur un Host ###### ### de type frontal ou backend. Règles nat différentes ###### ### et pas de trafic HTTP sur les backs, notamment ###### ### ###### ### LIGNES CONCERNEES = 84 à 102 ###### ### ###### ##############################################################
MyNatRules.config *
#!/bin/bash ## Regles pour le CT 100
Un exemple pour le container 100. Pour ajouter des containers, effectuer un copié-collé des lignes et modifier les ports de destination pour chaque CT.
Pour que les fichiers puissent être exécutés, changer les droits.
chmod 600 MyNatRules.config chmod 700 firewall_Host.sh
Dans le fichier firewall_Host.sh modifier le port ssh du serveur afin d’ajouter une couche supplémentaire de sécurité. En effet, le port 22 est le port par défaut d’une connexion ssh et est automatiquement scanné lors d’une attaque. En utilisant un port différent, se situant dans une plage suppérieure à 1024, il devient plus compliqué de « deviner » quel est ce port. Les ports de 10 000 à 20 000 étant utilisés en allocation dynamique, il est judicieux de choisir un port compris entre 20 000 et 65 536.
Faire la même modification dans /etc/ssh/sshd_config
Redémarrer le service SSH et le firewall
service ssh restart /etc/init.d/./firewall_Host.sh
Lister les règles du firewall:
iptables -L
Création d’un utilisateur et désactivation de root
Désactiver la connexion via ssh pour le login de root ajoute une couche de sécurité supplémentaire. Cependant pour toujours avoir accès au serveur, il faut créer un utilisateur.
adduser <nom_user>
L’utilisateur créé, ajout au groupe sudo. Vérifier et si besoin installer la commande sudo.
apt install sudo usermod -aG sudo <nom_user>
Désactiver le login du login de root dans /etc/ssh/sshd_config
permitloginroot no
Dans ce fichier décommenter les deux lignes suivantes:
PubkeyAuthentication yes AuthorizedKeysFile
En local, créer paire de clés.
ssh-keygen -t ed25519
Dans le home de l’utilisateur, créer un dossier .ssh, puis créer un fichier authorized_keys. Dans ce fichier coller la clé publique précédemment générée.
Modification du sshd_config pour désactiver l’authentification par mot de passe et redémarrage du service ssh.
# Dans le fichier sshd_config PasswordAuthentification no # Redémarrage du service ssh service ssh restart
Pour se connecter on utilise la commade suivante:
ssh -p <n°port> -i <chemin_et_nom_cle_privée> <user>@<adresse_IP_serveur>
Configuration VMBR1
Le serveur est sécurisé, maintenant configurer le VMBR1 pour que les futurs containers communiquent avec l’extérieur.
Effectuer une copie de sauvegarde du fichier /etc/network/interfaces puis éditer le fichier, ajouter les lignes qui suivent.
auto vmbr1 iface vmbr1 inet static address 192.168.1.254/24 bridge_ports none bridge_stp off bridge_fd 0 post-up echo 1 > /proc/sys/net/ipv4/ip_forward post-up iptables -t nat -A POSTROUTING -s '192.168.1.0/24' -o vmbr0 -j MASQUERADE post-down iptables -t nat -D POSTROUTING -s '192.168.1.0/24' -o vmbr0 -j MASQUERADE
Modification dans le fichier /etc/init.d/firewall_Host.sh:
# dans la section DEBUT DES REGLES # aux lignes: ### On NAT par la SOURCE toutes les connexions sortantes des CTs iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE # modifier l'adresse du réseau en fonction du réseau VMBR1
Maintenant, configuration du firewall pour qu’il démarre automatiquement. En étant positionné dans le répertoire /etc/init.d/ taper la commande:
update-rc.d firewall_Host.sh defaults
Mise en place de l’authentification à deux facteurs
Pour finir, mettre en place l’authentification à deux facteurs. Pour cela, avec l’interface graphique, se positionner sur datacenter, permissions, users, two factors, add, TOTP, ajouter une description et scanner le QRcode avec Google Authenticator. Puis taper la clé qui s’affiche sur le téléphone pour confirmer la double authentification.
La configuration du serveur est terminée.
L’article suivant sera dédié à la création d’un container.
Sources: Les images capturées pendant l’installation du serveur proviennent de:
https://www.it-connect.fr/comment-installer-proxmox-ve-7-0-et-creer-sa-premiere-vm/
Les fichiers de configuration ont été réalisés avec l’aide de elgo.org
*Les scripts ne sont plus insérés dans les articles. Si vous souhaiter y avoir accès merci de me contacter