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.

Bienvenue sur l’interface !

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.

TOTP

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

Catégories : Proxmox