# ProxMox VE

Proxmox Virtual Environment est une solution de virtualisation libre (licence AGPLv3) basée sur l'hyperviseur Linux KVM, et offre aussi une solution de containers avec LXC.

# Sauvegarde et restauration de VM

#### Dans ce tutoriel

Comment faire la sauvegarde d'une VM ainsi que la sauvegarde régulière d'un groupe de VM. Ensuite comment restaurer une sauvegarde.

Le tout avec l'interface graphique ainsi qu'en ligne de commande.

#### Sauvegarde individuel

##### Interface Web

Pour commencer, il faut se connecter à l'interface web du serveur sur lequel on souhaite effectuer l'opération.

[![10.PNG](https://doc.ataxya.net/uploads/images/gallery/2019-08/scaled-840-/K08xShFt9iHAHkBr-10.PNG)](https://doc.ataxya.net/uploads/images/gallery/2019-08/K08xShFt9iHAHkBr-10.PNG)

Dans le menu de gauche, sélectionner la VM, puis onglet Sauvegarde

[![11.PNG](https://doc.ataxya.net/uploads/images/gallery/2019-08/scaled-840-/vTEvdhbs17tB0uSS-11.PNG)](https://doc.ataxya.net/uploads/images/gallery/2019-08/vTEvdhbs17tB0uSS-11.PNG)

On peut voir que la seule option proposer est "Sauvegarder Maintenant".

Une fenêtre de configuration s'ouvre et propose 4 options:

[![12.PNG](https://doc.ataxya.net/uploads/images/gallery/2019-08/scaled-840-/NkOqxiWnFqQxG68P-12.PNG)](https://doc.ataxya.net/uploads/images/gallery/2019-08/NkOqxiWnFqQxG68P-12.PNG)

- Stockage: Pour choisir le disque sur lequel on souhaite mettre la sauvegarde
- Mode: Trois options de sauvegarde a bien selectionné

1. Snapshot: Je le déconseille fortement, il effectue la sauvegarde de la VM pendant son fonctionnement. Il y à donc un gros risque de corruption non négligeable!
2. Suspendre: Celui-là est plus pratique, il va mettre en pause la VM puis effectuer une Snapshot, il y a donc moins de risques pour les données. Pratique pour un serveur qui a peu de tâches en cours.
3. Stopper: Fortement recommander pour les serveurs qui ont beaucoup de tâches en cours, il va éteindre la VM, lancer en arrière-plan la tâche de sauvegarde puis redémarrer la VM. Le temps d'arrêt est donc faible car la VM redémarre dès que la tâche est lancée (quelques secondes). De plus ce mode garantit l'intégrité des données.

- Compression: Permet de réduire la taille de la sauvegarde, encore une fois trois options:

1. Aucune: Désactive la compression, le fichier sera donc en RAW (.lvm). La sauvegarde sera très rapide mais prendra beaucoup de place
2. LZO: Compression qui permet de réduire la taille du fichier légèrement, sans impacter énormément le temps de sauvegarde.
3. GZIP: Grosse compression qui permet d'économiser beaucoup de Go, mais qui augmente considérablement le temps de la sauvegarde (quelques dizaines de minutes voir plus)!

- Mail: Permet d'envoyer un mail quand la tâche est terminée pour indiquer s'il y a eu une erreur ou pas. **Cette option ne fonctionne que si vous avez au préalable configuré l'envoi de mail sur le serveur.**

Il ne reste plus qu'à lancer la sauvegarde. Une fois fini, elle apparaît dans la liste.

##### CLI

La commande qui permet d'effectuer la sauvegarde est plus complète que l'interface graphique, elle permet plus de personnalisation.

Pour voir toutes les options de personalisation: [Blog Proxmox - vzdump](https://pve.proxmox.com/pve-docs/vzdump.1.html)

Voici l'équivalent en commande de la sauvegarde effectuer en graphique:

```shell
vzdump 100 --dumpdir /deb/sdb2/dump --mode stop  --compress lzo --mailto
```

100: Correspond a l'ID de la VM

\--dumpdir: Le disque ou l'emplacement de stockage

\--mode: snaphot - suspend - stop

\--compress: 0 - lzo - gzip

\--mailto: adresse mail

#### Sauvegarde multiple et programmée

Maintenant que l'on a vu comment faire des sauvegardes individuelles, on va voir comment en faire plusieurs en même temps est les programmer.

##### Interface Web

Dans le menu de gauche on sélectionne Datacenter, puis sauvegarde.

[![13.PNG](https://doc.ataxya.net/uploads/images/gallery/2019-08/scaled-840-/sM5SrTyDnieiQxzJ-13.PNG)](https://doc.ataxya.net/uploads/images/gallery/2019-08/sM5SrTyDnieiQxzJ-13.PNG)

En cliquant sur ajouter on va pouvoir configurer notre tâche

[![14.PNG](https://doc.ataxya.net/uploads/images/gallery/2019-08/scaled-840-/j60QiV9i9kYVfSfU-14.PNG)](https://doc.ataxya.net/uploads/images/gallery/2019-08/j60QiV9i9kYVfSfU-14.PNG)

- Noeud: Choisir le serveur (dans le cas d'un cluster)
- Jour de la semaine: Quelles jours doit être effectuer la tâche
- Heure de début: Quelle heure doit être démarrer la tâche
- Mail: Pour envoyer un mail s'il y a une erreur uniquement ou à chaque fois
- Mode de sélection: Propose trois choix:

1. Inclure: Sauvegarde que les VMs sélectionnées
2. Tout: Sauvegarde toutes les VMs
3. Exclure: Sauvegarde toutes les VMs excepter les sélectionnées

- Activer: Permet d'activer ou non la tâche

Pour le reste des options, il s'agit des même que pour la sauvegarde individuelle.

Une fois créer, on peut voir un résumer des options choisis.

[![15.PNG](https://doc.ataxya.net/uploads/images/gallery/2019-08/scaled-840-/rNsKJcg5TVd7LGFn-15.PNG)](https://doc.ataxya.net/uploads/images/gallery/2019-08/rNsKJcg5TVd7LGFn-15.PNG)

#### Restaurer une sauvegarde

Pour restaurer une VM, il y a deux possibiliter, soit la VM existe déjà, soit elle doit être créer.

##### Interface web

Si elle existe déjà, on sélectionne la VM puis Sauvegarde.

On sélectionne la sauvegarde à restaurer, puis clic sur "restaurer".

Il faut juste choisir le stockage de la VM ainsi que si on le souhaite une limite en vitesse pour ne pas pourrir l'I/O des disques.

[![16.PNG](https://doc.ataxya.net/uploads/images/gallery/2019-08/scaled-840-/WkVBiVJnpeqa08YG-16.PNG)](https://doc.ataxya.net/uploads/images/gallery/2019-08/WkVBiVJnpeqa08YG-16.PNG)

Si elle n'existe pas ou plus, alors il faut aller dans le disque ou se trouve la sauvegarde, la sélectionner puis cliquer sur "restaurer".

On choisi l'emplacement ainsi que l'ID que l'on veut donner.

[![17.PNG](https://doc.ataxya.net/uploads/images/gallery/2019-08/scaled-840-/KW4BZDbheDANFdJf-17.PNG)](https://doc.ataxya.net/uploads/images/gallery/2019-08/KW4BZDbheDANFdJf-17.PNG)

La VM sera créée puis restaurer.

##### CLI

Comme pour la sauvegarde, en ligne de commande plus de choix s'offre à nous, pour tous les connaître je vous recommande d'aller sur la page dédiée: [Blog Proxmox - qmrestore](https://pve.proxmox.com/pve-docs/qmrestore.1.html)

Voici l'équivalent en commande de restauration d'une VM qui existe déjà:

```shell
qmrestore /deb/sdb2/fichier_de_sauvegarde.gz 100 --force true
```

Après l'appel de qmrestore j'ai indiqué l'emplacement du fichier de sauvegarde puis l'ID de la VM à restaurer

\--force: permet de forcer à réécrire une VM existante

Si la VM n'existe pas, il suffit d'indiquer un ID qui n'est pas pris.

# Ajouter un node avec des VMs a un cluster (en cours)

Faire les copies des VMs

<div id="bkmrk-mkdir--p-%2Fhome%2Fqemu-">mkdir -p /home/qemu-server/</div><div id="bkmrk-mkdir--p-%2Fhome%2Flxc%2F">mkdir -p /home/lxc/</div><div id="bkmrk-cp-%2Fetc%2Fpve%2Fqemu-ser">cp /etc/pve/qemu-server/* /home/qemu-server/</div><div id="bkmrk-cp-%2Fetc%2Fpve%2Flxc%2F%2A-%2Fh">cp /etc/pve/lxc/* /home/lxc/</div><div id="bkmrk-%C2%A0"> </div><div id="bkmrk-%C2%A0v%C3%A9rifier-que-les-vm"> Vérifier que les Vm on pas les mêmes ID entre les deux clusters</div><div id="bkmrk-v%C3%A9rifier-que-tes-ser">Vérifier que tes serveurs ont bien la même version de proxmox</div><div id="bkmrk-%C2%A0-0"> </div><div id="bkmrk-si-c%27est-bon-tu-veri">Si c'est bon tu verifies l'état de ton fichier hosts (/etc/hosts)</div><div id="bkmrk-tu-ping-les-hostname">Tu ping les hostname</div><div id="bkmrk-%C2%A0-1"> </div><div id="bkmrk-exemple-%C2%A0%3A">exemple :</div><div id="bkmrk-10.88.88.20-pve01">10.88.88.20 pve01</div><div id="bkmrk-10.88.88.21-pve02">10.88.88.21 pve02</div><div id="bkmrk-10.88.88.22-pve-stor">10.88.88.22 pve-stor01</div><div id="bkmrk-10.88.88.23-pve03">10.88.88.23 pve03</div><div id="bkmrk-%C2%A0-2"> </div><div id="bkmrk-ping-pve01">ping pve01</div><div id="bkmrk-ping-pve02-etc..">ping pve02 etc..</div><div id="bkmrk-%C2%A0-3"> </div><div id="bkmrk-si-tout-ping-alors-t">si tout ping alors tu lances la creation du cluster (via l'interface web)</div><div id="bkmrk-et-apr%C3%A9s-tu-ajoutes-">et aprés tu ajoutes les autres serveurs</div><div id="bkmrk-%C2%A0-4"> </div><div id="bkmrk------------">-----------</div><div id="bkmrk-%C2%A0-5"> </div><div id="bkmrk-%C2%A0-6"> </div><div id="bkmrk-si-ca-foire">Si ca foire</div><div id="bkmrk-ne-reboot-pas-les-no">NE REBOOT PAS LES NODES</div><div id="bkmrk-%C2%A0-7"> </div><div id="bkmrk-tu-te-connectes-en-s">Tu te connectes en ssh ou console</div><div id="bkmrk-et-tu-fais-%3A">et tu fais :</div><div id="bkmrk-%C2%A0-8"> </div><div id="bkmrk-service-pve-cluster-">service pve-cluster restart</div><div id="bkmrk-service-corosync-res">service corosync restart</div><div id="bkmrk-%C2%A0-9"> </div><div id="bkmrk-cp-%2Fhome%2Flxc%2F%2A-%2Fetc%2F">cp /home/lxc/* /etc/pve/lxc/</div><div id="bkmrk-cp-%2Fhome%2Fqemu-server">cp /home/qemu-server/* /etc/pve/qemu-server/</div><div id="bkmrk-%C2%A0-10"> </div>et tu retrouveras tes vms

# Sécurisation basique de son Proxmox

Je vois sur Internet des serveurs Proxmox pas sécurisés voire pire, des conseils qui préconisent d’utiliser un firewall comme pfSense installé en machine virtuelle pour sécuriser l’hyperviseur, alors que ce dernier est hébergé chez un fournisseur dont on ne sait rien du réseau. Votre fournisseur peut proposer un firewall comme chez OVH avec son système [anti-DDoS](https://www.ovh.com/fr/anti-ddos/), mais cela ne vous protège que de l’extérieur, pas de l’intérieur du réseau, qui lui comporte une multitude de serveurs d’autres clients.

La logique pour un réseau en entreprise ou chez soi, pour un home lab ou de l’auto-hébergement sera la même.

**Quel que soit l’hyperviseur, il faut que celui-ci soit sécurisé. S’il n’est pas sécurisé, toutes vos machines virtuelles ou vos conteneurs sont potentiellement compromis.**

Pour citer [Andy Grove, ](https://fr.wikipedia.org/wiki/Andrew_Grove)co-fondateur d'[Intel,](https://fr.wikipedia.org/wiki/Intel) dans son livre autobiographique qui porte le même nom : « [Seuls les paranoïaques survivent](https://livre.fnac.com/a1581225/Andrew-Grove-Seuls-les-paranoiaques-survivent) ».

\[Wikipedia\]: Il explique dans sa biographie *Seuls les paranoïaques survivent* que le moteur psychique qui lui a permis de mener son entreprise au sommet a été durant 38 ans

Ce concept est parfaitement adapté pour la sécurité.

## 1. Protection physique

Le ou les serveurs doivent être à minima protégés physiquement, comme une salle sécurisée, ou si dans un datacenter, dans une baie fermée à clefs. Mais il est aussi important de protéger l’accès au BIOS/UEFI par un mot de passe costaud et interdire le boot sur autre chose que l’hyperviseur.

Il serait dommage qu’une personne avec une clef usb boote sur un autre OS, et modifie le mot de passe root, formate le ou les disques où sont installés Proxmox, etc.

Les sociétés qui fournissent des serveurs comme OVH, Scaleway, etc. peuvent avoir dans leurs employés des personnes mal intentionnées, tout comme dans vos collègues de travail ou prestataires.

## 2. Firewall

Proxmox intègre un firewall agissant sur 3 parties distinctes :

- Datacenter
- Serveur Proxmox alias PVE
- Machines virtuelles et conteneurs LXC

La partie machine virtuelle et conteneurs est indépendante des deux autres. Elle n’a pas d'intérêt dans la sécurisation du serveur Proxmox.

Je me base seulement pour un seul hôte Proxmox, qui dans ce cas le fait de faire les règles au niveau du data center ou du node n’aura pas forcément d’impact.

### 2.1 Ports utilisés par Proxmox

Proxmox utilise par défaut ces ports pour fonctionner.

Si vous modifiez le port SSH, utilisez le même port sur tous les serveurs du cluster au risque d’avoir des surprises.

<table id="bkmrk-services-protocole-p"><thead><tr><th>Services</th><th>Protocole</th><th>Ports</th></tr></thead><tbody><tr><td>Web interface</td><td>TCP</td><td>8006</td></tr><tr><td>SSHd</td><td>SSH</td><td>22</td></tr><tr><td>pvedaemon (en écoute)</td><td>TCP</td><td>85</td></tr><tr><td>rpcbind</td><td>TCP</td><td>111</td></tr><tr><td>corosync multicast (pour les clusters)</td><td>UDP</td><td>5404, 5405</td></tr><tr><td>SPICE proxy</td><td>TCP</td><td>3128</td></tr></tbody></table>

[Source](https://pve.proxmox.com/wiki/Ports)

### 2.2 Alias

Alias se trouve dans la partie firewall du Datacenter et va permettre de nommer les IP ou les plages d’IP à utiliser dans le firewall.

C’est une habitude de travail de créer des alias, ça évite les oublis, ça permet aussi d’aller plus vite quand on a une correction à effectuer sur une grosse quantité de règles de filtrage.

![](http://192.168.1.43:1313/images/Proxmox_secu/01.png)[![01.png](https://doc.ataxya.net/uploads/images/gallery/2021-12/scaled-1680-/01.png)](https://doc.ataxya.net/uploads/images/gallery/2021-12/01.png)

#### 2.2.1 Plage d’IP

![](http://192.168.1.43:1313/images/Proxmox_secu/02.png)[![02.png](https://doc.ataxya.net/uploads/images/gallery/2021-12/scaled-1680-/02.png)](https://doc.ataxya.net/uploads/images/gallery/2021-12/02.png)

#### 2.2.2 Une IP

![](http://192.168.1.43:1313/images/Proxmox_secu/03.png)[![03.png](https://doc.ataxya.net/uploads/images/gallery/2021-12/scaled-1680-/03.png)](https://doc.ataxya.net/uploads/images/gallery/2021-12/03.png)

### 2.3 Règles de firewall

Rien de compliqué, on autorise en entrée le port 8006, le SSH, le ping. Et comme ce n'est qu’un seul node, pas besoin de préciser la destination (pas idéal, mais cela simplifie les choses) ni l’interface sur laquelle le trafic doit passer, qui de toute façon pour un seul node sera vmbr0.

<table id="bkmrk-direction-action-sou"><thead><tr><th>Direction</th><th>Action</th><th>Source</th><th>Protocol</th><th>Destination Port</th><th>Log Level</th><th>Comment</th></tr></thead><tbody><tr><td>in</td><td>ALLOW</td><td>  
</td><td>tcp</td><td>8006</td><td>nolog</td><td>web GUI</td></tr><tr><td>in</td><td>ALLOW</td><td>  
</td><td>tcp</td><td>22</td><td>nolog</td><td>ssh</td></tr><tr><td>in</td><td>ALLOW</td><td>  
</td><td>icmp</td><td>  
</td><td>nolog</td><td>ping</td></tr></tbody></table>

#### 2.3.1 Macro

Il est possible d’utiliser des macros de configuration pour certains protocoles comme le SSH ou le protocole SMB qui a besoin d’ouverture de plusieurs ports (TCP 445, TCP 139, UDP 138-139), cela facilite grandement la lecture des règles si vous devez l’utiliser.

![](http://192.168.1.43:1313/images/Proxmox_secu/04.png)[![04.png](https://doc.ataxya.net/uploads/images/gallery/2021-12/scaled-1680-/04.png)](https://doc.ataxya.net/uploads/images/gallery/2021-12/04.png)

#### 2.3.2 Protocole

![](http://192.168.1.43:1313/images/Proxmox_secu/05.png)[![05.png](https://doc.ataxya.net/uploads/images/gallery/2021-12/scaled-1680-/05.png)](https://doc.ataxya.net/uploads/images/gallery/2021-12/05.png)

### 2.4 Chef, je me suis coupé la main !

En console, il est possible de désactiver le firewall

Éditez le fichier */etc/pve/firewall/cluster.fw* et remplacez la valeur **1** par 0.

```shell
[OPTIONS]

enable: 1

```

<div id="bkmrk--4"></div>### <span class="md-plain">2.5 Utilisation de pfsense pour les VM</span>

<span class="md-plain">Je vous oriente sur le site de </span><span class="md-meta-i-c md-link">[<span class="md-plain">zwindler</span>](https://blog.zwindler.fr)</span><span class="md-plain"> qui a 3 articles sur le sujet :</span>

- <span class="md-meta-i-c md-link">[<span class="md-plain">Proxmox VE 6 + pfsense sur un serveur dédié (1/2)</span>](https://blog.zwindler.fr/2020/03/02/deploiement-de-proxmox-ve-6-pfsense-sur-un-serveur-dedie/)</span>

- <span class="md-meta-i-c md-link">[<span class="md-plain">Proxmox VE 6 + pfsense sur un serveur dédié (2/2)</span>](https://blog.zwindler.fr/2020/03/09/proxmox-ve-6-pfsense-sur-un-serveur-dedie-2-3/)</span>

- <span class="md-meta-i-c md-link">[<span class="md-plain">Optimisation de PFsense dans Proxmox VE</span>](https://blog.zwindler.fr/2020/07/06/optimisation-de-pfsense-dans-proxmox-ve/)</span>

<span class="md-plain">Et aussi le script bash de </span><span class="md-meta-i-c md-link">[<span class="md-plain">Noa</span>](https://twitter.com/_Akanoa_)</span><span class="md-plain"> disponible sur son GitHub :</span>

- <span class="md-meta-i-c md-link">[<span class="md-plain">Iptables Proxmox Forward pfsense</span>](https://gist.github.com/Akanoa/afef9cbc6b4f90a78f2c841017932589#file-iptables-proxmox-forward-pfsense)</span>

## 3. Fail2Ban

### 3.1 Installation de Fail2Ban

<div id="bkmrk-apt-install-fail2ban">``apt install fail2ban``</div>### 3.2 Configuration de fail2Ban

Editez le fichier :/etc/fail2ban/jail.local

```shell
[proxmox]
enabled = true
port = https,http,8006
filter = proxmox
logpath = /var/log/daemon.log
maxretry = 3
bantime = 3600 #1 heure

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 300
bantime = 86400 #24 heures
ignoreip = 127.0.0.1

```

<div id="bkmrk--5"></div>/etc/fail2ban/filter.d/proxmox.conf

```shell
[Definition]
failregex = pvedaemon\[.*authentication failure; rhost=<HOST> user=.* msg=.*
ignoreregex =

```

<div id="bkmrk--6"></div>Relancer le service de Fail2Ban

```shell
systemctl restart fail2ban.service

```

<div id="bkmrk--7"></div>Sources : [wiki Proxmox](https://pve.proxmox.com/wiki/Fail2ban)

### 3.3 Les commandes utiles de Fail2Ban

#### 3.3.1 Bannir une IP

```shell
fail2ban-client set [nom du jail] banip [IP à bannir]

```

<div id="bkmrk--8"></div>#### 3.3.2 Enlever le ban d’une IP

```shell
fail2ban-client set [nom du jail] unbanip [IP concerné]

```

<div id="bkmrk--9"></div>#### 3.3.3 Lister les règles

```shell
fail2ban-client status

Status
|- Number of jail:      1
`- Jail list:   sshd

```

<div id="bkmrk--10"></div>#### 3.3.4 Détails d’une règle

```shell
fail2ban-client status sshd

Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     5
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 1
   |- Total banned:     1
   `- Banned IP list:   192.168.1.21

```

<div id="bkmrk--11"></div>Et si l’on veut en savoir plus sur les tentatives de connexion, il faut regarder dans /var/log/auth.log

```shell
tail /var/log/auth.log

Dec  9 12:46:14 pve sshd[3769206]: Failed password for nidouille from 192.168.1.21 port 39516 ssh2
Dec  9 12:46:18 pve sshd[3769206]: Failed password for nidouille from 192.168.1.21 port 39516 ssh2
Dec  9 12:46:22 pve sshd[3769206]: Failed password for nidouille from 192.168.1.21 port 39516 ssh2
Dec  9 12:46:23 pve sshd[3769206]: Connection closed by authenticating user nidouille 192.168.1.21 port 39516 [preauth]
Dec  9 12:46:23 pve sshd[3769206]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.1.21  user=nidouille

```

<div id="bkmrk--12"></div>## 4. SSH

Par défaut, Proxmox ne propose qu’un compte utilisateur : root. On va le sécuriser à minima pour les connexions SSH.

Voici les options activées après une installation d’un node dans /etc/ssh/sshd\_config, et ce n’est pas folichon.

```shell
PermitRootLogin yes

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

UsePAM yes
X11Forwarding yes
PrintMotd no

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

# override default of no subsystems
Subsystem       sftp    /usr/lib/openssh/sftp-server

```

<div id="bkmrk--13"></div>Fail2Ban amène une protection pour les attaques par brute force, mais si on garde l’utilisateur root pour l'accès distant en ssh, on va monter d’un cran la sécurité en obligeant la connexion via clefs. Je ne saurais que trop conseiller la désactivation de l’utilisateur SSH au profit d’un autre compte système.

Je pars du principe que vous avez vos clefs SSH privés et publique.

Dans /root/.ssh/authorized\_keys, vous allez renseigner votre clef publique

Puis modifier /etc/ssh/sshd\_config pour forcer l'authentification par clefs.

```shell
#PermitRootLogin yes
PermitRootLogin prohibit-password
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPassword no

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

UsePAM yes
X11Forwarding no
PrintMotd no

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

# override default of no subsystems
Subsystem       sftp    /usr/lib/openssh/sftp-server

```

<div id="bkmrk--14"></div>## 5. Comptes utilisateurs

<span class="md-plain">La gestion des comptes utilisateurs peut être précise et déroutante.</span>

<span class="md-plain">De base, on a deux types de comptes utilisateur :</span>

- <span class="md-plain">PAM (compte système)</span>
- <span class="md-plain">Proxmox</span>

<span class="md-plain">Auquel on peut rajouter d'autre source d'utilisateur via le menu Realms (non traité ici) :</span>

- <span class="md-plain">Active Directory</span>
- <span class="md-plain">LDAP</span>
- <span class="md-plain">OpenID Connect</span>

<span class="md-plain">Puis, on donne aux utilisateurs deux permissions :</span>

- <span class="md-plain">Path</span>
- <span class="md-plain">Role</span>

<span class="md-plain">Il est bien sûr possible de créer des groupes d'utilisateurs, de nouveaux rôles en associant les privilèges que l'on désire et de créer des pools regroupant des VM et des datastores pour encore affiner les droits si besoin. </span>

### 5.1 Les rôles

Les rôles regroupent les privilèges.

<table id="bkmrk-nom-privil%C3%A8ges-admin" style="width:791px;height:405px;"><thead><tr><th style="width:150.922px;">Nom</th><th style="width:639.078px;">Privilèges</th></tr></thead><tbody><tr><td style="width:150.922px;">Administrator</td><td style="width:639.078px;">Tous les droits</td></tr><tr><td style="width:150.922px;">NoAccess</td><td style="width:639.078px;">Aucun droits donc aucun accès</td></tr><tr><td style="width:150.922px;">PVEAdmin</td><td style="width:639.078px;">Tout sauf les paramètres systèmes (Sys.PowerMgmt, Sys.Modify, Realm.Allocate)</td></tr><tr><td style="width:150.922px;">PVEAuditor</td><td style="width:639.078px;">Accès en lecture seule</td></tr><tr><td style="width:150.922px;">PVEDatastoreAdmin</td><td style="width:639.078px;">Administration des espaces de stockage et des templates (inclus le backup)</td></tr><tr><td style="width:150.922px;">PVEDatastoreUser</td><td style="width:639.078px;"><span class="td-span md-focus"><span class="md-plain md-expand">Allocation des espaces de stockage et des templates (inclus le backup)</span></span></td></tr><tr><td style="width:150.922px;">PVEPoolAdmin</td><td style="width:639.078px;">Administration des pools</td></tr><tr><td style="width:150.922px;">PVEPoolUser</td><td style="width:639.078px;">Consultations des pools</td></tr><tr><td style="width:150.922px;">PVESysAdmin</td><td style="width:639.078px;">ACLs utilisateur, audit, console système et journaux système</td></tr><tr><td style="width:150.922px;">PVETemplateUser</td><td style="width:639.078px;">visualiser et cloner des templates</td></tr><tr><td style="width:150.922px;">PVEUserAdmin</td><td style="width:639.078px;">administration des utilisateurs</td></tr><tr><td style="width:150.922px;">PVEVMAdmin</td><td style="width:639.078px;">administrations des VM</td></tr><tr><td style="width:150.922px;">PVEVMUser</td><td style="width:639.078px;">visualisation, sauvegarde, CDROM de configuration, console VM, gestion de l’alimentation VM</td></tr></tbody></table>

### 5.2 Comptes système (PAM)

Les comptes PAM sont des comptes systèmes. Les seuls à pouvoir se connecter en SSH ou console.

Pour la création de ce type de compte, en dehors du compte systèmes, le reste peut se faire en console ou via la GUI.

#### Création du compte système

```shell
adduser admin1

```

<div id="bkmrk--15"></div>#### Console

On enregistre le compte système dans la base des comptes Proxmox

```shell
pveum useradd admin1

```

<div id="bkmrk--16"></div>On va créer le mot de passe

```shell
pveum passwd admin1@pam

```

<div id="bkmrk--17"></div>On ajoute les droits administrateurs à l’utilisateur

```shell
pveum aclmod / -user admin1@pam -roles Administrator

```

<div id="bkmrk--18"></div>### 5.3 Authentification à double facteurs TOTP

Pour la mise en place rapide d’une double authentification, la solution du TOTP est idéal. Il faut juste un gestionnaire de mot de passe qui possède cette fonctionnalité comme Bitwarden, LastPass via son application dédiée Authentificator, NordPass, etc., ou des applications dédiées comme LastPass, Authentificator, etc.

Pour en savoir plus sur le TOTP:

- site de la société française Synestis spécialisé en cybersécurité : [lien](https://www.synetis.com/authentification-totp/)
- blog de l’hébergeur IONOS : [lien](https://www.ionos.fr/digitalguide/serveur/securite/totp/)

Pour le tutoriel, j’utilise Bitwarden (produit très utilisé) pour la génération du code aléatoire. Mais il n’est pas possible sur l’application d’effectuer des captures d’écran, les captures faites le sont sur mon client Bitwarden installé sur mon PC.

<p class="callout danger">**Note importante : ne pas utiliser le même logiciel pour le TOTP et les mots de passe !**</p>

![](http://192.168.1.43:1313/images/Proxmox_secu/06.png)[![06.png](https://doc.ataxya.net/uploads/images/gallery/2021-12/scaled-1680-/06.png)](https://doc.ataxya.net/uploads/images/gallery/2021-12/06.png)

Ouvrir Bitwarden sur votre téléphone

Créer un nouvel élément de type identifiant

- Nom pour Bitwarden
- Nom d’utilisateur
- Le mot de passe de l’utilisateur (facultatif)
- Clé authentification (TOTP) : prenez en photo le QR code généré et cela remplira la ligne

![](http://192.168.1.43:1313/images/Proxmox_secu/07.png)[![07.png](https://doc.ataxya.net/uploads/images/gallery/2021-12/scaled-1680-/07.png)](https://doc.ataxya.net/uploads/images/gallery/2021-12/07.png)

Sauvegarder identifiant créé et ensuite, ouvrez-le. Vous verrez un code généré avec un temps avant la génération d’un nouveau code (30 secondes).

[![08.png](https://doc.ataxya.net/uploads/images/gallery/2021-12/scaled-1680-/08.png)](https://doc.ataxya.net/uploads/images/gallery/2021-12/08.png)

![](http://192.168.1.43:1313/images/Proxmox_secu/08.png)Rentrer le code dans la boite de dialogue de création de compte TOTP de Proxmox pour activer le TOTP du compte.

[![09.png](https://doc.ataxya.net/uploads/images/gallery/2021-12/scaled-1680-/09.png)](https://doc.ataxya.net/uploads/images/gallery/2021-12/09.png)

[![10.png](https://doc.ataxya.net/uploads/images/gallery/2021-12/scaled-1680-/10.png)](https://doc.ataxya.net/uploads/images/gallery/2021-12/10.png)

[![11.png](https://doc.ataxya.net/uploads/images/gallery/2021-12/scaled-1680-/11.png)](https://doc.ataxya.net/uploads/images/gallery/2021-12/11.png)

# Cloud-Init

Cet article est à vocation d'initiation et donne les pistes pour démarrer. Je vais me consacrer sur l'utilisation de Cloud-Init dans Proxmox et non un tuto sur Cloud-Init qui est à lui seul un sujet à part entière. La chaine [Youtube](https://www.youtube.com/c/NilsRatusznik) et [Twitch](https://www.twitch.tv/ahp_nils) de [@AHP\_Nils](https://twitter.com/AHP_Nils) traite de ce sujet au moment de la rédaction de cet article.

<iframe height="314" src="https://www.youtube.com/embed/sSuVybJXkr4" width="560"></iframe>

## Cloud-Init

[Cloud-Init](https://cloud-init.io) est un projet développé par [Canonical](https://canonical.com) pour Ubuntu datant de 2010 sous les licences [Apache 2.0 et GPLv3](https://github.com/canonical/cloud-init/blob/main/LICENSE).

Pour utiliser Cloud-Init, on utilise un fichier formaté en YAML. Ce fichier permet de définir plusieurs paramètres basiques à des tâches post-lancement de la machine virtuelle. Exemples de ce que l'on peut configurer :

- Configuration du réseau
- Nom de la machine virtuelle
- Clefs ssh autorisées
- Utilisateurs
- Installer des paquets
- Configurer sudo
- Mise à jour
- Redimensionner des partitions

Au fil des années, Cloud-Init est devenu un standard d'initialisation des machines virtuelles que l'on retrouve chez les fournisseurs de cloud publics :

- AWS
- Azure
- [OVHcloud](https://www.ovhcloud.com)
- [Scaleway](https://www.scaleway.com)
- Digital Ocean
- [Joyent/SmartOS](https://doc.ataxya.net/Joyent/SmartOS)
- OpenNebula
- etc.

Mais aussi disponible sur des offres de cloud privé :

- [KVM](https://www.linux-kvm.org)
- [LXD](https://linuxcontainers.org/lxd/)
- OpenStack
- MASS de Canonical
- VMware

Cloud-Init est disponible pour différents systèmes d'exploitation :

- Alpine Linux
- ArchLinux
- [Debian](https://cloud.debian.org/images/cloud/)
- DragonFlyBSD
- Fedora
- FreeBSD
- Gentoo Linux
- NetBSD
- OpenBSD
- openEuler
- RHEL/CentOS/AlmaLinux/Rocky/PhotonOS/Virtuozzo/EuroLinux/CloudLinux/MIRACLE LINUX
- SLES/openSUSE
- [Ubuntu](https://cloud-images.ubuntu.com)

Les distributions Linux proposent généralement des images de déploiement pour les différents cloud avec Cloud-Init intégré. Concernant la famille des BSD, elles sont toutes trouvables sur le site [bsd-cloud-image.org](https://bsd-cloud-image.org).

## Intégration de Cloud-Init dans Proxmox

Je vais faire rapide, Cloud-Init est intégralement supporté.

Pour utiliser basiquement Cloud-Init, il faut rattacher à la machine virtuelle un volume supplémentaire comme pour le cas d'UEFI (soupir).

(et l'utilisation d'un fichier de configuration au format YAML sera à indiquer en ligne de commande)

### Template

On va créer un template a base d'une image Debian dédiée au cloud.

```shell
wget https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-genericcloud-amd64.qcow2
```

Ensuite, il faut importer le fichier récupéré pour que Proxmox sache le gérer et en faire un template. Mon proxmox est configuré avec des volumes LVM dont le point de montage est le nom par défaut : local-lvm

Création d'une machine virtuelle :

```shell
qm create 9000 --name debian-11-genericcloud-template --memory 1024 --net0 virtio,bridge=vmbr0 --sockets 1 --cpu cputype=kvm64
```

Cloud-Init demande l'utilisation d'une console série :

```shell
qm set 9000 --serial0 socket --vga serial0
```

On importe le fichier .qcow2 pour en faire un disque :

```shell
qm importdisk 9000 debian-11-genericcloud-amd64.qcow2 local-lvm
```

On attache le disque à la machine virtuelle :

```shell
qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-0
qm set 9000 --boot c --bootdisk scsi0
```

Si vous désirez agrandir la taille du disque, par défaut, elle est de 2G pour l'image que j'ai récupérée. On augmente de 18G donc cela fera un disque de 20G :

```shell
qm resize 9000 scsi0 +20G
```

On ajoute le volume dédié à Cloud-Init :

```shell
qm set 9000 --ide2 local-lvm:cloudinit
```

Création du template :

```shell
qm template 9000
```

Le template Debian est terminé.

### Création d'une machine virtuelle

On clone le template :

```shell
qm clone 9000 100 --name deb-cloud-init-test
```

#### Méthode Proxmox

On configure l'IP de la machine virtuelle :

DHCP :

```shell
qm set 100 --ipconfig0 ip=dhcp
```

IP fixe :

```shell
qm set 100 --ipconfig0 ip=192.168.1.100/24,gw=192.168.1.1
qm set 100 --ipconfig0 ip6=fd2c:06d1:651e:b83e::2/64,gw6=fd2c:06d1:651e:b83e::1
```

DNS :

```shell
qm set 100 --nameserver 192.168.1.1
```

Utilisateur :

```shell
qm set 100 -ciuser nidouille
```

Clefs SSH :

```shell
qm set 100 --sshkey ~/.ssh/id_rsa.pub
```

#### Méthode fichier en YAML

Cette méthode n'est pas très explicite dans Proxmox, la documentation dit que le fichier doit être dans le répertoire snippets sans en indiquer son emplacement. Car par défaut, ce répertoire n'existe pas !

Les fichiers Cloud-Init sont ici dans l'arborescence système : **/var/lib/vz/snippets/user-data.yaml**

```shell
qm set 100 --cicustom "user=local:snippets/userconfig.yaml"
```

Il est aussi possible d'indiquer un point de montage réseau pour récupérer le fichier. Je ne l'ai pas testé et pour cela, c'est un renvoi sur un sujet du forum de Proxmox : [cloud-init and cicustom](https://forum.proxmox.com/threads/cloud-init-and-cicustom.58959/)

```shell
--cicustom "user=<volume>,network=<volume>,meta=<volume>"
```

Fichier basique pour mon home-lab :

```yaml
#cloud-config

#Mise a jour de l'os
package_update: true
package_upgrade: true

#Installation de paquet
packages:
  - qemu-guest-agent
  - apt-transport-https
  - curl
  - ufw

#Ajout d'un utilisateur
users:
    - default
    - name: nidouille
      groups: [ sudo ]
      shell: /bin/bash
      homedir: /home/nidouille
      sudo: ['ALL=(ALL) NOPASSWD:ALL']
      ssh_authorized_keys: #Clefs ssh publiques

runcmd:
  - curl https://repository.rudder.io/tools/rudder-setup | bash -s setup-agent 7.0 [policy server hostname or ip]
  - wget https://repo.zabbix.com/zabbix/5.4/debian/pool/main/z/zabbix-release/zabbix-release_5.4-1+debian11_all.deb
  - apt update
  - apt install zabbix-agent -y
```

## Bibliographie

Documentation officielle :

[https://pve.proxmox.com/wiki/Cloud-Init\_Support](https://pve.proxmox.com/wiki/Cloud-Init_Support)

[https://pve.proxmox.com/pve-docs/qm.1.html](https://pve.proxmox.com/pve-docs/qm.1.html)

[https://github.com/proxmox/pve-docs/blob/master/qm-cloud-init.adoc](https://github.com/proxmox/pve-docs/blob/master/qm-cloud-init.adoc)

Forum Proxmox :

[https://forum.proxmox.com/threads/cloud-init-and-cicustom.58959/](https://forum.proxmox.com/threads/cloud-init-and-cicustom.58959/)

Articles divers :

[https://www.nextinpact.com/article/48588/cloud-init-a-decouverte-standard-post-installation-sous-linux](https://www.nextinpact.com/article/48588/cloud-init-a-decouverte-standard-post-installation-sous-linux)