<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Kimsufi on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/kimsufi/</link><description>Recent content in Kimsufi on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Sun, 30 Mar 2025 12:30:00 +0200</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/kimsufi/index.xml" rel="self" type="application/rss+xml"/><item><title>Tutoriel Proxmox VE 8 - SDN en mode VXLAN avec des machines sur Internet</title><link>https://blog.zwindler.fr/2025/03/30/tutoriel-sdn-vxlan-proxmoxve-8/</link><pubDate>Sun, 30 Mar 2025 12:30:00 +0200</pubDate><guid>https://blog.zwindler.fr/2025/03/30/tutoriel-sdn-vxlan-proxmoxve-8/</guid><description>&lt;img src="https://blog.zwindler.fr/2025/03/vxlan2.webp" alt="Featured image of post Tutoriel Proxmox VE 8 - SDN en mode VXLAN avec des machines sur Internet" /&gt;&lt;h2 id="préambule"&gt;Préambule
&lt;/h2&gt;&lt;p&gt;Ce tutoriel est un genre de &lt;em&gt;hors série&lt;/em&gt; dans ma suite d&amp;rsquo;articles sur Proxmox VE 8.&lt;/p&gt;
&lt;p&gt;Dans la &lt;a class="link" href="https://blog.zwindler.fr/2025/03/25/deploiement-d-un-cluster-proxmox-ve-8-part-3/" &gt;troisième partie qui est sortie il y a quelques jours&lt;/a&gt;, on s&amp;rsquo;est arrêté sur un cluster de machines distantes sur Internet.&lt;/p&gt;
&lt;p&gt;Elles ne sont pas dans le même LAN, et pour tout dire, elles sont même distantes d&amp;rsquo;environ 100ms (et ça marche très bien).&lt;/p&gt;
&lt;p&gt;A la fin de l&amp;rsquo;article, ça fonctionne, on a bien un réseau unique sur nos deux machines, avec un IPAM et un DHCP fonctionnel des deux côtés. Mais pour autant, les machines virtuelles qui sont sur des hôtes différents ne peuvent pas se parler directement et c&amp;rsquo;est quand même un peu dommage de ne pas avoir été au bout de l&amp;rsquo;exercice.&lt;/p&gt;
&lt;p&gt;Plutôt que de réécrire cette partie, j&amp;rsquo;ai décidé de faire un petit aparté où je termine le travaille et teste la fonction VXLAN du SDN de proxmox VE, parce que OUI, ça peut fonctionner jusqu&amp;rsquo;au bout.&lt;/p&gt;
&lt;h2 id="prérequis"&gt;Prérequis
&lt;/h2&gt;&lt;p&gt;Je pars du principe que vous avez déjà deux (ou plus) machines au sein d&amp;rsquo;un même cluster Proxmox VE 8.&lt;/p&gt;
&lt;p&gt;Si ce n&amp;rsquo;est pas le cas, vous êtes partis pour la lecture de ma suite d&amp;rsquo;articles (en cours d&amp;rsquo;écriture) sur le sujet (have fun!) :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2025/01/27/deploiement-d-un-cluster-proxmox-ve-8-part-1" &gt;Déploiement d&amp;rsquo;un cluster Proxmox VE 8 sur des serveurs dédiés (1/4)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ces machines ne sont pas dans le même LAN (sinon pas forcément besoin de s&amp;rsquo;embêter avec du VXLAN, le &lt;a class="link" href="https://blog.zwindler.fr/2025/03/25/deploiement-d-un-cluster-proxmox-ve-8-part-3/" &gt;SDN Simple peut suffire, comme on a fait dans la partie 3&lt;/a&gt;)&lt;/p&gt;
&lt;h2 id="problème"&gt;Problème
&lt;/h2&gt;&lt;p&gt;Ce qu&amp;rsquo;on veut faire, c&amp;rsquo;est créer un SDN qui passe par Internet, au point que les machines virtuelles croient être sur le même LAN.&lt;/p&gt;
&lt;p&gt;On ne peut pas faire ça avec le SDN Simple, les VMs d&amp;rsquo;un hôte ne peuvent pas contacter les VMs d&amp;rsquo;un autre hôte distant sur Internet, même en étant dans le même SDN Simple et avec le même plan d&amp;rsquo;adressage.&lt;/p&gt;
&lt;p&gt;Mais si on lit un peu plus loin dans la &lt;a class="link" href="https://pve.proxmox.com/pve-docs/chapter-pvesdn.html" target="_blank" rel="noopener"
&gt;doc de PVE sur le SDN&lt;/a&gt;, on voit que c&amp;rsquo;est précisément le usecase mis en avant pour l&amp;rsquo;utilisation des SDN de type VXLAN :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The VXLAN plugin establishes a tunnel (overlay) on top of an existing network (underlay). This encapsulates layer 2 Ethernet frames within layer 4 UDP datagrams&amp;hellip;
[&amp;hellip;]
You can, for example, create a VXLAN overlay network on top of public internet, appearing to the VMs as if they share the same local Layer 2 network&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Petit souci cependant, en vrai, il ne vaut mieux pas le faire, car les trames ne sont pas chiffrées, et sur Internet, ce n&amp;rsquo;est vraiment pas la meilleure idée du monde&amp;hellip;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Warning VXLAN on its own does does not provide any encryption. When joining multiple sites via VXLAN, make sure to establish a secure connection between the site, for example by using a site-to-site VPN.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;En alternative, on aurait pu partir directement sur la version la plus complète / complexe du SDN de Proxmox VE : les &lt;strong&gt;EVPN Zones&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The EVPN zone creates a routable Layer 3 network, capable of spanning across multiple clusters. This is achieved by establishing a VPN and utilizing BGP as the routing protocol.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mais je n&amp;rsquo;ai pas envie de tremper avec BGP ici et je veux rester sur un truc simple. Cependant, c&amp;rsquo;est probablement l&amp;rsquo;option la plus &amp;ldquo;propre&amp;rdquo; pour un setup de production.&lt;/p&gt;
&lt;h2 id="vxlan-donc-mais-avec-un-vpn"&gt;VXLAN donc, mais avec un VPN
&lt;/h2&gt;&lt;p&gt;Je ne vais pas me prendre la tête, on va monter un petit VPN avec wireguard à la mano. Il y a des tonnes d&amp;rsquo;outils de VPN sur le marché et des tonnes d&amp;rsquo;outils pour se faciliter la vie. Si vous voulez plus d&amp;rsquo;info sur Wireguard, je suis sûr que vous en trouverez plein, je mets juste ici le strict minimum pour que ça &amp;ldquo;juste marche&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Sur les deux serveurs, installez wireguard, qui devraient être dans les dépôts debian par défaut :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt install -y wireguard
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Générez un couple de clé &lt;strong&gt;sur chaque machine&lt;/strong&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wg genkey &lt;span class="p"&gt;|&lt;/span&gt; tee privatekey &lt;span class="p"&gt;|&lt;/span&gt; wg pubkey &amp;gt; publickey
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Petite gymnastique mentale, on va écrire un fichier de configuration avec pour chaque serveur, la clé privée du serveur (fichier &lt;code&gt;privatekey&lt;/code&gt;) sur lequel on est, mais la clé publique (fichier &lt;code&gt;publickey&lt;/code&gt;) &lt;strong&gt;du serveur distant&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;(Quand on y réfléchit, c&amp;rsquo;est évidement, mais je préfère insister)&lt;/p&gt;
&lt;p&gt;Et il faut évidemment changer les adresses et les interfaces réseaux en fonction du serveur sur lequel on est de manière à ne pas avoir de conflit.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vi /etc/wireguard/wg0.conf
[Interface]
Address = 10.10.30.1/24
ListenPort = 51820
PrivateKey = &amp;lt;clé privée du serveur local&amp;gt;
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o &amp;lt;nom d&amp;#39;interface réseau&amp;gt; -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o &amp;lt;nom d&amp;#39;interface réseau&amp;gt; -j MASQUERADE
[Peer]
PublicKey = &amp;lt;clé publique du serveur distant&amp;gt;
Endpoint = &amp;lt;IP publique du serveur distant&amp;gt;:51820
AllowedIPs = 10.10.30.2/32
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Note : vous pouvez aussi ajouter plus de nodes dans le VPN, il suffit d&amp;rsquo;ajouter plus de &amp;ldquo;Peer&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;On termine en démarrant le VPN et en vérifiant que les nodes se parlent entre eux :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; wg-quick@wg0 --now
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ping 10.10.30.1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ping 10.10.30.2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="configuration-du-sdn"&gt;Configuration du SDN
&lt;/h2&gt;&lt;p&gt;Normalement, si vous avez suivi les articles précédents, vous avez déjà les prérequis, mais pour ceux qui ne l&amp;rsquo;auraient pas fait, je remets que dans le fichier /etc/network/interfaces, il est nécessaire d&amp;rsquo;ajouter en fin de fichier la ligne suivante (suivi d&amp;rsquo;un petit &lt;code&gt;systemctl restart networking&lt;/code&gt;)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;source /etc/network/interfaces.d/*
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ensuite, dans le menu Datacenter, ouvrir le sous menu SDN.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/03/sdn1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Dans le menu SDN/Zones, ajouter une zone de type &amp;ldquo;VXLan&amp;rdquo;. Deux points importants ici :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;on doit renseigner la liste de tous les &amp;ldquo;peers&amp;rdquo;, ici les IPs de nos VPNs donc 10.10.30.1 et 10.10.30.2&lt;/li&gt;
&lt;li&gt;on va devoir adapter la MTU. Par défaut, une trame, c&amp;rsquo;est 1500. Sauf que wireguard pour son encapsulation a diminué la MTU à 1420 et que l&amp;rsquo;encapsulation VXLAN en prend 50. On doit donc mettre 1370 pour éviter au mieux de la fragmentation, au pire, des paquets dropés&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/03/vxlan2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Si vous venez de lire l&amp;rsquo;article précédent, vous allez remarquer qu&amp;rsquo;ici, il n&amp;rsquo;y a pas de &amp;ldquo;coche&amp;rdquo; pour activer le DHCP sur la zone. C&amp;rsquo;est malheureusement parce que ce n&amp;rsquo;est pas disponible pour l&amp;rsquo;instant.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Currently only Simple Zones have support for automatic DHCP&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Source : &lt;a class="link" href="https://pve.proxmox.com/pve-docs/chapter-pvesdn.html#pvesdn_config_dhcp" target="_blank" rel="noopener"
&gt;pve.proxmox.com/pve-docs/chapter-pvesdn.html#pvesdn_config_dhcp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/hulk_sad.gif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Une fois que vous avez validé, allez dans le sous menu SDN/VNets, cliquez sur le bouton &amp;ldquo;Create&amp;rdquo; pour créer un réseau virtuel, puis le sélectionner une fois créé pour créer un sous réseau.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/03/vxlan4.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/03/vxlan5.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Une fois de plus, n&amp;rsquo;oubliez d&amp;rsquo;aller voir la partie DHCP, pour déclarer le range pour notre futur DHCP.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/03/vxlan6.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Une fois qu&amp;rsquo;on a bien tout validé, on voit qu&amp;rsquo;à côté de toutes ces nouvelles choses qu&amp;rsquo;on vient de créer, il y a une icône avec deux flèches jaunes et un statut à &amp;ldquo;New&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Pour déployer ces modifications, on doit retourner dans le menu SDN du début, et cliquer sur Apply. Deux lignes &amp;ldquo;vxlan1&amp;rdquo; (une pour chaque serveur, en vrai) devraient apparaitre.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/03/vxlan7.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="cest-tout-"&gt;C&amp;rsquo;est tout ?
&lt;/h2&gt;&lt;p&gt;Et oui, c&amp;rsquo;est tout, franchement, j&amp;rsquo;aurai vraiment dû insister un peu avant de poster mon article précédent&amp;hellip;&lt;/p&gt;
&lt;p&gt;Pour s&amp;rsquo;en convaincre, il suffit de pop deux containers LXC (sans DHCP 🥲), un sur chaque serveur, et de voir s&amp;rsquo;ils se pingent.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/03/vxlan-test.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;It works!&lt;/p&gt;
&lt;p&gt;Bon, ben&amp;hellip; il ne me reste plus qu&amp;rsquo;à migrer toutes mes machines existantes sur le vnet VXLAN pour avoir enfin un cluster où les VMs se voient entre elles !!&lt;/p&gt;</description></item><item><title>Déploiement d'un cluster Proxmox VE 8 sur des serveurs dédiés (3/4)</title><link>https://blog.zwindler.fr/2025/03/25/deploiement-d-un-cluster-proxmox-ve-8-part-3/</link><pubDate>Tue, 25 Mar 2025 12:30:00 +0200</pubDate><guid>https://blog.zwindler.fr/2025/03/25/deploiement-d-un-cluster-proxmox-ve-8-part-3/</guid><description>&lt;img src="https://blog.zwindler.fr/2025/03/sdn2.webp" alt="Featured image of post Déploiement d'un cluster Proxmox VE 8 sur des serveurs dédiés (3/4)" /&gt;&lt;p&gt;Note - cet article fait partie d&amp;rsquo;une suite d&amp;rsquo;articles :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2025/01/27/deploiement-d-un-cluster-proxmox-ve-8-part-1" &gt;Déploiement d&amp;rsquo;un cluster Proxmox VE 8 sur des serveurs dédiés (1/4)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2025/02/17/deploiement-d-un-cluster-proxmox-ve-8-part-2/" &gt;Déploiement d&amp;rsquo;un cluster Proxmox VE 8 sur des serveurs dédiés (2/4)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2025/03/25/deploiement-d-un-cluster-proxmox-ve-8-part-3/" &gt;Déploiement d&amp;rsquo;un cluster Proxmox VE 8 sur des serveurs dédiés (3/4)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2025/03/30/tutoriel-sdn-vxlan-proxmoxve-8/" target="_blank" rel="noopener"
&gt;Hors série - SDN en mode VXLAN avec des machines sur Internet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Et &lt;em&gt;au moins&lt;/em&gt; un autre à suivre&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="on-reprend-de-là-où-on-en-était--premiers-pas-dans-lui"&gt;On reprend de là où on en était : premiers pas dans l&amp;rsquo;UI
&lt;/h2&gt;&lt;p&gt;Dans le tutoriel précédent (que je vous invite à lire, si ça n&amp;rsquo;a pas été fait, sinon ça ne sera pas clair), on a configuré le stockage, le réseau et on a déployé notre première machine virtuelle pour nous assurer que tout fonctionne. Mais il reste encore pas mal de choses à explorer, notamment la mise en cluster, le SDN de proxmox VE, le firewall intégré, les sauvegardes, le monitoring&amp;hellip;&lt;/p&gt;
&lt;p&gt;On reprend donc de là où on en était, et on va installer un autre serveur (difficile de faire un cluster avec une seule machine).&lt;/p&gt;
&lt;p&gt;Ce serveur a été réinstallé avec les mêmes procédures que le serveur dont je vous parle dans les parties 1 et 2, à ceci près que nous n&amp;rsquo;avons pas besoin de créer le bridge (vmbr0) car nous allons utiliser le SDN !!&lt;/p&gt;
&lt;p&gt;Idéalement, il faut que toutes les machines du cluster aient les mêmes pools de storage puisque je le rappelle, cette configuration est censée être commune à tous les serveurs, car gérée au niveau &amp;ldquo;Datacenter&amp;rdquo; de notre cluster (même si on peut configurer des exceptions).&lt;/p&gt;
&lt;h2 id="création-du-cluster"&gt;Création du cluster
&lt;/h2&gt;&lt;p&gt;La mise en cluster de machines Proxmox VE est un sujet que j&amp;rsquo;ai abondamment traité sur le blog, au point qu&amp;rsquo;il est d&amp;rsquo;ailleurs surtout connu de certains d&amp;rsquo;entre vous surtout pour ces articles ;-) :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2019/07/22/proxmox-en-5-min-ansible-tinc/" &gt;Un cluster Proxmox VE en 5 minutes avec Ansible&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2019/08/20/cluster-proxmox-ve-v6-cette-fois-ci/" &gt;Cluster Proxmox VE, v6 cette fois-ci !&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2019/10/11/un-cluster-proxmox-ve-avec-seulement-2-machines/" &gt;Un cluster Proxmox VE avec seulement 2 machines !&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2017/09/19/tutoriel-demonter-proprement-cluster-proxmox-ve/" &gt;[Tutoriel] Démonter proprement un cluster Proxmox VE&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Je ne vais donc pas y passer trop de temps. Sachez juste que :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;c&amp;rsquo;est plus facile à faire depuis la version 6 parce qu&amp;rsquo;il n&amp;rsquo;y a plus besoin de monter un VPN entre les serveurs (corosync v3)&lt;/li&gt;
&lt;li&gt;ça peut se faire en ligne de commande&lt;/li&gt;
&lt;li&gt;dans tous les cas, il faut se loguer en root &lt;strong&gt;avec mot de passe&lt;/strong&gt; lors de la mise en cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Très brièvement donc, on va sur le premier serveur, dans la &lt;strong&gt;Server View&lt;/strong&gt; en haut à gauche, on sélectionne notre &lt;strong&gt;Datacenter&lt;/strong&gt;, puis dans le menu &lt;strong&gt;Cluster&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/create-cluster-1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On clique sur le bouton &lt;strong&gt;Create Cluster&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/create-cluster-2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Note : ici, c&amp;rsquo;est simple, je n&amp;rsquo;ai que ma carte réseau, donc il n&amp;rsquo;y a pas de doute sur l&amp;rsquo;interface à utiliser. Cependant, dans le cas d&amp;rsquo;un serveur avec plus d&amp;rsquo;interfaces et plus de bridges (ou des VPNs comme on a dû le faire jusqu&amp;rsquo;en PVE 6), il faut bien choisir quelle interface sert au clustering.&lt;/p&gt;
&lt;p&gt;On valide le formulaire :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/create-cluster-3.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;À partir de ce moment-là, le serveur n&amp;rsquo;est plus en &amp;ldquo;standalone&amp;rdquo; et dispose de services systemd supplémentaires.&lt;/p&gt;
&lt;p&gt;On a notamment un dossier /etc/pve qui est synchronisé entre tous les nodes (el famoso &lt;a class="link" href="https://pve.proxmox.com/wiki/Proxmox_Cluster_File_System_%28pmxcfs%29" target="_blank" rel="noopener"
&gt;Proxmox Cluster File System&lt;/a&gt;) avec la configuration de chaque node et les fichiers de configuration des machines virtuelles. On a aussi le logiciel corosync, qui va régulièrement contacter tous les nodes du cluster pour s&amp;rsquo;assurer que tout le monde est bien vivant / accessible.&lt;/p&gt;
&lt;h2 id="rejoindre-le-cluster"&gt;Rejoindre le cluster
&lt;/h2&gt;&lt;p&gt;Si on retourne voir le menu &amp;ldquo;Cluster&amp;rdquo;, on a maintenant des informations qui s&amp;rsquo;affichent sur notre cluster, à savoir son nombre de nœuds (ici un seul, normal). Cliquer sur le bouton &lt;strong&gt;Join information&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Une popup s&amp;rsquo;ouvre avec plusieurs informations à copier-coller qui nous seront demandées dans le menu de l&amp;rsquo;autre serveur, celui qui va rejoindre le cluster :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/create-cluster-4.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On se connecte donc sur l&amp;rsquo;interface graphique de notre second serveur Proxmox VE (mon Atom dans l&amp;rsquo;exemple), on va dans le même menu, mais au lieu de créer un nouveau cluster, on clique sur le bouton &lt;strong&gt;Join Cluster&lt;/strong&gt; :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/03/join-cluster.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Petit coup de flip normalement, une fois que le node va rejoindre le cluster, vous allez perdre la main sur l&amp;rsquo;interface web et avoir un message d&amp;rsquo;erreur &amp;ldquo;401&amp;rdquo;. C&amp;rsquo;est &amp;ldquo;normal&amp;rdquo;, quand le serveur rentre dans le cluster, des services sont redémarrés et on passe d&amp;rsquo;un mode standalone à un mode clusterisé&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/03/join-cluster2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Pas de panique, un F5 devrait résoudre l&amp;rsquo;affaire (ou alors, connectez-vous au &amp;ldquo;premier&amp;rdquo; serveur du cluster).&lt;/p&gt;
&lt;p&gt;On a maintenant un beau cluster :)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/03/pve-cluster.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="split-brain"&gt;Split brain
&lt;/h2&gt;&lt;p&gt;Notez par contre que dans mon exemple, on n&amp;rsquo;a que 2 nodes, ce qui est plus que déconseillé quand on fait un cluster Linux (en vrai, un cluster en général). Si jamais le lien réseau tombe entre nos deux machines, elles n&amp;rsquo;auront aucun moyen de savoir si c&amp;rsquo;est un problème réseau (&lt;em&gt;que se apelerio split brain&lt;/em&gt;) ou une panne d&amp;rsquo;un des nodes.&lt;/p&gt;
&lt;p&gt;Pour éviter de tout péter en redémarrant des VMs des deux côtés (le cas le plus catastrophique dans un split brain), lorsque le quorum ne sera plus atteint, Proxmox VE passe les nodes qui n&amp;rsquo;ont pas de majorité en (quasi) &amp;ldquo;lecture seule&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Et au cas où ce n&amp;rsquo;est pas clair, le quorum c&amp;rsquo;est la moitié des nodes +1, donc ici : 2/2+1 = 2&amp;hellip; donc dès qu&amp;rsquo;on a plus un des deux nodes, on a plus le quorum.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Simple, basique.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Du coup, si jamais on coupe un node ou la communication entre les deux, vos VMs encore actives continueront à fonctionner (j&amp;rsquo;ai débattu de ça sur LinkedIn il y a quelques jours).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Par contre&lt;/strong&gt;, il sera impossible de modifier la configuration du cluster, démarrer ou créer des VMs, etc.&lt;/p&gt;
&lt;p&gt;La seule chose qu&amp;rsquo;on peut éventuellement faire qui ne soit pas &amp;ldquo;read only&amp;rdquo;, c&amp;rsquo;est arrêter des VMs, car ça n&amp;rsquo;induit aucun risque pour la cohérence des données. Mais vous ne pourrez pas les rallumer, vous êtes prévenus&amp;hellip;&lt;/p&gt;
&lt;p&gt;Pour la petite histoire, le débat sur LinkedIn, c&amp;rsquo;était &amp;ldquo;est-ce que ProxmoxVE coupe toutes les VMs en cas de split brain&amp;rdquo; et la réponse est évidemment &lt;strong&gt;non&lt;/strong&gt;. Par contre, la plupart des actions sont bien bloquées.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/03/quorum-ko1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/03/quorum-ko2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dans tous les cas&lt;/strong&gt;, pour éviter ça, le mieux est d&amp;rsquo;avoir un nombre impair de nodes pour que le split brain ne puisse jamais arriver, ou éventuellement d&amp;rsquo;ajouter un vote complémentaire à l&amp;rsquo;aide d&amp;rsquo;une instance servant juste d&amp;rsquo;arbitre comme c&amp;rsquo;est expliqué dans mon vieil article de 2019 ou dans la doc officielle :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2019/10/11/un-cluster-proxmox-ve-avec-seulement-2-machines/" target="_blank" rel="noopener"
&gt;Un cluster Proxmox VE avec seulement 2 machines !&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://pve.proxmox.com/wiki/Cluster_Manager#_corosync_external_vote_support" target="_blank" rel="noopener"
&gt;Proxmox Wiki - Corosync External Vote Support&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="configuration-du-sdn"&gt;Configuration du SDN
&lt;/h2&gt;&lt;p&gt;Bon, c&amp;rsquo;est cool, on a un cluster de deux machines. Mais dans la configuration actuelle, la VM qu&amp;rsquo;on a créée dans la partie précédente ne peut pas migrer facilement d&amp;rsquo;un serveur à l&amp;rsquo;autre. En effet, on l&amp;rsquo;a attachée sur un bridge Linux (vmbr0) qui a son propre plan d&amp;rsquo;adressage réseau.&lt;/p&gt;
&lt;p&gt;En cas de migration, il faudrait potentiellement démarrer la machine, changer l&amp;rsquo;adresse IP, revoir les iptables / règles de firewalling. C&amp;rsquo;est ce que je faisais jusqu&amp;rsquo;à présent, et dans le cas d&amp;rsquo;un PRA pour une infra de lab et un blog perso, c&amp;rsquo;est &amp;ldquo;OK&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Une grosse nouveauté de la version 8.1, est l&amp;rsquo;activation d&amp;rsquo;un module &amp;ldquo;SDN&amp;rdquo; (Software Defined Network) qui est présent en test par les développeurs et quelques early adopters depuis la version 6.X, qui va nous permettre de gérer ça de manière centralisée depuis l&amp;rsquo;interface. Si vous voulez aller bouquiner la doc officielle, c&amp;rsquo;est ici :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://pve.proxmox.com/pve-docs/chapter-pvesdn.html" target="_blank" rel="noopener"
&gt;pve.proxmox.com/pve-docs/chapter-pvesdn.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le seul prérequis qui va nous manquer est dnsmasq pour le DHCP, et la doc nous dit de lancer les commandes suivantes sur nos machines :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt install dnsmasq
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# disable default instance&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl disable --now dnsmasq
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et dans le fichier /etc/network/interfaces, il est aussi nécessaire d&amp;rsquo;ajouter en fin de fichier la ligne (suivi d&amp;rsquo;un petit &lt;code&gt;systemctl restart networking&lt;/code&gt;)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;source /etc/network/interfaces.d/*
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Dans le menu Datacenter, ouvrir le sous menu SDN. On remarque qu&amp;rsquo;il existe déjà des SDNs de déclarés, mais il s&amp;rsquo;agit en fait des réseaux par défaut qu&amp;rsquo;on a déclaré dans les articles précédents :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/03/sdn1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Dans le menu SDN/Zones, ajouter une zone de type &amp;ldquo;Simple&amp;rdquo;. Il existe des zones plus complexes qui seront utiles dans des contextes de production avec des LANs non triviaux (VLAN, VXLan) mais dans notre cas, la Simple est suffisante.&lt;/p&gt;
&lt;p&gt;Note : ne pas oublier de cocher la case &lt;strong&gt;advanced&lt;/strong&gt; pour pouvoir activer le DHCP. &lt;strong&gt;OUI on va enfin avoir du DHCP pour nos machines virtuelles et nos containers&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/03/sdn2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Une fois que vous avez validé, allez dans le sous menu SDN/VNets, cliquez sur le bouton &amp;ldquo;Create&amp;rdquo; pour créer un réseau virtuel, puis le sélectionner une fois créé pour créer un sous réseau.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/03/sdn3.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/03/sdn4.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Une fois de plus, n&amp;rsquo;oubliez d&amp;rsquo;aller voir la partie DHCP, pour déclarer le range pour notre futur DHCP.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/03/sdn5.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Une fois qu&amp;rsquo;on a bien tout validé, on voit qu&amp;rsquo;à côté de toutes ces nouvelles choses qu&amp;rsquo;on vient de créer, il y a une icône avec deux flèches jaunes et un statut à &amp;ldquo;New&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/03/sdn6.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Pour déployer ces modifications, on doit retourner dans le menu SDN du début, et cliquer sur Apply. Deux lignes &amp;ldquo;sdn1&amp;rdquo; (une pour chaque serveur, en vrai) devraient apparaitre.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/03/sdn7.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Fait rigolo, le SDN de Proxmox VE va rajouter des règles iptables qui devraient vous dire quelque chose si vous avez déroulé les précédents articles :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;#version:5
auto vnet1
iface vnet1
address 10.10.20.1/24
post-up iptables -t nat -A POSTROUTING -s &amp;#39;10.10.20.0/24&amp;#39; -o vmbr0 -j SNAT --to-source 203.0.113.1
post-down iptables -t nat -D POSTROUTING -s &amp;#39;10.10.20.0/24&amp;#39; -o vmbr0 -j SNAT --to-source 203.0.113.1
post-up iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1
bridge_ports none
bridge_stp off
bridge_fd 0
ip-forward on
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Et si maintenant, je recrée une autre machine virtuelle, mais que cette fois-ci au lieu de &lt;strong&gt;vmbr0&lt;/strong&gt;, je choisis &lt;strong&gt;vnet1&lt;/strong&gt;, je n&amp;rsquo;ai pas besoin de saisir l&amp;rsquo;adresse IP (puisque j&amp;rsquo;ai le SDN qui sert le DHCP) et elle a accès à Internet sans configuration supplémentaire.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/03/sdn8.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/03/sdn9.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Avec cette configuration cependant (SDN en mode &lt;strong&gt;Simple Zone&lt;/strong&gt;), il ne sera toujours pas possible de faire communiquer les machines virtuelles entre elles. Ça sera possible avec des configurations plus complexes :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You can, for example, create a VXLAN overlay network on top of public internet, appearing to the VMs as if they share the same local Layer 2 network&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://pve.proxmox.com/pve-docs/chapter-pvesdn.html#pvesdn_zone_plugin_vxlan" target="_blank" rel="noopener"
&gt;VXLan Zones&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://pve.proxmox.com/pve-docs/chapter-pvesdn.html#pvesdn_zone_plugin_evpn" target="_blank" rel="noopener"
&gt;EVPN Zones&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note : j&amp;rsquo;ai exploré les VXLAN depuis, et &lt;a class="link" href="https://blog.zwindler.fr/2025/03/30/tutoriel-sdn-vxlan-proxmoxve-8" &gt;j&amp;rsquo;ai écrit un article complémentaire ici&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;Je n&amp;rsquo;ai toujours pas terminé cette série, car j&amp;rsquo;ai encore des choses à dire sur la réplication SDN et le firewalling de Proxmox VE, les sauvegardes, le monitoring, mais une fois de plus, je dépasse déjà les 12000 signes. Il est donc temps de publier l&amp;rsquo;article et de commencer à écrire le suivant.&lt;/p&gt;
&lt;p&gt;Et en attendant, have fun :)&lt;/p&gt;</description></item><item><title>Déploiement d'un cluster Proxmox VE 8 sur des serveurs dédiés (2/3)</title><link>https://blog.zwindler.fr/2025/02/17/deploiement-d-un-cluster-proxmox-ve-8-part-2/</link><pubDate>Mon, 17 Feb 2025 10:30:00 +0200</pubDate><guid>https://blog.zwindler.fr/2025/02/17/deploiement-d-un-cluster-proxmox-ve-8-part-2/</guid><description>&lt;img src="https://blog.zwindler.fr/2025/02/proxmox8.webp" alt="Featured image of post Déploiement d'un cluster Proxmox VE 8 sur des serveurs dédiés (2/3)" /&gt;&lt;p&gt;Note - cet article fait partie d&amp;rsquo;une suite d&amp;rsquo;articles :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2025/01/27/deploiement-d-un-cluster-proxmox-ve-8-part-1" &gt;Déploiement d&amp;rsquo;un cluster Proxmox VE 8 sur des serveurs dédiés (1/4)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2025/02/17/deploiement-d-un-cluster-proxmox-ve-8-part-2/" &gt;Déploiement d&amp;rsquo;un cluster Proxmox VE 8 sur des serveurs dédiés (2/4)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2025/03/25/deploiement-d-un-cluster-proxmox-ve-8-part-3/" &gt;Déploiement d&amp;rsquo;un cluster Proxmox VE 8 sur des serveurs dédiés (3/4)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2025/03/30/tutoriel-sdn-vxlan-proxmoxve-8/" target="_blank" rel="noopener"
&gt;Hors série - SDN en mode VXLAN avec des machines sur Internet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Et &lt;em&gt;au moins&lt;/em&gt; un autre à suivre&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="on-reprend-de-là-où-on-en-était--premiers-pas-dans-lui"&gt;On reprend de là où on en était : premiers pas dans l&amp;rsquo;UI
&lt;/h2&gt;&lt;p&gt;Dans le tutoriel précédent (que je vous invite à lire, si ça n&amp;rsquo;a pas été fait, sinon ça ne sera pas clair), on a choisi un serveur physique dédié chez un provider type OVHCloud ou Hetzner. On a ensuite installé Proxmox VE dans la dernière version (8.x), configuré quelques options de sécurité de base, ajouté des utilisateurs et des groupes.&lt;/p&gt;
&lt;p&gt;On peut maintenant essayer de se connecter à l&amp;rsquo;UI. La première chose qui devrait vous frapper (💥 aïe !) c&amp;rsquo;est que la page d&amp;rsquo;administration est en HTTPS avec un certificat autosigné. On va commencer par régler ça.&lt;/p&gt;
&lt;p&gt;Un truc assez frustrant avec Proxmox VE (mais c&amp;rsquo;est probablement pour de &amp;ldquo;bonnes raisons&amp;rdquo; que j&amp;rsquo;ignore) c&amp;rsquo;est que certaines opérations ne sont pas possibles à réaliser dans l&amp;rsquo;UI si vous vous connectez avec le compte admin zwindler@pve que nous avons créé dans le blog post précédent.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est typiquement vrai pour les mises à jour, la mise en cluster et la configuration et&amp;hellip; pour &lt;strong&gt;la configuration des certificats&lt;/strong&gt; (liste non exhaustive). Ici, on va donc devoir pour l&amp;rsquo;instant se connecter en root@pam et non pas en zwindler@pve&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/auth-pam.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Notez bien qu&amp;rsquo;il y a (pour l&amp;rsquo;instant) 2 &amp;ldquo;realms&amp;rdquo;, Linux PAM (pour root) et Proxmox VE Auth (pour l&amp;rsquo;admin).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/auth-pve.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Dans la barre de droite, on retrouve notre serveur, qui est pour l&amp;rsquo;instant tout seul dans son datacenter (on y reviendra plus tard). Il y a plusieurs vues dans l&amp;rsquo;UI de Proxmox VE, certaines choses sont difficiles à trouver quand on n&amp;rsquo;a pas ça en tête. Ici, je suis dans la &amp;ldquo;server view&amp;rdquo;, probablement la plus classique si vous venez du monde VMware. Dans ce menu, vous trouverez vos hyperviseurs et on pourra interagir avec chacun d&amp;rsquo;entre eux, comment ils sont configurés.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/pve-first-login.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Une fois notre serveur sélectionné, on a donc le menu principal qui affiche de nombreux menus. Sélectionner &lt;strong&gt;System / Certificates&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/pve-certs-01.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On a de la chance, Proxmox VE est livré avec un module pour commander tout seul des certificats &lt;a class="link" href="https://letsencrypt.org/fr/" target="_blank" rel="noopener"
&gt;Let&amp;rsquo;s encrypt&lt;/a&gt;. Si vous avez votre propre certificat ça fonctionne aussi (bouton &lt;strong&gt;Upload Custom Certificate&lt;/strong&gt;), bien entendu, mais je vais partir du principe que vous n&amp;rsquo;en avez pas, comme moi.&lt;/p&gt;
&lt;p&gt;Dans la partie ACME, cliquer sur &lt;strong&gt;Add ACME Account&lt;/strong&gt; pour enregistrer votre email et accepter les Terms Of Service (TOS) de Let&amp;rsquo;s Encrypt.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/pve-certs-02.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;À partir de là, ajouter le FQDN de notre serveur en cliquant sur le bouton &lt;strong&gt;Add&lt;/strong&gt; sous ACME. Le bouton était grisé tant que nous n&amp;rsquo;avions pas ajouté de compte.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/pve-certs-03.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Maintenant, on peut enfin commander le certificat en cliquant sur &lt;strong&gt;Order Certificates Now&lt;/strong&gt;. Si tout se passe bien, le certificat sera correctement livré par Let&amp;rsquo;s Encrypt, et le serveur pve-proxy (qui sert le frontend de l&amp;rsquo;UI de Proxmox VE) devrait redémarrer, et votre page web se rafraîchir, avec un bon certificat cette fois-ci :).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/pve-certs-04.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="stockage--zfs"&gt;Stockage / ZFS
&lt;/h2&gt;&lt;p&gt;Si vous lisez souvent mon blog et que je vous dis que je suis un fan inconditionnel de ZFS, vous ne serez pas surpris.&lt;/p&gt;
&lt;p&gt;Et si vous avez bien lu l&amp;rsquo;article précédent, vous vous rappellerez que nous avons réduit la partition par défaut du template OVHcloud en LVM pour pouvoir faire une belle partition ZFS. Sauf que si on va dans la vue stockage, elle n&amp;rsquo;est malheureusement pas visible.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/hulk_sad.gif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Petite subtilité de l&amp;rsquo;UI, le menu pour ajouter du stockage se retrouve au niveau du Datacenter et non de la configuration du serveur lui-même. En théorie, la gestion du stockage doit être identique sur tous les serveurs d&amp;rsquo;un même DC dans Proxmox VE, même si on peut passer outre ce principe et mettre en place des exceptions depuis de nombreuses versions déjà.&lt;/p&gt;
&lt;p&gt;Dans &lt;strong&gt;Datacenter / Storage&lt;/strong&gt;, cliquez sur &lt;strong&gt;Add&lt;/strong&gt;, puis ZFS dans le menu déroulant qui s&amp;rsquo;affiche :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/storage-01.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/storage-02.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Sur les stockages de type ZFS, on ne peut stocker que les &amp;ldquo;Disk images&amp;rdquo; et les &amp;ldquo;Containers&amp;rdquo;, ce qui ne va pas nous arranger si nous voulons aussi stocker des ISOs, des templates ou des backups.&lt;/p&gt;
&lt;p&gt;On pourra se contenter de les stocker sur le stockage par défaut &amp;ldquo;local&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Mais on peut aussi &amp;ldquo;tricher&amp;rdquo; en se connectant sur le serveur en SSH, et en créant un dossier (/tank/data dans mon exemple), puis en créant un nouveau stockage de type Directory qui n&amp;rsquo;a pas de restriction sur les types de données.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/storage-03.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="parlons-un-peu-de-zfs"&gt;Parlons un peu de ZFS
&lt;/h2&gt;&lt;p&gt;Je me suis pris la tête un nombre incalculable de fois avec des gens qui persistent raconter n&amp;rsquo;importe quoi sur ZFS, même après leur avoir expliqué.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;C&amp;rsquo;est faux. Et archifaux. Euh&amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;non, il n&amp;rsquo;y a pas besoin d&amp;rsquo;avoir de la RAM ECC pour stocker des choses sur ZFS. D&amp;rsquo;abord, c&amp;rsquo;est une préconisation (un peu zélée probablement) faite par des gens qui ont conçu un filesystem extrêmement robuste. De très nombreuses prods fonctionnent avec ZFS sans RAM ECC. Ensuite, c&amp;rsquo;est surtout vrai si vous faites de la déduplication, car la perte d&amp;rsquo;un bloc peut avoir des conséquences catastrophiques dans ce genre de cas&amp;hellip;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;non, ZFS ne nécessite pas 1 Go de RAM par To de disque, là encore, c&amp;rsquo;est uniquement si vous activez la déduplication (pour stocker les tables de correspondance entre les hashes et les blocs).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En revanche, ce qui est exact, c&amp;rsquo;est que par défaut, ZFS va essayer d&amp;rsquo;utiliser 50% de la RAM disponible sur votre serveur et de s&amp;rsquo;en servir comme cache. Dans beaucoup de logiciels d&amp;rsquo;administration, y compris Proxmox VE, cette valeur va être beaucoup trop haute pour nous, car la RAM est une ressource précieuse sur un hyperviseur.&lt;/p&gt;
&lt;p&gt;Ça ne veut pas dire que cette fonctionnalité est inutile. Avoir du cache quand on a de la RAM qui ne sert à rien, c&amp;rsquo;est toujours bien. Donc, on va réduire cette valeur pour éviter des conflits de ressources entre l&amp;rsquo;optimisation des performances de notre stockage et la quantité de VMs qu&amp;rsquo;on peut héberger.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Restrict to 512MB&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="m"&gt;536870912&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; sudo tee -a /sys/module/zfs/parameters/zfs_arc_max
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Restrict to 4GB&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="m"&gt;4294967296&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; sudo tee -a /sys/module/zfs/parameters/zfs_arc_max
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note : cette commande sera à persister d&amp;rsquo;une manière ou d&amp;rsquo;une autre&lt;/p&gt;
&lt;h2 id="du-réseau"&gt;Du réseau
&lt;/h2&gt;&lt;p&gt;Bon&amp;hellip; j&amp;rsquo;ai essayé de repousser au maximum le moment où on arrive au réseau (parce que je déteste ça) mais à un moment, il va bien falloir s&amp;rsquo;y mettre&amp;hellip;&lt;/p&gt;
&lt;p&gt;Par défaut, notre serveur Proxmox VE est installé avec un bridge Linux qui va nous permettre de partager du réseau entre l&amp;rsquo;interface physique de notre serveur et nos machines virtuelles.&lt;/p&gt;
&lt;p&gt;Ce setup fonctionne bien sur votre réseau local avec un DHCP et votre propre LAN IPv4 local ou si vous disposez d&amp;rsquo;une plage d&amp;rsquo;IP (que ce soit v6 ou v4) et de quoi les affecter aux machines virtuelles.&lt;/p&gt;
&lt;p&gt;Malheureusement dans mon cas, je n&amp;rsquo;ai qu&amp;rsquo;une IPv4 (je pourrais activer l&amp;rsquo;IPv6 mais j&amp;rsquo;aurais d&amp;rsquo;autres problématiques et je préfère rester simple ici). Si je crée des VMs et que je les affecte sur le bridge, elles ne récupèreront pas d&amp;rsquo;IP et n&amp;rsquo;auront pas accès à Internet.&lt;/p&gt;
&lt;p&gt;Il existe plusieurs façons de connecter les machines virtuelles au réseau extérieur. Si vous avez du temps, je vous conseille de lire avec attention le Wiki de Proxmox VE qui a une très bonne page qui liste les différentes possibilités.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://pve.proxmox.com/wiki/Network_Configuration" target="_blank" rel="noopener"
&gt;pve.proxmox.com/wiki/Network_Configuration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dans les précédents articles sur &lt;a class="link" href="https://blog.zwindler.fr/2017/07/11/deploiment-de-proxmox-ve-5-sur-un-serveur-dedie-part-1" &gt;Proxmox VE 5&lt;/a&gt; puis &lt;a class="link" href="https://blog.zwindler.fr/2020/03/02/deploiement-de-proxmox-ve-6-pfsense-sur-un-serveur-dedie/" &gt;Proxmox VE 6&lt;/a&gt;, on avait fait des trucs compliqués à base de plusieurs bridges, de DMZ, de firewalling pfSense, et d&amp;rsquo;un script iptables de l&amp;rsquo;enfer.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_simple-infra-map.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Rien que d&amp;rsquo;y penser, je suis déjà épuisé.&lt;/p&gt;
&lt;p&gt;Heureusement, il existe depuis plusieurs versions déjà un firewall intégré à Proxmox VE, ainsi qu&amp;rsquo;un SDN que je n&amp;rsquo;ai jamais pris le temps de découvrir et je pense que c&amp;rsquo;est le bon tuto pour le faire :).&lt;/p&gt;
&lt;p&gt;On va donc se référer à la documentation officielle, et choisir le mode &amp;ldquo;Masquerading (NAT) with iptables&amp;rdquo;, mais avec un setup plus simple par rapport à précédemment.&lt;/p&gt;
&lt;h2 id="danger-zone"&gt;Danger zone
&lt;/h2&gt;&lt;p&gt;La configuration de l&amp;rsquo;interface réseau peut en théorie se faire directement depuis l&amp;rsquo;UI plutôt qu&amp;rsquo;en allant modifier les fichiers de configuration (/etc/network/interfaces). Dans la vue du serveur, allez dans le menu &lt;strong&gt;System / Network&lt;/strong&gt; :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/pve-network-1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Ici, on voit que je ne vous ai pas raconté de carabistouilles, et qu&amp;rsquo;on a bien un bridge avec notre interface physique (ici enp1s0).&lt;/p&gt;
&lt;p&gt;(On a même une plage IPv6, oh là là 🙈 je n&amp;rsquo;ai aucune excuse&amp;hellip; BREEEF, on va faire comme si on n&amp;rsquo;avait pas vu.)&lt;/p&gt;
&lt;p&gt;On arrive maintenant au moment rigolo où on peut se couper la chique assez facilement. Je l&amp;rsquo;ai fait assez souvent et passer en rescue&amp;hellip;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;fun fun fun fun&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;L&amp;rsquo;idée ici, c&amp;rsquo;est donc de retirer l&amp;rsquo;interface du bridge, de configurer le réseau directement dessus, et de donner un réseau local pour nos VMs sur le bridge, tout en ajoutant les règles iptables pour faire le masquerading.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/pve-network-2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/pve-network-3.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Tant qu&amp;rsquo;on ne cliquera pas sur le bouton &lt;strong&gt;Apply Configuration&lt;/strong&gt;, on ne &amp;ldquo;risque&amp;rdquo; rien.&lt;/p&gt;
&lt;p&gt;Le problème de l&amp;rsquo;UI est que nous n&amp;rsquo;allons pouvoir modifier QUE les IP, les gateway et les interfaces sur le bridge ou non. Sauf que pour réaliser le masquerading et que nos machines virtuelles accèdent à Internet, nous devons ajouter les fameuses règles iptables dont je vous parle juste avant et on ne peut pas le faire depuis l&amp;rsquo;UI.&lt;/p&gt;
&lt;p&gt;Il va falloir rajouter les cinq dernières lignes dans la configuration du vmbr0&amp;hellip;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat /etc/network/interfaces
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;...&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;auto vmbr0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;iface vmbr0 inet static
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; address 10.10.10.1/24
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; bridge-ports none
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; bridge-stp off
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; bridge-fd &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# à ajouter pour que le masquerading fonctionne&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; post-up &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &amp;gt; /proc/sys/net/ipv4/ip_forward
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; post-up iptables -t nat -A POSTROUTING -s &lt;span class="s1"&gt;&amp;#39;10.10.10.0/24&amp;#39;&lt;/span&gt; -o enp1s0 -j MASQUERADE
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; post-down iptables -t nat -D POSTROUTING -s &lt;span class="s1"&gt;&amp;#39;10.10.10.0/24&amp;#39;&lt;/span&gt; -o enp1s0 -j MASQUERADE
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; post-up iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Attention&lt;/strong&gt; : le point le plus important est de bien vérifier que l&amp;rsquo;interface de sortie (-o) a bien le bon nom. Ici, mon interface physique connectée à Internet est &lt;strong&gt;enp1s0&lt;/strong&gt;, mais si la vôtre a un autre nom, il faut adapter.&lt;/p&gt;
&lt;p&gt;De mon point de vue, l&amp;rsquo;UI n&amp;rsquo;est tout de même pas complètement inutile, car elle nous permet de faire le changement le plus délicat (échange des IP) avec le diff visuel et le bouton &amp;ldquo;apply config&amp;rdquo;. Les scripts post-up ont peu de chances de nous couper l&amp;rsquo;accès.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/pve-network-4.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="premier-test"&gt;Premier test
&lt;/h2&gt;&lt;p&gt;On est loin d&amp;rsquo;avoir fini (ça ne rentrera pas dans cet article, de toute façon, donc autant brûler les étapes&amp;hellip;). Mais je suis sûr que vous êtes impatients de lancer une VM et on devrait avoir quelque chose de fonctionnel, bien qu&amp;rsquo;incomplet.&lt;/p&gt;
&lt;p&gt;On va donc faire un petit test rapide de notre setup pour vérifier qu&amp;rsquo;on a bien un hyperviseur fonctionnel &lt;em&gt;a minima&lt;/em&gt; (c&amp;rsquo;est-à-dire sans clustering, sans SDN, sans firewall, sans monitoring, sans sauvegarde&amp;hellip; sans rien, en fait).&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai commencé à faire joujou avec &lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=talos" target="_blank" rel="noopener"
&gt;Talos Linux&lt;/a&gt; comme distribution Linux pour Kubernetes. Pour faire simple, je vais donc lancer l&amp;rsquo;install d&amp;rsquo;un Node Talos. Si elle arrive à s&amp;rsquo;enrôler dans l&amp;rsquo;interface Omni, ça veut dire que j&amp;rsquo;ai un hyperviseur fonctionnel, réseau inclus.&lt;/p&gt;
&lt;p&gt;Une fois l&amp;rsquo;ISO généré sur le site de mon Omni (le control plane SaaS de Sidero Labs, l&amp;rsquo;éditeur de Talos Linux), on peut le pousser sur notre Proxmox VE.&lt;/p&gt;
&lt;p&gt;Pour le faire, depuis notre serveur (donc pas au niveau Datacenter), on sélectionne un pool de stockage qui accepte les images ISO (si vous vous souvenez bien, notre pool ZFS ne le supporte pas par défaut), on choisit &lt;strong&gt;ISO Images&lt;/strong&gt;, et on clique sur &lt;strong&gt;Upload&lt;/strong&gt; pour téléverser l&amp;rsquo;ISO (comme on dit en bon français).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/iso.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Une fois uploadé, on peut maintenant cliquer sur le bouton bleu en haut à droite &lt;strong&gt;Create VM&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/proxmox-create-01.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;À partir de là, le wizard de création de VM devrait vous prendre la main. Ça va être un peu verbeux, mais tous les menus sont utiles, quand on commence à bien connaître Proxmox VE. Je vous donne quand même le minimum :&lt;/p&gt;
&lt;p&gt;Dans le premier menu, on ne va pas choisir sur quel nœud on installe la VM puisque pour l&amp;rsquo;instant, on n&amp;rsquo;en a qu&amp;rsquo;un&amp;hellip; En revanche, on va devoir lui donner un ID (100 par défaut) unique pour tout le cluster. Idéalement, on lui donne aussi un petit nom. Moi, j&amp;rsquo;ai opté pour talos02 (car j&amp;rsquo;ai déjà un talos01 sur un autre serveur, vous avez vu comme je suis original ?).&lt;/p&gt;
&lt;p&gt;Enfin, j&amp;rsquo;ai coché la case &amp;ldquo;Start at boot&amp;rdquo;, c&amp;rsquo;est le genre de truc relou quand on a oublié de le mettre et que l&amp;rsquo;hyperviseur redémarre (ça arrive)&amp;hellip;&lt;/p&gt;
&lt;p&gt;On peut donner des tags à nos VMs, elles auront de jolies pastilles de couleurs pour les distinguer :)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/create-vm-1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Dans le second menu (OS), on doit indiquer deux choses. D&amp;rsquo;abord, qu&amp;rsquo;on veut utiliser l&amp;rsquo;ISO qu&amp;rsquo;on vient de récupérer / uploader pour booter notre machine (il faut choisir le bon pool de stockage, par défaut, c&amp;rsquo;est &amp;ldquo;local&amp;rdquo; qui est sélectionné). On doit aussi donner le type d&amp;rsquo;OS pour des histoires de compatibilité de pilotes pour les périphériques virtuels. Ça fait belle lurette qu&amp;rsquo;on n&amp;rsquo;a plus trop besoin de ça, &amp;ldquo;6.X - 2.6&amp;rdquo; fonctionne pour tous les Linux récents (la sortie du kernel 2.6, c&amp;rsquo;est 2003 !).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/create-vm-2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Je saute System, dans Disks, on ajoute un disque sur le bon pool (donc pas local, mais bien celui en ZFS). Pour ma VM Talos 32 Go, c&amp;rsquo;est largement suffisant&amp;hellip; À noter qu&amp;rsquo;il existe beaucoup d&amp;rsquo;options importantes ici pour tout ce qui est &amp;ldquo;optimisation&amp;rdquo; des lectures / écritures, mais on est largement au-delà du scope de cet article.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/create-vm-3.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Je saute CPU et memory, l&amp;rsquo;important, c&amp;rsquo;est de surtout lui donner au moins 2 cores et 2 Go de RAM (au moins). On peut là aussi optimiser les performances CPU en activant les bons flags, mais là encore, on n&amp;rsquo;est plus dans le but de l&amp;rsquo;article donc je n&amp;rsquo;insiste pas.&lt;/p&gt;
&lt;p&gt;Dans la partie network, on s&amp;rsquo;assure juste qu&amp;rsquo;on est bien branché sur le bon bridge (normalement si vous avez suivi l&amp;rsquo;article, on en a qu&amp;rsquo;un, &lt;strong&gt;vmbr0&lt;/strong&gt;, donc on ne peut pas se tromper).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/create-vm-4.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Et on vérifie que tout est OK. Protip, pour gagner cinq secondes dans votre vie, cliquez sur &amp;ldquo;Start after created&amp;rdquo;, ce qui permettra de démarrer la VM au plus vite après sa création.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/create-vm-5.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="its-alive"&gt;It&amp;rsquo;s alive?
&lt;/h2&gt;&lt;p&gt;À ce stade, la VM devrait automatiquement booter sur le CD Talos et l&amp;rsquo;OS devrait s&amp;rsquo;installer sur le disque. Une fois prête, la machine va essayer de s&amp;rsquo;enrôler sur mon control plane Omni.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Et là, c&amp;rsquo;est le drame&amp;hellip;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Car oui, je n&amp;rsquo;ai pas configuré de DHCP ni de SDN. Il faut donc aller configurer à la main la carte réseau virtuelle (ce qui n&amp;rsquo;est pas foufou), en appuyant sur F3 dans la console.&lt;/p&gt;
&lt;p&gt;(Et en subissant un peu de QWERTY, mais c&amp;rsquo;est à ça qu&amp;rsquo;on reconnaît un bon sysadmin normalement : il sait faire du QWERTY dans les consoles)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/talos02-config.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Une fois le réseau configuré, la machine devrait quasiment instantanément commencer à se configurer&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/talos02-booted.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&amp;hellip; et à s&amp;rsquo;enrôler dans Omni :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/omni.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Victoire !!&lt;/p&gt;
&lt;h2 id="enfin-bon"&gt;Enfin bon&amp;hellip;
&lt;/h2&gt;&lt;p&gt;Enfin bon&amp;hellip; oui, on a une VM fonctionnelle. Mais j&amp;rsquo;ambitionne qu&amp;rsquo;on aille quand même un peu plus loin avant de vraiment crier victoire.&lt;/p&gt;
&lt;p&gt;Comme je l&amp;rsquo;ai dit plus haut, on a dû configurer le réseau de notre VM à la main, et on n&amp;rsquo;a encore ni clustering, ni firewalling, ni SDN, ni monitoring, ni sauvegarde&amp;hellip; Mais on chatouille allègrement les 16 000 signes pour ce blog post, il est donc temps de raccrocher pour se dire &amp;ldquo;à la prochaine fois&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Et en attendant, have fun :)&lt;/p&gt;</description></item><item><title>Déploiement d'un cluster Proxmox VE 8 sur des serveurs dédiés (1/2)</title><link>https://blog.zwindler.fr/2025/01/27/deploiement-d-un-cluster-proxmox-ve-8-part-1/</link><pubDate>Mon, 27 Jan 2025 20:00:00 +0000</pubDate><guid>https://blog.zwindler.fr/2025/01/27/deploiement-d-un-cluster-proxmox-ve-8-part-1/</guid><description>&lt;img src="https://blog.zwindler.fr/2025/02/proxmox8.webp" alt="Featured image of post Déploiement d'un cluster Proxmox VE 8 sur des serveurs dédiés (1/2)" /&gt;&lt;p&gt;Note - cet article fait partie d&amp;rsquo;une suite d&amp;rsquo;articles :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2025/01/27/deploiement-d-un-cluster-proxmox-ve-8-part-1" &gt;Déploiement d&amp;rsquo;un cluster Proxmox VE 8 sur des serveurs dédiés (1/4)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2025/02/17/deploiement-d-un-cluster-proxmox-ve-8-part-2/" &gt;Déploiement d&amp;rsquo;un cluster Proxmox VE 8 sur des serveurs dédiés (2/4)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2025/03/25/deploiement-d-un-cluster-proxmox-ve-8-part-3/" &gt;Déploiement d&amp;rsquo;un cluster Proxmox VE 8 sur des serveurs dédiés (3/4)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2025/03/30/tutoriel-sdn-vxlan-proxmoxve-8/" target="_blank" rel="noopener"
&gt;Hors série - SDN en mode VXLAN avec des machines sur Internet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Et &lt;em&gt;au moins&lt;/em&gt; un autre à suivre&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="introduction"&gt;Introduction
&lt;/h2&gt;&lt;p&gt;Ceux qui suivent un peu le &amp;ldquo;lore&amp;rdquo; de ce blog savent que je suis un peu connu dans la communauté des bidouilleurs du dimanche pour avoir rédigé (ou co-rédigé) plusieurs tutos sur Proxmox VE. Je pense en particulier à deux suites d&amp;rsquo;articles sur &lt;a class="link" href="https://blog.zwindler.fr/2017/07/11/deploiment-de-proxmox-ve-5-sur-un-serveur-dedie-part-1/" target="_blank" rel="noopener"
&gt;Proxmox VE 5&lt;/a&gt;, puis &lt;a class="link" href="https://blog.zwindler.fr/2020/03/02/deploiement-de-proxmox-ve-6-pfsense-sur-un-serveur-dedie/" target="_blank" rel="noopener"
&gt;Proxmox VE 6&lt;/a&gt;, pour créer de zéro un cluster de virtualisation avec Proxmox VE (et pfSense à l&amp;rsquo;époque).&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est une nouvelle itération de ces tutos, basée cette fois-ci sur Proxmox VE 8, avec pas mal de choses qui changent et de nouvelles approches.&lt;/p&gt;
&lt;p&gt;Le but ultime de cette suite d&amp;rsquo;articles est de disposer d&amp;rsquo;une plateforme de virtualisation avec Proxmox VE. Cette plateforme sera composée de plusieurs machines (idéalement 3, mais 2 ça fonctionne aussi), sécurisée, supervisée, hautement disponible, sauvegardée.&lt;/p&gt;
&lt;p&gt;Il faudra suivre plusieurs articles pour y parvenir.&lt;/p&gt;
&lt;h2 id="postulats-de-départ"&gt;Postulats de départ
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;1-&lt;/strong&gt; Je pars du principe que vous n&amp;rsquo;avez pas de machines pour le faire à la maison et que vous n&amp;rsquo;avez pas envie ou les moyens d&amp;rsquo;investir dans un homelab (&lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=homelab" &gt;même si ça peut être très rigolo, ça demande de l&amp;rsquo;investissement&lt;/a&gt;). Cependant, si vous avez des machines à la maison, une grande partie de l&amp;rsquo;article reste valide, une fois les machines installées.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2-&lt;/strong&gt; Comme Proxmox VE est une plateforme de virtualisation, je pars aussi du principe que vous voulez disposer de machines &lt;strong&gt;dédiées&lt;/strong&gt; (physique) et pas de machines virtuelles, pour justement pouvoir virtualiser des OS entiers sans trop de problèmes (même si on a toujours l&amp;rsquo;option &amp;ldquo;nested virt&amp;rdquo;, c&amp;rsquo;est moins glop).&lt;/p&gt;
&lt;p&gt;Note : si vous n&amp;rsquo;avez pas besoin de virtualisation (exemple : pas de Windows ou d&amp;rsquo;OS un peu particulier), Proxmox VE est une super plateforme de containérisation, notamment grâce à LXC, qui permet de créer des containers Linux avec un OS entier, que vous pourrez gérer exactement comme une VM mais avec des performances bien meilleures (et quelques limitations dues au partage de kernel, mais c&amp;rsquo;est souvent suffisant). Vous pouvez aller lire &lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=lxc" &gt;mes articles sur LXC&lt;/a&gt; si ça vous intéresse.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3-&lt;/strong&gt; J&amp;rsquo;aimerais attirer votre attention sur le fait que de nombreuses actions auraient pu être scriptées ou gérées via de &amp;ldquo;l&amp;rsquo;infrastructure as code&amp;rdquo;. C&amp;rsquo;est plus dans l&amp;rsquo;air du temps, car plus robuste et plus fiable. Cependant, l&amp;rsquo;intérêt de cet article est de faire &amp;ldquo;à la main&amp;rdquo; pour comprendre ce qu&amp;rsquo;on fait, pas à pas, pas juste vous fournir une infrastructure &amp;ldquo;clé en main&amp;rdquo; que vous ne saurez pas gérer au premier pépin.&lt;/p&gt;
&lt;p&gt;Si vous cherchez des méthodes plus industrielles pour déployer des clusters de virtualisation, vous en trouverez sûrement plein sur Internet, de la part d&amp;rsquo;autres blogueurs (certains français, certains sont même des copains).&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai d&amp;rsquo;ailleurs moi-même plusieurs fois fait l&amp;rsquo;exercice avec Ansible ou &lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=rudder" &gt;Rudder&lt;/a&gt; par le passé, par exemple ici (note : ce code est obsolète) :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2019/07/22/proxmox-en-5-min-ansible-tinc/" &gt;Un cluster Proxmox VE en 5 minutes avec Ansible&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/zwindler/ansible-proxmoxve/tree/master" target="_blank" rel="noopener"
&gt;github.com/zwindler/ansible-proxmoxve&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Maintenant que l&amp;rsquo;objectif et le contexte est clair pour tout le monde, on peut commencer :)&lt;/p&gt;
&lt;h2 id="choix-des-machines"&gt;Choix des machines
&lt;/h2&gt;&lt;p&gt;Comme on a dit qu&amp;rsquo;on n&amp;rsquo;auto-héberge pas, il faut trouver un hébergeur qui propose des machines physiques. Idéalement, quelque chose de pas trop cher, ça serait bien pour commencer.&lt;/p&gt;
&lt;p&gt;On va donc plutôt viser à trouver des machines peu onéreuses MAIS avec le support des instructions VT-x / AMD-v, ce qui est à peu près tous les CPUs qui fonctionnent encore aujourd&amp;rsquo;hui SAUF les Atom et les machines ARM type Raspberry.&lt;/p&gt;
&lt;p&gt;Grosso modo, ça nous laisse les Kimsufi chez OVHCloud, les dédibox chez Scaleway et les machines chez Hetzner.&lt;/p&gt;
&lt;p&gt;Chez Hetzner pour 45€, vous avez un i5 gen13, 64 Go de RAM et 2 SSD NVMe.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/hetzner.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Chez OVHcloud, avec un peu de chance, vous pourrez tomber sur des machines autour des 15 - 20€ par mois avec du matériel plus ancien, mais largement suffisant pour ce qu&amp;rsquo;on va en faire.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/ovhcloud.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Chez Scaleway, l&amp;rsquo;offre d&amp;rsquo;entrée de gamme est centrée sur les Atom Avoton ou de très vieux Xeon. L&amp;rsquo;Avoton C2750 reste une option valable, car c&amp;rsquo;est un octo-cores qui supporte le VT-x (contrairement au C2350, attention !). Mais bon, c&amp;rsquo;est du matoss de 2013 💀&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/scaleway.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Pour les besoins de cet article, j&amp;rsquo;ai optimisé les coûts et je suis parti sur le serveur OVHcloud que je présente juste au-dessus (KS-GAME-LE), malheureusement uniquement disponible au Canada :(. Mais 8 threads et 16 Go de RAM pour 12€ TTC par mois, ce n&amp;rsquo;est vraiment pas cher payé.&lt;/p&gt;
&lt;p&gt;Deux points noirs :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le stockage ridiculement petit pour de la virtualisation (seulement 240 Go, un seul disque)&lt;/li&gt;
&lt;li&gt;la latence - presque 100 ms depuis chez moi, contre 11 ms pour mon autre machine chez Scaleway&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;64 bytes from proxmox.example.org (203.0.113.78): icmp_seq=1 ttl=53 time=98.0 ms
64 bytes from proxmox.example.org (203.0.113.78): icmp_seq=2 ttl=53 time=97.5 ms
64 bytes from proxmox.example.org (203.0.113.78): icmp_seq=3 ttl=53 time=97.6 ms
64 bytes from proxmox.example.org (203.0.113.78): icmp_seq=4 ttl=53 time=97.7 ms
64 bytes from proxmox.example.org (203.0.113.78): icmp_seq=5 ttl=53 time=97.7 ms
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="installation-de-los"&gt;Installation de l&amp;rsquo;OS
&lt;/h2&gt;&lt;p&gt;Une fois commandé, le serveur est relativement rapidement disponible dans votre &amp;ldquo;manager OVH&amp;rdquo;. On a un menu relativement intuitif pour installer directement Proxmox VE 8, quasiment à jour (les images fournies sont reconstruites très régulièrement avec toutes les mises à jour).&lt;/p&gt;
&lt;p&gt;Pour lancer l&amp;rsquo;installation, on clique sur les &amp;ldquo;&amp;hellip;&amp;rdquo; dans la partie Système d&amp;rsquo;exploitation (OS), puis on sélectionne l&amp;rsquo;install depuis un template OVH&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/install01.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/install02.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On déroule la liste des types d&amp;rsquo;OS, on sélectionne Virtualisation, puis proxmox VE 8 (tant qu&amp;rsquo;à faire). J&amp;rsquo;ai aussi coché la case &amp;ldquo;Personnaliser la configuration des partitions&amp;rdquo;, parce que par défaut, l&amp;rsquo;installation d&amp;rsquo;OVH utilise du stockage de type &amp;ldquo;LVM thick&amp;rdquo; pour la majorité de l&amp;rsquo;espace disque, alors qu&amp;rsquo;on va utiliser les fonctionnalités avancées de ZFS pour la suite :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/install03.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/install04.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Avant de valider l&amp;rsquo;installation, n&amp;rsquo;oubliez pas de modifier son nom (Custom hostname) pour éviter d&amp;rsquo;avoir besoin de le faire post install, puis d&amp;rsquo;ajouter une clé publique SSH :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/install05.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/install06.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="premières-tâches-post-installation--upgrade-et-reboot"&gt;Premières tâches post-installation : upgrade et reboot
&lt;/h2&gt;&lt;p&gt;Il y a toute une petite série de trucs à faire quand on vient d&amp;rsquo;installer une machine, en particulier sur Proxmox VE, et on va essayer de se retenir de &amp;ldquo;vite vite&amp;rdquo; se connecter à l&amp;rsquo;interface graphique.&lt;/p&gt;
&lt;p&gt;De toute façon, on ne pourra pas s&amp;rsquo;y connecter, à l&amp;rsquo;interface graphique de Proxmox VE&amp;hellip;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ah bon ???&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Oui, car si on peut normalement se connecter avec l&amp;rsquo;utilisateur &lt;code&gt;root&lt;/code&gt; de notre Linux, on ne va pas pouvoir dans le cas d&amp;rsquo;OVHcloud, tout simplement parce qu&amp;rsquo;on n&amp;rsquo;a PAS le mot de passe root. Heureusement qu&amp;rsquo;on a mis une clé SSH ;)&lt;/p&gt;
&lt;p&gt;On y reviendra plus tard, on a plus urgent à faire.&lt;/p&gt;
&lt;p&gt;La première chose que moi, j&amp;rsquo;ai faite, c&amp;rsquo;est d&amp;rsquo;ajouter tout de suite un record DNS de type A pour que l&amp;rsquo;IP de ma machine corresponde à un FQDN. Pour cet article, j&amp;rsquo;y ferai référence de la manière suivante :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;hostname: myPVEhost&lt;/li&gt;
&lt;li&gt;FQDN: proxmox.example.org&lt;/li&gt;
&lt;li&gt;IP: 203.0.113.159&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/dns_ovh.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On se connecte donc sur l&amp;rsquo;IP de notre machine fraichement installée en SSH (root@IPmachine) et on va en profiter pour faire un peu de ménage.&lt;/p&gt;
&lt;p&gt;La première chose à faire est de mettre à jour le serveur, idéalement suivi d&amp;rsquo;un reboot :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt upgrade -y &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; reboot
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Une fois le serveur revenu à la vie, on se reconnecte et active d&amp;rsquo;une manière ou d&amp;rsquo;une autre un système de mise à jour automatiques. Le plus simple c&amp;rsquo;est d&amp;rsquo;utiliser &lt;code&gt;unattended-upgrades&lt;/code&gt; s&amp;rsquo;il n&amp;rsquo;est pas installé par défaut (il est possible qu&amp;rsquo;il y soit déjà) mais il existe des outils plus perfectionnés.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt install unattended-upgrades
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="cest-pour-la-sécurité"&gt;C&amp;rsquo;est pour la sécurité
&lt;/h2&gt;&lt;p&gt;Une fois que c&amp;rsquo;est fait, je vous conseille d&amp;rsquo;installer tout de suite CrowdSec. Ici, je me suis simplement basé sur la documentation officielle de crowdsec, pour ajouter le moteur de détection, le composant de remédiation (ici via &lt;code&gt;iptables&lt;/code&gt;) :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://doc.crowdsec.net/u/getting_started/installation/linux" target="_blank" rel="noopener"
&gt;CrowdSec.net - Installation Linux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -s https://install.crowdsec.net &lt;span class="p"&gt;|&lt;/span&gt; sudo sh
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt install crowdsec
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# vérifier que le service crowdsec fonctionne&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl status crowdsec
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;● crowdsec.service - Crowdsec agent
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Loaded: loaded &lt;span class="o"&gt;(&lt;/span&gt;/lib/systemd/system/crowdsec.service&lt;span class="p"&gt;;&lt;/span&gt; enabled&lt;span class="p"&gt;;&lt;/span&gt; preset: enabled&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Active: active &lt;span class="o"&gt;(&lt;/span&gt;running&lt;span class="o"&gt;)&lt;/span&gt; since Sun 2025-01-26 21:04:26 UTC&lt;span class="p"&gt;;&lt;/span&gt; 1min 56s ago
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Process: &lt;span class="m"&gt;73830&lt;/span&gt; &lt;span class="nv"&gt;ExecStartPre&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/bin/crowdsec -c /etc/crowdsec/config.yaml -t -error &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;exited, &lt;span class="nv"&gt;status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0/SUCCESS&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Main PID: &lt;span class="m"&gt;73862&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;crowdsec&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Tasks: &lt;span class="m"&gt;13&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;limit: 19059&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Memory: 33.1M
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; CPU: 2.571s
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; CGroup: /system.slice/crowdsec.service
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─73862 /usr/bin/crowdsec -c /etc/crowdsec/config.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └─73877 journalctl --follow -n &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="nv"&gt;_SYSTEMD_UNIT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ssh.service
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Jan &lt;span class="m"&gt;26&lt;/span&gt; 21:04:23 myPVEhost systemd&lt;span class="o"&gt;[&lt;/span&gt;1&lt;span class="o"&gt;]&lt;/span&gt;: Starting crowdsec.service - Crowdsec agent...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Jan &lt;span class="m"&gt;26&lt;/span&gt; 21:04:26 myPVEhost systemd&lt;span class="o"&gt;[&lt;/span&gt;1&lt;span class="o"&gt;]&lt;/span&gt;: Started crowdsec.service - Crowdsec agent.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# installer le moteur de remédiation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt install crowdsec-firewall-bouncer
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Une fois que Crowdsec est opérationnel, on peut lui ajouter la collection &amp;ldquo;fulljackz/proxmox&amp;rdquo;, qu&amp;rsquo;il va falloir modifier (merci le super article de Julien Louis sur son blog slash-root.fr), qui va écouter les logs de la webUI pour détecter tout brute force et bannir ceux qui tenteraient de le faire :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://app.crowdsec.net/hub/author/fulljackz/collections/proxmox" target="_blank" rel="noopener"
&gt;https://app.crowdsec.net/hub/author/fulljackz/collections/proxmox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://slash-root.fr/crowdsec-proteger-lauthentification-proxmox/" target="_blank" rel="noopener"
&gt;slash-root.fr - CrowdSec : Protéger l’authentification Proxmox&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cscli collections install fulljackz/proxmox
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;...&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;INFO Enabled fulljackz/proxmox
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;INFO Run &lt;span class="s1"&gt;&amp;#39;sudo systemctl reload crowdsec&amp;#39;&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; the new configuration to be effective.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Le pattern écouté par le parser proxmox n&amp;rsquo;est pas/plus bon avec les nouvelles versions&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;Jan 26 21:23:14 myPVEhost pvedaemon[1250]: authentication failure; rhost=::ffff:203.0.113.159.78 user=coucou@pve msg=no such user (&amp;#39;coucou@pve&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On voit ici que Julien a rajouté le préfixe &amp;ldquo;::ffff:&amp;rdquo; dans la variable &lt;strong&gt;PVE_AUTH_FAIL&lt;/strong&gt; du fichier &lt;code&gt;/etc/crowdsec/parsers/s01-parse/proxmox-logs.yaml&lt;/code&gt;, mais quand je vois les cas de tests prévus dans la collection, j&amp;rsquo;ai l&amp;rsquo;impression que ce n&amp;rsquo;est pas nécessaire&amp;hellip;&lt;/p&gt;
&lt;p&gt;Dans tous les cas, on va créer un fichier &lt;code&gt;/etc/crowdsec/acquis.d/proxmox.yaml&lt;/code&gt; pour que CrowdSec puisse commencer à analyser nos logs :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir -p /etc/crowdsec/acquis.d/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat &amp;gt; /etc/crowdsec/acquis.d/proxmox.yaml &lt;span class="s"&gt;&amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;journalctl_filter:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; - _SYSTEMD_UNIT=pvedaemon.service
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;labels:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; type: syslog
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On termine par recharger crowdsec et on regarde &lt;del&gt;le monde brûler&lt;/del&gt; les scripts kiddies se faire bloquer.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl reload crowdsec
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cscli alerts list
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;╭────┬────────────────────┬───────────────────────────┬─────────┬──────────────────────────────────────────────────────────────┬───────────┬─────────────────────────────────────────╮
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ ID │ value │ reason │ country │ as │ decisions │ created_at │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├────┼────────────────────┼───────────────────────────┼─────────┼──────────────────────────────────────────────────────────────┼───────────┼─────────────────────────────────────────┤
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ &lt;span class="m"&gt;2&lt;/span&gt; │ Ip:203.0.113.222 │ crowdsecurity/ssh-slow-bf │ IR │ &lt;span class="m"&gt;202468&lt;/span&gt; Gloubi Bo ulgua Co. &lt;span class="o"&gt;(&lt;/span&gt; Private Joint Stock&lt;span class="o"&gt;)&lt;/span&gt; │ ban:1 │ 2025-01-26 22:31:15.366187524 +0000 UTC │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;╰────┴────────────────────┴───────────────────────────┴─────────┴──────────────────────────────────────────────────────────────┴───────────┴─────────────────────────────────────────╯
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="nagging-popup"&gt;Nagging popup
&lt;/h2&gt;&lt;p&gt;Dans la liste des petits trucs pénibles livrés de base avec Proxmox VE, il y avait avant le fait que Proxmox VE avait les dépôts apt entreprise sur toutes les installations, et il était nécessaire de préalablement les désactiver à la main avant de pouvoir faire les mises à jour.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;était super pénible et les développeurs de Proxmox VE ont entendu (un peu) leur communauté et retiré cette obligation&amp;hellip; pour la remplacer par une popup.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/nagging_popup.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Alors, une popup, je veux bien ! C&amp;rsquo;est important de récompenser le travail des développeurs et de les soutenir. Mais est-ce que c&amp;rsquo;est vraiment nécessaire de le faire &lt;strong&gt;à chaque login&lt;/strong&gt; ET &lt;strong&gt;à chaque fois qu&amp;rsquo;on rafraîchit la liste des packages à mettre à jour&lt;/strong&gt; ?&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est bien entendu une question rhétorique.&lt;/p&gt;
&lt;p&gt;Évidemment, de nombreuses personnes ont trouvé plusieurs méthodes pour désactiver le code JS responsable. Big up à &lt;a class="link" href="https://blog.zwindler.fr/authors/fabio/" target="_blank" rel="noopener"
&gt;fabio&lt;/a&gt; pour sa version qui fonctionne bien.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sed -Ezi.bak &lt;span class="s2"&gt;&amp;#34;s/(function\(orig_cmd\) \{)/\1\n\torig_cmd\(\);\n\treturn;/g&amp;#34;&lt;/span&gt; /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; systemctl restart pveproxy.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note : si comme moi vous vous êtes déjà connecté une fois, il faudra aussi nettoyer le cache sinon la popup restera&amp;hellip;&lt;/p&gt;
&lt;h2 id="création-de-groupes-et-dutilisateurs-pour-linterface-graphique"&gt;Création de groupes et d&amp;rsquo;utilisateurs pour l&amp;rsquo;interface graphique
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;Ok ok, on a fait plein de trucs, est-ce qu&amp;rsquo;on peut se connecter maintenant ???&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mais ouiiii, on peut. De toute façon, j&amp;rsquo;en suis déjà à presque 15000 signes, cet article est beaucoup trop long, il faut abréger.&lt;/p&gt;
&lt;p&gt;Dernière étape dans cet article, on va créer un administrateur pour se connecter à l&amp;rsquo;UI et un utilisateur qui nous servira plus tard pour le monitoring.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# vous n&amp;#39;êtes pas **vraiment** obligé d&amp;#39;appeler l&amp;#39;admin &amp;#34;zwindler&amp;#34; vous savez ?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pveum group add admin -comment &lt;span class="s2"&gt;&amp;#34;System Administrators&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pveum acl modify / -group admin -role Administrator
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pveum useradd zwindler@pve
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pveum usermod zwindler@pve -group admin
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pveum passwd zwindler@pve
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# notre utilisateur de monitoring&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pveum groupadd monitoring -comment &lt;span class="s1"&gt;&amp;#39;Monitoring group&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pveum aclmod / -group monitoring -role PVEAuditor
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pveum useradd pve_exporter@pve
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pveum usermod pve_exporter@pve -group monitoring
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pveum passwd pve_exporter@pve
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Allez, c&amp;rsquo;est bon, vous avez assez patienté, vous pouvez vous connecter à votre Proxmox VE ! Rendez-vous sur :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;https://@IPmachine:8006
ou&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://proxmox.example.org:8006" target="_blank" rel="noopener"
&gt;https://proxmox.example.org:8006&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note : pour l&amp;rsquo;instant, le certificat est autosigné et le navigateur va nous remonter une erreur. On peut accepter d&amp;rsquo;ignorer le problème pour l&amp;rsquo;instant.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/pve_login.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;N&amp;rsquo;oubliez pas de changer le &amp;ldquo;realm&amp;rdquo; de PAM (les utilisateurs unix, qu&amp;rsquo;on n&amp;rsquo;utilise pas ici) à &amp;ldquo;Proxmox&amp;rdquo; pour pouvoir utiliser l&amp;rsquo;administrateur qu&amp;rsquo;on vient de créer.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/02/proxmox8.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;À bientôt pour la suite. Et en attendant, have fun!&lt;/p&gt;</description></item><item><title>Proxmox VE 6 + pfsense sur un serveur dédié (2/2)</title><link>https://blog.zwindler.fr/2020/03/09/proxmox-ve-6-pfsense-sur-un-serveur-dedie-2-3/</link><pubDate>Mon, 09 Mar 2020 11:49:55 +0000</pubDate><guid>https://blog.zwindler.fr/2020/03/09/proxmox-ve-6-pfsense-sur-un-serveur-dedie-2-3/</guid><description>&lt;img src="https://blog.zwindler.fr/2020/03/article_logo_pfsense_proxmox.webp" alt="Featured image of post Proxmox VE 6 + pfsense sur un serveur dédié (2/2)" /&gt;&lt;blockquote&gt;
&lt;p&gt;Note de zwindler : cet article a été co-écrit par &lt;a class="link" href="https://www.charlesbordet.com/" target="_blank" rel="noopener"
&gt;Charles Bordet&lt;/a&gt;, et se veut être une version à jour de &lt;a class="link" href="https://blog.zwindler.fr/2017/07/11/deploiment-de-proxmox-ve-5-sur-un-serveur-dedie-part-1/" &gt;cette suite d’articles écrits sur ce blog&lt;/a&gt; (mais avec des versions obsolètes de Proxmox et de PFSense). Merci à lui !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;p&gt;Dans l’article précédent, nous avons mis en place notre serveur Proxmox, l’avons sécurisé, puis avons téléchargé puis installé une machine virtuelle PFSense qui va nous faire office de point d’entrée unique.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2020/03/02/deploiement-de-proxmox-ve-6-pfsense-sur-un-serveur-dedie/" &gt;Proxmox VE 6 + pfsense sur un serveur dédié (1/2)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="routage-du-trafic-vers-la-pfsense"&gt;Routage du trafic vers la PFSense
&lt;/h3&gt;&lt;p&gt;Comme nous l’avons déjà évoqué, l’hyperviseur est en première ligne. Et la PFSense est en 2e ligne et nos VMs, bien au chaud derrière.&lt;/p&gt;
&lt;p&gt;L’objectif, c’est d’avoir la PFSense en 1e ligne. D’un point de vue purement réseau, l’hyperviseur va s’effacer en ne devenant rien de plus qu’un routeur.&lt;/p&gt;
&lt;p&gt;La première chose à corriger, c’est qu’actuellement, il existe un raccourci qui permet de passer directement de l’hyperviseur aux VMs puisqu’ils sont tous sur le réseau LAN. Dans notre schéma mental, on ne veut pas que ce soit possible puisque tout doit passer par pfsense.&lt;/p&gt;
&lt;p&gt;Essayez par exemple de pinger 192.168.9.10 depuis l’hyperviseur, ou de pinger 192.168.9.1 depuis la VM.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/02/ping_1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Sur l’hyperviseur, on va ajouter une &lt;em&gt;route&lt;/em&gt; qui dit : Tous les paquets vers le LAN doivent passer par l’interface WAN de la PFSense. C’est cette règle qui nous permet de forcer tout le trafic à passer par la PFSense, comme si la PFSense était en frontal, avant d’arriver dans le LAN.&lt;/p&gt;
&lt;p&gt;On crée un fichier /root/pfsense-route.sh` avec la commande suivante.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat &amp;gt; /root/pfsense-route.sh &amp;lt;&amp;lt; EOF
#!/bin/sh
## IP forwarding activation
echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward
## Rediriger les paquets destinés au LAN pour l&amp;#39;interface WAN de la PFSense
ip route change 192.168.9.0/24 via 10.0.0.2 dev vmbr1
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Pour que ce fichier se lance automatiquement dès qu’on boot, on lance la commande &lt;code&gt;chmod +x /root/pfsense-route.sh&lt;/code&gt; et on ajoutera à la fin du fichier &lt;code&gt;/etc/network/interfaces&lt;/code&gt; la ligne &lt;code&gt;post-up /root/pfsense-route.sh&lt;/code&gt; à la fin du bloc de configuration de vmbr2, juste avant le commentaire &lt;code&gt;#LAN&lt;/code&gt; :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[...]
auto vmbr2
iface vmbr2 inet static
address 192.168.9.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
post-up /root/pfsense-route.sh
#LAN
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Si vous exécutez ce fichier &lt;code&gt;/root/pfsense-route.sh&lt;/code&gt;, et que vous essayez de nouveau de ping l’hyperviseur depuis la VM, ou l’inverse, ça ne devrait plus aboutir. Cela signifie que le petit paquet essaye bien de passer par PFSense, et comme on lui a rien dit, PFsense drop sans mot dire.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/04/pfsense_drop.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Note: Ça veut aussi dire que notre beau tunnel SSH ne fonctionnera plus à terme (si vous avez choisi cette solution plutôt que la &amp;ldquo;VM rebond&amp;rdquo;)&amp;hellip;&lt;/p&gt;
&lt;p&gt;Si jamais, pour débugger, vous avez besoin de laisser passer le ping, on peut le réactiver de manière sélective dans PFSense.&lt;/p&gt;
&lt;p&gt;Dans l’interface de la PFSense, on va commencer par aller dans Status / System Logs. Puis cliquez sur l’onglet Firewall. Le but ici c’est de vous montrer un moyen de débugger au cas où vous auriez des problèmes.&lt;/p&gt;
&lt;p&gt;Sur cette page, vous verrez toutes les connexions bloquées par le pare-feu.&lt;/p&gt;
&lt;p&gt;Si vous descendez dans la page, vous allez voir les pings qui ont été bloqués.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/02/ping_block_pfsense.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Cette vue est utile car elle vus permet de voir tout ce qui a été récemment bloqué. Les petits (-) et les petits (+) vont vous permettre d’ajouter rapidement des règles, respectivement pour dropper ou autoriser des connexions similaires que PFSense rencontrerait à l’avenir.&lt;/p&gt;
&lt;p&gt;Si vous voulez tout faire vous même (car vous souhaitez comprendre et maitriser ce que vous faites), allez plutôt dans Firewall/Rules. Cliquez sur Add puis entrez les paramètres suivants :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Action : Pass&lt;/li&gt;
&lt;li&gt;Interface : WAN&lt;/li&gt;
&lt;li&gt;Address Family : IPv4&lt;/li&gt;
&lt;li&gt;Protocol : ICMP&lt;/li&gt;
&lt;li&gt;Source : Any&lt;/li&gt;
&lt;li&gt;Destination : Any&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cette règle assez permissive permet d’autoriser tous les paquets en protocole ICMP. Une fois ajoutée, n’oubliez pas d’appliquer les changements. Puis réessayez de faire pinger vos machines. Le ping est de retour ! Mais il passe par la PFSense cette fois-ci.&lt;/p&gt;
&lt;h3 id="port-forwarding-de-la-pfsense"&gt;Port forwarding de la PFSense
&lt;/h3&gt;&lt;p&gt;Maintenant que la base de notre script fonctionne, on va continuer à ajouter des règles iptables. Comme il est assez long, je vais vous l’expliquer et on va le remplir au fur et à mesure. Pour ceux qui veulent la version complète du fichier immédiatement, elle est disponible &lt;a class="link" href="https://blog.zwindler.fr/2020/05/proxmox6_pfsense.txt" &gt;ici&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Note : Le gros souci avec iptables` et les règles de firewalling en général, c’est que même quand on est expert, si jamais vous vous êtes planté (ou que pour une raison ou pour une autre, les commandes que je donne ne sont pas 100% compatibles dans votre contexte il y a une petite subtilité) vous risquez de vous couper l’accès.&lt;/p&gt;
&lt;p&gt;Un bon moyen de limiter ce genre de risque est de suivre la procédure suivante à chaque fois que vous faites une modification :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;faire une copie datée des fichiers &lt;code&gt;/etc/network/interfaces&lt;/code&gt;, &lt;code&gt;/root/pfsense-route.sh&lt;/code&gt; et &lt;code&gt;/root/iptables.sh&lt;/code&gt; avant toute modif&lt;/li&gt;
&lt;li&gt;désactiver/supprimer les lignes avec le &lt;code&gt;post-up /root/pfsense-route.sh&lt;/code&gt; et/ou &lt;code&gt;/root/pfsense-route.sh&lt;/code&gt; dans &lt;code&gt;/etc/network/interfaces&lt;/code&gt;, ce qui vous permettra de retrouver la main après une reboot&lt;/li&gt;
&lt;li&gt;exécuter le script à la main une première fois, puis ne rebooter seulement que &lt;em&gt;SI TOUT fonctionne&lt;/em&gt; (en testant de nouvelles connexions)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si jamais vous vous êtes scié la jambe (ou la branche, ou tiré une balle dans le pied), un reboot et une restauration du fichier initial vous tirera d’affaire.&lt;/p&gt;
&lt;p&gt;Note bis Ne lancez pas non plus ces instructions une par une. En effet, la première chose qu’on fait, par convention, c’est de TOUT dropper, pour re-autoriser ensuite au compte goûte. Donc si vous avez de grande chance de vous bloquer vous même.&lt;/p&gt;
&lt;h3 id="16-variables"&gt;1/6 Variables
&lt;/h3&gt;&lt;p&gt;Avant de commencer quoique ce soit, récupérez l’adresse IP publique de votre machine. On en aura besoin dans le script. Vous pouvez la trouver dans l’interface de votre Proxmox si elle est visible depuis votre hyperviseur, ou a minima dans l’interface de votre provider.&lt;/p&gt;
&lt;p&gt;Ensuite, on l’exporte dans le bash pour qu’elle soit intégrée de manière transparente dans le futur script iptables.sh&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;export PUBIP=xx.xx.xx.xx
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Faite ensuite la même chose pour le port que vous avez choisi dans le tuto précédent pour SSH (22 par défaut, mais le tuto précédent donne un port arbitraire, 22153)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;export SSHPORT=22153
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Puis créez la première partie du script en copiant collant simplement cette commande en entier dans un terminal (le cat` va copier proprement les lignes dans un fichier texte)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat &amp;gt; /root/iptables.sh &amp;lt;&amp;lt; EOF
#!/bin/sh
# ---------
# VARIABLES
# ---------
## Proxmox bridge holding Public IP
PrxPubVBR=&amp;#34;vmbr0&amp;#34;
## Proxmox bridge on VmWanNET (PFSense WAN side)
PrxVmWanVBR=&amp;#34;vmbr1&amp;#34;
## Proxmox bridge on PrivNET (PFSense LAN side)
PrxVmPrivVBR=&amp;#34;vmbr2&amp;#34;
## Network/Mask of VmWanNET
VmWanNET=&amp;#34;10.0.0.0/30&amp;#34;
## Network/Mmask of PrivNET
PrivNET=&amp;#34;192.168.9.0/24&amp;#34;
## Network/Mmask of VpnNET
VpnNET=&amp;#34;10.2.2.0/24&amp;#34;
## Public IP =&amp;gt; Your own public IP address
PublicIP=&amp;#34;${PUBIP}&amp;#34;
## Proxmox IP on the same network than PFSense WAN (VmWanNET)
ProxVmWanIP=&amp;#34;10.0.0.1&amp;#34;
## Proxmox IP on the same network than VMs
ProxVmPrivIP=&amp;#34;192.168.9.1&amp;#34;
## PFSense IP used by the firewall (inside VM)
PfsVmWanIP=&amp;#34;10.0.0.2&amp;#34;
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Cette première partie est inoffensive, on définit les variables. Ça permet d’éviter de ré-écrire des milliers de fois les mêmes adresses IPs et de rendre le script un peu plus lisible.&lt;/p&gt;
&lt;p&gt;Point très important, vérifiez bien que le fichier contient bien votre adresse IP publique à la ligne qui commence par &lt;code&gt;PublicIP=&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="26-drop--start-again-"&gt;2/6 DROP &amp;amp; start again !
&lt;/h3&gt;&lt;p&gt;Par contre, à partir de maintenant ça se gâte. Par défaut, on spécifie qu’on interdit tout. Tous les paquets sont droppés.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat &amp;gt;&amp;gt; /root/iptables.sh &amp;lt;&amp;lt; EOF
# ---------------------
# CLEAN ALL &amp;amp; DROP IPV6
# ---------------------
### Delete all existing rules.
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
### This policy does not handle IPv6 traffic except to drop it.
ip6tables -P INPUT DROP
ip6tables -P OUTPUT DROP
ip6tables -P FORWARD DROP
# --------------
# DEFAULT POLICY
# --------------
### Block ALL !
iptables -P OUTPUT DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
# ------
# CHAINS
# ------
### Creating chains
iptables -N TCP
iptables -N UDP
# UDP = ACCEPT / SEND TO THIS CHAIN
iptables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
# TCP = ACCEPT / SEND TO THIS CHAIN
iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
# ------------
# GLOBAL RULES
# ------------
# Allow localhost
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Don&amp;#39;t break the current/active connections
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Allow Ping - Comment this to return timeout to ping request
iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ensuite, on crée des chaînes qui vont capturer toutes les nouvelles connexions TCP et UDP, respectivement.
Et enfin, on ajoute des règles un peu de base :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On accepte les connexions localhost&lt;/li&gt;
&lt;li&gt;On ne stoppe pas les connexions existantes. Comme votre connexion SSH par exemple.&lt;/li&gt;
&lt;li&gt;On autorise les pings. Parce que c’est pratique pour débugger.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si vous vous demandez ce qui se passerait si vous lanciez le script maintenant, il ne se passerait rien, tant que vous n’essayeriez pas d’ouvrir une nouvelle connexion (SSH par exemple), car on accepte les connexions déjà ouvertes. En revanches, toutes les nouvelles échoueraient&amp;hellip;&lt;/p&gt;
&lt;p&gt;Pas terrible, donc on continue&amp;hellip;&lt;/p&gt;
&lt;h3 id="36-input"&gt;3/6 INPUT
&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;cat &amp;gt;&amp;gt; /root/iptables.sh &amp;lt;&amp;lt; EOF
# --------------------
# RULES FOR PrxPubVBR
# --------------------
### INPUT RULES
# ---------------
# Allow SSH server
iptables -A TCP -i \$PrxPubVBR -d \$PublicIP -p tcp --dport ${SSHPORT} -j ACCEPT
# Allow Proxmox WebUI
iptables -A TCP -i \$PrxPubVBR -d \$PublicIP -p tcp --dport 8006 -j ACCEPT
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ces règles sont à propos de l’interface vmbr0, celle qui nous relie à Internet. On ajoute deux règles :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On autorise les nouvelles connexions sur le port SSH qui passent par vmbr0 et dont la destination est notre IP publique.&lt;/li&gt;
&lt;li&gt;On autorise les nouvelles connexions sur le port 8006 qui passent par vmbr0 et dont la destination est notre IP publique.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ça c’est seulement pour les paquets entrant, donc les personnes qui veulent initier une connexion avec nous.&lt;/p&gt;
&lt;p&gt;Note : vérifiez bien que la ligne juste en dessous de &lt;code&gt;# Allow SSH server&lt;/code&gt; contient bien le port que vous utilisez pour SSH (et qu’on a exporté dans la variable SSHPORT) !&lt;/p&gt;
&lt;p&gt;Plus tard, on pourra même supprimer ces règles. À la place, on se connectera au VPN, et à partir de là on aura accès au SSH ou au Proxmox.&lt;/p&gt;
&lt;h3 id="46-output"&gt;4/6 OUTPUT
&lt;/h3&gt;&lt;p&gt;Ensuite, on ajoute les paquets sortants :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat &amp;gt;&amp;gt; /root/iptables.sh &amp;lt;&amp;lt; EOF
### OUTPUT RULES
# ---------------
# Allow ping out
iptables -A OUTPUT -p icmp -j ACCEPT
### Proxmox Host as CLIENT
# Allow HTTP/HTTPS
iptables -A OUTPUT -o \$PrxPubVBR -s \$PublicIP -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -o \$PrxPubVBR -s \$PublicIP -p tcp --dport 443 -j ACCEPT
# Allow DNS
iptables -A OUTPUT -o \$PrxPubVBR -s \$PublicIP -p udp --dport 53 -j ACCEPT
### Proxmox Host as SERVER
# Allow SSH
iptables -A OUTPUT -o \$PrxPubVBR -s \$PublicIP -p tcp --sport ${SSHPORT} -j ACCEPT
# Allow PROXMOX WebUI
iptables -A OUTPUT -o \$PrxPubVBR -s \$PublicIP -p tcp --sport 8006 -j ACCEPT
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;D’abord, on autorise les pings à sortir. Cette règle est redondante avec une autre précédente où on autorisait les pings dans tous les sens.&lt;/p&gt;
&lt;p&gt;L’idée, c’est que la règle précédente est très permissive pour pouvoir debugger. Mais elle est pas censée rester pour toute la vie.&lt;/p&gt;
&lt;p&gt;Par contre, autoriser un ping sortant, ça peut toujours servir à l’occasion, et ça pose zéro problème de sécurité.&lt;/p&gt;
&lt;p&gt;Puis j’autorise les paquets HTTP et HTTPS à sortir. Ça c’est ce qui va nous donner accès à l’internet. D’ailleurs vous pouvez essayer. Envoyez un ping vers 1.1.1.1 avant d’entrer ces nouvelles règles, ça devrait être bloqué, puis ré-essayez après avoir entré ces nouvelles règles, et ça devrait marcher !&lt;/p&gt;
&lt;p&gt;Cette règle vous servira par exemple à télécharger des images ISO ou à mettre à jour le serveur. Ce n’est pas cette règle qui sert à donner accès à l’internet au VM par contre.&lt;/p&gt;
&lt;p&gt;Et c’est tout pour les règles output. Vous noterez que m4vr0x en avait ajouté pas mal plus. Je vous conseille d’en rajouter seulement si vous en avez besoin. De base, on est parcimonieux.&lt;/p&gt;
&lt;p&gt;Par exemple les règles output pour le port SSH et le port 8006 ne sont pas nécessaires. En effet, on les accepte déjà dans INPUT, ce qui permet à votre ordinateur local d’initier une connexion avec le serveur. Une fois la connexion initiée, tous les paquets sont autorisés (c’est la règle qu’on avait ajouté dans les GLOBAL RULES). La plupart des règles concernent les nouvelles connexions.&lt;/p&gt;
&lt;h3 id="56-forward"&gt;5/6 FORWARD
&lt;/h3&gt;&lt;p&gt;Finalement, il ne reste plus qu’à dire qu’on route tout le trafic vers la PFSense :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat &amp;gt;&amp;gt; /root/iptables.sh &amp;lt;&amp;lt; EOF
### FORWARD RULES
# ----------------
### Redirect (NAT) traffic from internet
# All tcp to PFSense WAN except ${SSHPORT}, 8006
iptables -A PREROUTING -t nat -i \$PrxPubVBR -p tcp --match multiport ! --dports ${SSHPORT},8006 -j DNAT --to \$PfsVmWanIP
# All udp to PFSense WAN
iptables -A PREROUTING -t nat -i \$PrxPubVBR -p udp -j DNAT --to \$PfsVmWanIP
# Allow request forwarding to PFSense WAN interface
iptables -A FORWARD -i \$PrxPubVBR -d \$PfsVmWanIP -o \$PrxVmWanVBR -p tcp -j ACCEPT
iptables -A FORWARD -i \$PrxPubVBR -d \$PfsVmWanIP -o \$PrxVmWanVBR -p udp -j ACCEPT
# Allow request forwarding from LAN
iptables -A FORWARD -i \$PrxVmWanVBR -s \$VmWanNET -j ACCEPT
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Le début est une règle de PREROUTING. Ça veut dire que l’action s’exécute sur le paquet avant toute autre chose. Par exemple, si José essaie de se connecter sur le port 3812 de votre Nextcloud, on veut pas forcément le dropper. Ce genre de décision sera le futur boulot de la PFSense. Sans la règle de pré-routing, le paquet serait droppé par défaut.&lt;/p&gt;
&lt;p&gt;Donc à la place, on l’envoie&amp;hellip; vers la PFSense.&lt;/p&gt;
&lt;p&gt;Notez que cette règle s’applique SAUF pour les ports SSH et 8006, qui ont un traitement un peu particulier. De nouveau, plus tard, quand vous aurez mis le VPN, on pourra aussi supprimer ces règles.&lt;/p&gt;
&lt;p&gt;Le paragraphe suivant va de pair avec ce qu’on vient de faire. En gros ça dit : Si un paquet est en transfert d’Internet vers la PFSense, alors on l’autorise. Et ça tombe bien, puisqu’on vient juste de dire que tous les paquets qui viennent d’Internet sont automatiquement transférés vers la PFSense.&lt;/p&gt;
&lt;p&gt;Finalement, on fait aussi l’inverse. Tous les paquets qui sont en transfert depuis la PFSense (et donc qui se dirigent de toute vraisemblance vers Internet) sont acceptés aussi. La communication, ça va dans les deux sens.&lt;/p&gt;
&lt;p&gt;Donc là, je résume : Un paquet vient d’Internet. On le pré-route vers la PFSense. On accepte ce transfert. La PFSense le reçoit. La PFSense va prendre une décision, par exemple l’envoyer vers une VM, recevoir une réponse, puis renvoyer ce paquet vers Internet. On accepte ce transfert de nouveau.&lt;/p&gt;
&lt;p&gt;On a tout ce qu’il faut pour que les VMs aient accès à Internet.&lt;/p&gt;
&lt;h3 id="66-masquerade"&gt;6/6 MASQUERADE
&lt;/h3&gt;&lt;p&gt;SAUF ! Le port forwarding. La petite astuce en gros qui permet à une machine d’un réseau local à accéder à Internet sans avoir d’IP publique :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat &amp;gt;&amp;gt; /root/iptables.sh &amp;lt;&amp;lt; EOF
### MASQUERADE MANDATORY
# Allow WAN network (PFSense) to use vmbr0 public adress to go out
iptables -t nat -A POSTROUTING -s \$VmWanNET -o \$PrxPubVBR -j MASQUERADE
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A partir de là, le script est prêt. Tentez de l’exécutez et si vous ne vous jetez pas dehors bravo vous avez gagné !&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;chmod +x /root/iptables.sh
/root/iptables.sh
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Là maintenant votre LAN est raccordé à Internet.&lt;/p&gt;
&lt;h2 id="spécificité-virtio"&gt;Spécificité VirtIO
&lt;/h2&gt;&lt;p&gt;Sauf si&amp;hellip; vous aviez choisi VirtIO comme modèle de carte réseau dans le tuto précédent.&lt;/p&gt;
&lt;p&gt;Si vous pingez 1.1.1.1 depuis votre VM Ubuntu, vous allez réussir à joindre Internet. C’est un signe que les règles que nous avons mises fonctionnent bien. Mais&amp;hellip; pourtant, l’accès à Internet ne va pas forcément marcher.&lt;/p&gt;
&lt;p&gt;C’est un problème qui m’a cassé la tête pendant longtemps. Jusqu’à ce que je tombe sur ce thread au titre évocateur : &amp;ldquo;Quelqu’un a-t-il réussi à *** un *** de PFSense avec Proxmox (lien mort)&amp;rdquo;&lt;/p&gt;
&lt;p&gt;En fait, la solution est documentée sur le &lt;a class="link" href="https://docs.netgate.com/pfsense/en/latest/recipes/virtualize-proxmox.html" target="_blank" rel="noopener"
&gt;site officiel de pfsense (lien mort, j&amp;rsquo;utilise Internet Archive)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;La solution est donc d’aller dans System / Advanced / Networking au niveau des paramètres PFSense et de cocher la case Disable hardware checksum offload.&lt;/p&gt;
&lt;p&gt;Et pouf, ça marche.&lt;/p&gt;
&lt;h2 id="on-est-pas-mal-là-"&gt;On est pas mal là ?
&lt;/h2&gt;&lt;p&gt;A partir de maintenant, vous pouvez vous amuser à regarder les logs du firewall de la PFSense et vous verrez toutes les gentilles personnes qui se font refouler.&lt;/p&gt;
&lt;p&gt;On a bien avancé, mais il reste encore quelques petits détails à voir :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On doit toujours passer par une VM Ubuntu Desktop pour paramétrer la PFSense. Pas pratique.&lt;/li&gt;
&lt;li&gt;Le Proxmox est accessible depuis Internet. Pas optimal niveau sécurité.&lt;/li&gt;
&lt;li&gt;On ne sait pas comment servir un service depuis une VM qui soit accessible depuis Internet (un serveur nginx par exemple).&lt;/li&gt;
&lt;li&gt;Et aussi comment servir un service pour des besoins internes (un serveur SSH par exemple).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On va voir comment résoudre tout ça dans la prochaine partie. Et puis après on verra comment mettre un VPN en place pour que ce soit bien sécurisé.&lt;/p&gt;
&lt;h2 id="hébergement-de-services"&gt;Hébergement de services
&lt;/h2&gt;&lt;p&gt;Mais je suis sûr que vous avez hâte d’utiliser le potentiel de votre hyperviseur dès maintenant ! En tout cas, moi j’avais hâte :D&lt;/p&gt;
&lt;p&gt;Donc faisons-le, mais promettez-moi qu’après vous ferez les étapes pour mettre le VPN ;-p&lt;/p&gt;
&lt;h3 id="un-serveur-nginx-sur-internet"&gt;Un serveur nginx sur Internet
&lt;/h3&gt;&lt;p&gt;Pour l’exemple ici, on va utiliser notre VM UbuntuDesktop. C’est vraiment pour l’exemple, parce que je pense que c’est mieux d’isoler les services. 1 VM = 1 service.&lt;/p&gt;
&lt;p&gt;On va donc aller sur la VM, et dans le terminal on install nginx: &lt;code&gt;sudo apt install nginx&lt;/code&gt; (faites un update d’abord).&lt;/p&gt;
&lt;p&gt;Une fois l’installation faite, vérifiez que le serveur fonctionne bien en allant sur &lt;code&gt;http://localhost&lt;/code&gt; à partir de la VM. Vous devriez voir l’écran de bienvenue de nginx.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/02/welcome_to_nginx.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Maintenant, on veut arriver à accéder à cette page depuis Internet. Depuis chez nous quoi. Pour ça, on va aller dans la configuration de la PFSense, et cliquer sur Firewall/NAT, puis ajouter :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Interface : WAN&lt;/li&gt;
&lt;li&gt;Protocol : TCP&lt;/li&gt;
&lt;li&gt;Destination : Any&lt;/li&gt;
&lt;li&gt;Destination Port Range : 8001&lt;/li&gt;
&lt;li&gt;Redirect target IP : 192.168.9.10&lt;/li&gt;
&lt;li&gt;Redirect target port : 80&lt;/li&gt;
&lt;li&gt;Description : Serveur nginx&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ici il faut bien avoir en tête qu’on se met du point de vue de la VM dans le LAN. Donc destination signifie la destination du paquet qui part de la VM. On veut qu’il arrive d’Internet, sur le port 8001. Ce choix de port est complètement libre.&lt;/p&gt;
&lt;p&gt;Le Redirect target IP, c’est l’IP de la VM, ainsi que le port initial du serveur nginx. Là on n’a pas le choix par contre.&lt;/p&gt;
&lt;p&gt;On valide et on applique les changements.&lt;/p&gt;
&lt;p&gt;Vous remarquerez qu’une règle a automatiquement été ajoutée dans Firewall/Rules. Oui parce que c’est bien de mettre un NAT en place, mais si le port 80 n’est pas ouvert au niveau de la PFSense, les paquets ne passeront pas.&lt;/p&gt;
&lt;p&gt;On attend une petite minute, et on essaie d’accéder : &lt;code&gt;http://proxmox.example.org:8001&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/02/welcome_to_nginx2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Gagné !&lt;/p&gt;
&lt;h3 id="un-serveur-ssh-sur-linternet-privé"&gt;Un serveur SSH sur l’internet privé
&lt;/h3&gt;&lt;p&gt;Bon, maintenant supposons qu’on veuille mettre en place un serveur SSH.&lt;/p&gt;
&lt;p&gt;Oui parce que la console via l’interface de Proxmox, c’est ok, mais bon, autant utiliser le terminal dont on a l’habitude.&lt;/p&gt;
&lt;p&gt;C’est différent du serveur nginx parce que cette fois-ci, on n’a pas besoin de le déployer publiquement. Moi je dis que si un service est réservé à un usage privé, il faut le laisser privé. Sinon on multiplie les angles d’attaque pour les méchants.&lt;/p&gt;
&lt;p&gt;Donc là l’objectif c’est de pouvoir se connecter en SSH sur notre machine UbuntuDesktop à partir de l’hyperviseur. Donc oui, il faut d’abord SSH dans l’hyperviseur, et à partir de là, on SSH dans la VM. Trop d’étapes ? Plus tard, avec le VPN, vous pourrez directement SSH dans la machine sans cette étape intermédiaire.&lt;/p&gt;
&lt;p&gt;Premièrement, installons le serveur SSH sur la VM Ubuntu : &lt;code&gt;sudo apt install openssh-server&lt;/code&gt;. De base, il va écouter sur le port 22, et on va laisser ça comme ça.&lt;/p&gt;
&lt;p&gt;Vous l’avez compris, il va falloir ouvrir le port sur la PFSense. Pas de NAT cette fois-ci, juste une ouverture de port. Donc dans Firewall/Rules :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Action : Pass&lt;/li&gt;
&lt;li&gt;Interface : WAN&lt;/li&gt;
&lt;li&gt;Address Family : IPv4&lt;/li&gt;
&lt;li&gt;Protocol : TCP&lt;/li&gt;
&lt;li&gt;Source : Single host = 10.0.0.1&lt;/li&gt;
&lt;li&gt;Destination : LAN net (on pourrait se limiter à notre VM, mais on va probablement vouloir se connecter en SSH systématiquement à toutes les VMs)&lt;/li&gt;
&lt;li&gt;Destination port Range : 22&lt;/li&gt;
&lt;li&gt;Description : SSH pour les VMs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On valide, on applique les changements, on attend une petite minute, et on essaie depuis l’hyperviseur : &lt;code&gt;ssh charles@192.168.9.10&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Timeout.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/02/ah.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ah !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pourquoi ?&lt;/p&gt;
&lt;p&gt;C’est là que je vous annonce que tout à la fin de ce tutorial, vous trouverez une section Comment débugger qui vous apprendra comment écouter des paquets et comprendre ce qui se passe sur vos machines. Voici un petit récap en attendant.&lt;/p&gt;
&lt;p&gt;Un moyen de comprendre les flux de paquets, pourquoi ils sont bloqués, où est-ce qu’ils sont bloqués, etc., c’est d’utiliser la commande &lt;code&gt;tcpdump&lt;/code&gt; qui permet de sniffer le trafic sur votre machine. Cette commande m’a énormément aider pour suivre le tuto de m4vr0x, donc je vous donne l’astuce aussi.&lt;/p&gt;
&lt;p&gt;Un &lt;code&gt;tcpdump -i vmbr1 -p tcp&lt;/code&gt; permet d’écouter sur l’interface WAN. Outre le bruit des méchants qui tapent à votre porte, on s’attend à voir des paquets SSH aller de 10.0.0.1 vers 192.168.9.10. Il n’en est rien. Ça veut dire quoi ? Ça veut dire que les paquets ne partent même pas de la machine. Pourquoi ?
&amp;hellip;&lt;/p&gt;
&lt;p&gt;Les iptables ! Mais oui. On n’a jamais dit qu’on acceptait de faire sortir des paquets sur le port 22.&lt;/p&gt;
&lt;p&gt;Une autre astuce de tonton : Dans le fichier iptables qu’on avait créé, vous pouvez rajouter l’instruction suivante : &lt;code&gt;iptables -A OUTPUT -p tcp -o vmbr1 -j LOG&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Placez-la avant les instructions qui bloquent tout (donc vers le début du fichier). Ça vous permettra d’enregistrer tout le trafic qui correspond à l’instruction (en l’occurrence, ici, les paquets sortants en TCP sur l’interface vmbr1), et donc de voir ce qui est bloqué et ce qui ne l’est pas. Les logs s’enregistrent dans &lt;code&gt;/var/log/syslog&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ici, tout simplement, on va dire qu’on autorise les paquets à sortir sur l’interface vmbr1. Rajoutez à la fin du fichier iptables ces quelques lignes :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat &amp;gt;&amp;gt; /root/iptables.sh &amp;lt;&amp;lt; EOF
# --------------------
# RULES FOR PrxVmWanVBR
# --------------------
### Allow being a client for the VMs
iptables -A OUTPUT -o \$PrxVmWanVBR -s \$ProxVmWanIP -p tcp -j ACCEPT
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;(Promis, on y touche plus)&lt;/p&gt;
&lt;p&gt;Ici, vous avez peut-être deux questions qui vous viennent à l’esprit.&lt;/p&gt;
&lt;p&gt;On avait pas &lt;em&gt;déjà&lt;/em&gt; l’ensemble du trafic qui était autorisé de l’hyperviseur vers la PFSense ?! Alors, oui, mais seulement en FORWARD. On avait mis une règle qui acceptait tous les paquets qui provenaient d’Internet et qui étaient transférés vers la PFSense. Là, dans ce cas, on accepte tous les paquets en provenance de l’hyperviseur vers la PFSense.&lt;/p&gt;
&lt;p&gt;Pourquoi on ne limite pas au port 22 ? C’est un peu brutal cette ouverture générale non ? C’est vrai. L’idée, c’est de ne pas avoir à toucher à ce fichier dès qu’on veut rajouter un service. On sous-traite la gestion des autorisations à la PFSense. Et comme c’est seulement les connexions qui sont issues de l’hyperviseur, donc les communications internes, ce n’est pas gênant.&lt;/p&gt;
&lt;p&gt;De nouveau, le VPN résoudra ce genre de problèmes.&lt;/p&gt;
&lt;p&gt;À présent, essayez de vous connecter en SSH depuis l’hyperviseur vers la VM, et ça marche !&lt;/p&gt;
&lt;h3 id="accéder-à-la-pfsense-depuis-internet"&gt;Accéder à la PFSense depuis Internet
&lt;/h3&gt;&lt;p&gt;Dernier petit point important avant de passer au VPN : Comment accéder à la PFSense depuis votre laptop sans utiliser cette VM qui lag du cul ? (Oui bon désolé mais là j’écris ce tutorial en étant en Asie et ma VM est en Allemagne, c’est horrible le lag !)&lt;/p&gt;
&lt;p&gt;&lt;del&gt;C’est très simple. On va juste ouvrir le port HTTPS sur la PFsense. Ajoutons la règle suivante :&lt;/del&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;del&gt;Action : Pass&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Interface : WAN&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Address Family : IPv4&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Protocol : TCP&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Source : Any&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Destination : This firewall (self)&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Destination Port Range : HTTPS&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Description : Accès à la PFSense depuis Internet&lt;/del&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;del&gt;À présent, si vous vous connectez sur &lt;a class="link" href="https://example.org" target="_blank" rel="noopener"
&gt;https://example.org&lt;/a&gt;, vous pourrez accéder à la PFSense.&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note de zwindler&lt;/strong&gt; : On préférera plutôt ajouter une règle similaire à la précédente qui autorise &lt;code&gt;10.0.0.1&lt;/code&gt; à accéder à 192.168.9.254 sur le port 443. Ceci nous permettra de refaire marcher notre tunnel SSH (qui ne marche plus depuis qu’on a ajouté la route en tout début de ce 2ème article) pour avoir la console pfsense en local sur votre machine Linux ou Windows.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/05/pfsense_tunnel.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="sécuriser-les-services-privés-avec-un-vpn"&gt;Sécuriser les services privés avec un VPN
&lt;/h2&gt;&lt;p&gt;Bon, c’est bien tout ça. On est presque au bout.&lt;/p&gt;
&lt;p&gt;Mais il reste des problèmes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;J’aime pas trop avoir cette PFSense accessible par n’importe qui (zwindler: &amp;ldquo;moi non plus&amp;rdquo;). Y’a que moi qui en ai besoin après tout.&lt;/li&gt;
&lt;li&gt;Pareil pour l’hyperviseur Proxmox, que ce soit au niveau de l’accès SSH ou de l’interface web.&lt;/li&gt;
&lt;li&gt;Et puis c’est chiant pour SSH dans une VM. Il faut faire 2 étapes. C’est long 2 étapes !&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Woh woh.. calmos ! Le VPN va résoudre tous ces problèmes.&lt;/p&gt;
&lt;p&gt;L’idée c’est qu’on va créer un nouveau réseau virtuel : 10.2.2.0/24. La PFSense sera dans ce réseau virtuel. Et on va pouvoir se connecter dans ce réseau virtuel, de telle sorte que notre laptop aura une IP privée du type 10.2.2.2 (le 10.2.2.1 sera réservé à la PFSense).&lt;/p&gt;
&lt;p&gt;À partir de là, modulo 2-3 changements, on pourra accéder au LAN à travers la PFSense. Et évidemment, il n’y a que nous qu’on aura le droit de se connecter au VPN.
Et le truc super cool, c’est que la PFSense rend cette création de VPN su-per-sim-ple. Allez, c’est parti ! Déjà, il faut créer des certificats.&lt;/p&gt;
&lt;h3 id="création-de-lautorité-de-certification"&gt;Création de l’autorité de certification
&lt;/h3&gt;&lt;p&gt;Dans la PFSense, on clique sur System/Cert. Manager. puis Ajouter :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Descriptive Name : L’autorité de Certification&lt;/li&gt;
&lt;li&gt;Method : Create an internal Certificate Authority&lt;/li&gt;
&lt;li&gt;Key length : 2048 (note de zwindler: MINIMUM, n’hésitez pas à mettre 4096)&lt;/li&gt;
&lt;li&gt;Digest Algorithm : sha256&lt;/li&gt;
&lt;li&gt;Lifetime : 3650&lt;/li&gt;
&lt;li&gt;Common Name : example.org (changez pour le nom de votre autorité)&lt;/li&gt;
&lt;li&gt;Country Code : FR&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="création-du-certificat-pour-le-serveur"&gt;Création du certificat pour le serveur
&lt;/h3&gt;&lt;p&gt;Maintenant on clique sur l’onglet « Certificates », puis Ajouter :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Method : Create an internal Certificate&lt;/li&gt;
&lt;li&gt;Descriptive Name : Le serveur VPN&lt;/li&gt;
&lt;li&gt;Certificate authority : Choisissez votre autorité de certification nouvellement créée&lt;/li&gt;
&lt;li&gt;Key length : 2048 (note de zwindler: MINIMUM, n’hésitez pas à mettre 4096)&lt;/li&gt;
&lt;li&gt;Digest Algorithm : sha256&lt;/li&gt;
&lt;li&gt;Lifetime : 3650&lt;/li&gt;
&lt;li&gt;Common Name : vpn.example.org (changez pour le nom du serveur VPN)&lt;/li&gt;
&lt;li&gt;Certificate Type : Server Certificates&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="création-du-certificat-pour-le-client"&gt;Création du certificat pour le client
&lt;/h3&gt;&lt;p&gt;On recrée un nouveau certificat, mais changer le type à la fin :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Method : Create an internal Certificate&lt;/li&gt;
&lt;li&gt;Descriptive Name : Le client VPN&lt;/li&gt;
&lt;li&gt;Certificate authority : Choisissez votre autorité de certification nouvellement créée&lt;/li&gt;
&lt;li&gt;Key length : 2048 (note de zwindler: MINIMUM, n’hésitez pas à mettre 4096)&lt;/li&gt;
&lt;li&gt;Digest Algorithm : sha256&lt;/li&gt;
&lt;li&gt;Lifetime : 3650&lt;/li&gt;
&lt;li&gt;Common Name : vpn-client.example.org (changez pour le nom du client VPN)&lt;/li&gt;
&lt;li&gt;Certificate Type : User Certificates&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;C’est fini pour la création de certificats !&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/02/certificats.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h3 id="création-du-serveur-vpn"&gt;Création du serveur VPN
&lt;/h3&gt;&lt;p&gt;On va dans VPN/OpenVPN et Ajouter :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Server mode : Remote Access (TLS + User Auth)&lt;/li&gt;
&lt;li&gt;Protocol : UDP&lt;/li&gt;
&lt;li&gt;Interface : WAN&lt;/li&gt;
&lt;li&gt;Local Port : 18223 : De nouveau, on change le port par défaut.&lt;/li&gt;
&lt;li&gt;Description : Mon VPN&lt;/li&gt;
&lt;li&gt;TLS Configuration : Activé&lt;/li&gt;
&lt;li&gt;Peer Certificate Authority : Choisissez votre autorité de certification&lt;/li&gt;
&lt;li&gt;Server Certificate : Choisissez le certificat pour le serveur&lt;/li&gt;
&lt;li&gt;DH Parameter Length : Note de zwindler - n’hésitez pas à passer à 4096&lt;/li&gt;
&lt;li&gt;Encryption Algorithm : N’hésitez pas à choisir un peu plus que le choix par défaut AES-128&lt;/li&gt;
&lt;li&gt;IPv4 Tunnel Network : 10.2.2.0/24&lt;/li&gt;
&lt;li&gt;Redirect IPv4 Gateway : Activé. Cette case vous permettra d’accéder à l’internet à travers le VPN. Sinon, vous pouvez spécifier le réseau local auquel vous souhaitez accéder avec le VPN (192.168.9.0/24 dans notre cas).&lt;/li&gt;
&lt;li&gt;Concurrent connections : 3. Une pour l’ordi, une pour le téléphone, et une pour un attaquant. Non je déconne :D Mettez 2. Ou en tout cas, mettez le nombre correspondant au nombre d’appareils que vous connecterez simultanément.&lt;/li&gt;
&lt;li&gt;Compression : Disable Compression. Conseillé pour ne pas être sensible aux attaques VORACLE.&lt;/li&gt;
&lt;li&gt;Push Compression : Cochez la case. Ne pas cocher cette case m&amp;rsquo;empêchait de me connecter via mon laptop sous linux. Mais ça marchait avec Android. Cocher juste la case et épargnez-vous le mal de crâne.&lt;/li&gt;
&lt;li&gt;Dynamic IP : Cochez la case.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et voilà !
Maintenant il nous faut un utilisateur et on pourra se connecter.&lt;/p&gt;
&lt;h3 id="création-de-lutilisateur-pour-le-vpn"&gt;Création de l’utilisateur pour le VPN
&lt;/h3&gt;&lt;p&gt;Dans System/User manager, cliquez sur Ajouter.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disabled : On ne coche pas la case.&lt;/li&gt;
&lt;li&gt;Username : charles&lt;/li&gt;
&lt;li&gt;Password : xxx&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Enregistrer. Puis retournez éditer l’utilisateur et ajoutez-lui le certificat client que nous avons créé plus tôt. Dans User Certificates, cliquez sur Ajouter, puis :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Method : Choose an existing certificate&lt;/li&gt;
&lt;li&gt;Existing Certificate : Le Client VPN&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On enregistre.&lt;/p&gt;
&lt;h3 id="configuration-du-client"&gt;Configuration du client
&lt;/h3&gt;&lt;p&gt;On est bon !
On peut facilement exporter un fichier de configuration pour automatiquement configurer votre client VPN, que ce soit sous Windows, Mac, Linux, Android, ou votre machine à café intelligente. Oui oui, il est conseillé de connecter vos &lt;em&gt;objects connectés&lt;/em&gt; à un VPN si vous souhaitez y accéder à distance. Ce sont de vraies passoires de sécurité.&lt;/p&gt;
&lt;p&gt;On va dans System/Package Manager, puis Available Packages, et on cherche &lt;em&gt;export&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/02/openvpn-client.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Puis on install openvpn-client-export.
On retourne dans VPN/OpenVPN, et on trouve le nouvel onglet Client Export.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Remote Access Server : Mon VPN&lt;/li&gt;
&lt;li&gt;Host Name Resolution : &lt;em&gt;Other&lt;/em&gt; puis on renseigne l’IP publique de notre serveur.&lt;/li&gt;
&lt;li&gt;Use Random Local Port : On coche la case.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On enregistre et on scrolle jusqu’en bas.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/02/openvpn-client2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Ici on a plein de possibilités d’exports.&lt;/p&gt;
&lt;p&gt;Moi je prends le Most Clients parce que ça marche chez moi.&lt;/p&gt;
&lt;p&gt;Voilà voilà.&lt;/p&gt;
&lt;p&gt;Ensuite, sur mon ordinateur local, qui est un Ubuntu, je vais dans la configuration Réseau, et je clique sur le petit + à côté de VPN. Je choisis &amp;ldquo;Import from file&amp;hellip;&amp;rdquo; et j’importe le fichier que je viens juste de télécharger. Il vous faudra peut-être installer le client openvpn d’abord, si vous n’avez pas l’option.&lt;/p&gt;
&lt;p&gt;Normalement, tout est déjà pré-rempli, sauf, le username et le password. Entrez ceux de l’utilisateur qu’on a créé plus tôt.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/02/openvpn-client3.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Et voili voiloù !&lt;/p&gt;
&lt;p&gt;Ça marche chez vous ?&lt;/p&gt;
&lt;p&gt;Parce que chez moi, pas encore&amp;hellip;&lt;/p&gt;
&lt;p&gt;Ah oui. Toujours ces histoires de pare-feu. C’est ennuyant à la fin.&lt;/p&gt;
&lt;h3 id="ouverture-des-chakras"&gt;Ouverture des chakras
&lt;/h3&gt;&lt;p&gt;Il y a deux modifications à faire.&lt;/p&gt;
&lt;p&gt;Imaginez un paquet du VPN. Il arrive sur votre serveur. Il demande son chemin pour aller vers son réseau, c’est-à-dire 10.2.2.0/24. Que lui dit la table de routage ?&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 xx.xx.xx.xx 0.0.0.0 UG 0 0 0 vmbr0
10.0.0.0 0.0.0.0 255.255.255.252 U 0 0 0 vmbr1
xx.xx.xx.xx 0.0.0.0 255.255.255.224 U 0 0 0 vmbr0
192.168.9.0 10.0.0.2 255.255.255.0 UG 0 0 0 vmbr1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;En gros : retourne chez toi.&lt;/p&gt;
&lt;p&gt;On va rajouter une route pour le VPN. Retournez dans le fichier /root/pfsense-route.sh` et rajoutez cette ligne :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;## Rediriger les paquets destinés au VPN pour l&amp;#39;interface WAN de la PFsense
ip route add 10.2.2.0/24 via 10.0.0.2 dev vmbr1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ensuite, exécuter le fichier. Assurez-vous que la route est bien correcte avec &lt;code&gt;netstat -r -n&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Là on dit aux paquets destinés au réseau VPN d’aller vers la PFSense. Elle saura bien quoi en faire. Est-ce qu’on doit modifier les iptables ? Non, les paquets en transfert qui viennent d’Internet sont déjà acceptés.&lt;/p&gt;
&lt;p&gt;Alors c’est bon ?&lt;/p&gt;
&lt;p&gt;Non.&lt;/p&gt;
&lt;p&gt;Il faut que la PFSense accepte ces paquets aussi. Dans l’interface, on rajoute deux règles. La première dit d’accepter les paquets en UDP qui sont à destination de la PFSense sur le port du VPN :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Action : Pass&lt;/li&gt;
&lt;li&gt;Interface : WAN&lt;/li&gt;
&lt;li&gt;Address Family : IPv4&lt;/li&gt;
&lt;li&gt;Protocol : UDP&lt;/li&gt;
&lt;li&gt;Source : Any&lt;/li&gt;
&lt;li&gt;Destination : WAN net&lt;/li&gt;
&lt;li&gt;Destination port range : 18223 (mettez le port du VPN)&lt;/li&gt;
&lt;li&gt;Description : Accès au VPN depuis Internet&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Maintenant, vous pouvez tester le VPN. Vous devriez pouvoir vous connecter et aussi accès à Internet en étant connecté. Oubliez pas d’activer les changements après avoir créé la règle, ça m’arrive tout le temps.&lt;/p&gt;
&lt;p&gt;Ah oui en fait non, vous n’allez pas avoir accès à Internet. On n’a pas autorisé les paquets qui proviennent du VPN. On ajoute cette nouvelle règle :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Action : Pass&lt;/li&gt;
&lt;li&gt;Interface : OpenVPN&lt;/li&gt;
&lt;li&gt;Address Family : IPv4&lt;/li&gt;
&lt;li&gt;Protocol : Any&lt;/li&gt;
&lt;li&gt;Source : Network - 10.2.2.0/24&lt;/li&gt;
&lt;li&gt;Destination : Any&lt;/li&gt;
&lt;li&gt;Description : Accès à Internet depuis le VPN&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et voilà !
À présent, depuis le VPN, vous avez accès à :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Internet&lt;/li&gt;
&lt;li&gt;Les services du WAN, c’est-à-dire la PFSense et le Proxmox (et le SSH vers Proxmox)&lt;/li&gt;
&lt;li&gt;Le réseau LAN. Tapez par exemple 192.168.9.10 dans votre navigateur, et vous tomberez sur le serveur nginx qu’on a déployé plus tôt.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;C’est pas beau ça ?&lt;/p&gt;
&lt;p&gt;Bravo ! C’est un solide travail que vous avez fait pour en arriver là.&lt;/p&gt;
&lt;h2 id="le-vpn-vous-sauvera"&gt;Le VPN vous sauvera
&lt;/h2&gt;&lt;p&gt;On pourrait s’arrêter là.. Sauf que. J’ai pas arrêté de vous dire tout le long du tuto que « Tel truc sera résolu quand on aura le VPN ». Eh bien il est temps de résoudre ces problèmes.&lt;/p&gt;
&lt;h3 id="protéger-la-pfsense"&gt;Protéger la PFSense
&lt;/h3&gt;&lt;p&gt;Déjà, la PFSense. À l’heure actuelle, elle est disponible sur les internets mondiaux. Si vous allez voir les logs, vous verrez plein d’individus qui s’y heurtent. C’est pas forcément très rassurant.&lt;/p&gt;
&lt;p&gt;Et puis, est-ce qu’on a vraiment besoin d’avoir l’interface disponible à la vue de tout le monde ? Bien sûr que non.&lt;/p&gt;
&lt;p&gt;Alors supprimez-moi cette règle qu’on avait ajouté :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/02/supr_regle_fw_pfsense.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Dans le doute, vous pouvez &lt;em&gt;seulement&lt;/em&gt; désactiver la règle en cliquant sur le ✓. Ça vous évitera de la recréer complètement si vous vous êtes planté quelque part.&lt;/p&gt;
&lt;p&gt;Vous n’aurez plus accès en tapant &lt;code&gt;https://example.org&lt;/code&gt; mais plutôt l’IP du LAN : &lt;code&gt;https://192.168.9.254&lt;/code&gt;. Pour changer le domaine, il faudra mettre en place un serveur DNS interne.&lt;/p&gt;
&lt;p&gt;Si vous retournez dans les logs, vous n’en verrez pas moins. Vous en verrez encore plus même ! Puisqu’à présent, vous verrez le blocage du port 443.&lt;/p&gt;
&lt;h3 id="protéger-linterface-web-du-proxmox"&gt;Protéger l’interface web du Proxmox
&lt;/h3&gt;&lt;p&gt;Là, on va faire pareil, mais un peu différent. À l’heure actuelle, on accède à l’interface web de Proxmox sans passer par la PFSense.&lt;/p&gt;
&lt;p&gt;À la place, on va :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rediriger le port 8006 vers la PFSense (en supprimant l’exception dans les iptables). Ceci annulera l’accès depuis Internet.&lt;/li&gt;
&lt;li&gt;Autoriser d’accéder au port 8006 du serveur proxmox depuis la PFSense. Ceci activera l’accès depuis le VPN.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dans le fichier des iptables, on va éditer la ligne suivante :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;iptables -A PREROUTING -t nat -i $PrxPubVBR -p tcp --match multiport ! --dports 21153,8006 -j DNAT --to $PfsVmWanIP
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On supprime tout simplement le 8006. Et on exécute le fichier. À présent, vous n’avez plus accès à l’interface web Proxmox du tout !
Oh, et on peut aussi supprimer ces lignes là : la règle qui accepte les paquets sur 8006 aussi, cette ligne-là :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;iptables -A TCP -i $PrxPubVBR -d $PublicIP -p tcp --dport 8006 -j ACCEPT
iptables -A OUTPUT -o $PrxVmWanVBR -s $ProxVmWanIP -p tcp -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Autrement dit :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On arrête d’accepter les pings dans tous les sens&lt;/li&gt;
&lt;li&gt;On arrête d’accepter les paquets entrant sur 8006&lt;/li&gt;
&lt;li&gt;On arrête d’accepter les paquets sortant sur le port SSH&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rappelez-vous que le serveur Proxmox n’est pas une VM ordinaire. C’est une VM avec un fichier iptables ! Il faut juste qu’on lui dise d’accepter les paquets qui viennent de la PFSense. Par où ? Par vmbr1. Rappelez-vous qu’on a condamné l’accès vmbr2. Voici la règle à rajouter dans les iptables :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;iptables -A TCP -i $PrxVmWanVBR -d $ProxVmWanIP -p tcp --dport 8006 -j ACCEPT
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Exécutez le fichier. À présent, vous pouvez accéder à &lt;code&gt;https://10.0.0.1:8006&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Est-ce qu’on a besoin d’ajouter une règle dans PFSense ? Non ! On a déjà une règle qui dit : Depuis le VPN, on a accès à tout.&lt;/p&gt;
&lt;h3 id="protéger-le-ssh-du-proxmox"&gt;Protéger le SSH du Proxmox
&lt;/h3&gt;&lt;p&gt;Bon. Là, on pourrait faire exactement la même opération pour protéger le SSH du Proxmox. De telle sorte qu’il ne soit accessible que depuis le VPN.&lt;/p&gt;
&lt;p&gt;Mais ça devient un peu dangereux&amp;hellip; Qu’est-ce qui se passe si vous perdez accès au VPN ? Genre vous supprimez la config par erreur. Ou votre ordi meurt et vous n’avez pas backup la config ?&lt;/p&gt;
&lt;p&gt;Vous allez passer un sale dimanche.&lt;/p&gt;
&lt;p&gt;Alors il est toujours possible de résoudre le problème si votre provider vous donne un accès à la console. Je sais que chez Hetzner, c’est possible gratuitement pendant 3 heures. Mais il faut prendre rendez-vous, c’est un peu galère.&lt;/p&gt;
&lt;p&gt;C’est pourquoi mon choix est de garder l’accès SSH sur Internet. Par contre, il faut être bien sûr d’avoir activé fail2ban.&lt;/p&gt;
&lt;p&gt;Ah ? On me dit dans l’oreillette que le script iptables efface toutes les règles de fail2ban. Oops.&lt;/p&gt;
&lt;p&gt;À la fin du script des iptables, on rajoute l’instruction suivante : &lt;code&gt;service fail2ban restart&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Dernière petite chose : Le script iptables ne se lance pas automatiquement au boot. Donc si le Proxmox redémarre, pouf on perd toutes nos règles. C’est beta.&lt;/p&gt;
&lt;p&gt;Pour résoudre ça, on va lancer apt install iptables-persistent`. Suivez les consignes, et à présent les règles persisteront après un reboot.&lt;/p&gt;
&lt;p&gt;Par contre, si jamais vous &lt;em&gt;changez&lt;/em&gt; le fichier des iptables, alors lancez l’instruction &lt;code&gt;iptables-save &amp;gt; /etc/iptables/rules.v4&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="nettoyage-des-règles-superflues"&gt;Nettoyage des règles superflues
&lt;/h3&gt;&lt;p&gt;Maintenant qu’on a le VPN, on peut supprimer quelques règles dans la PFSense.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Autoriser les pings ? Finis les pings ! On supprime.&lt;/li&gt;
&lt;li&gt;NATer le serveur nginx ? Oui bon ça ok on garde.&lt;/li&gt;
&lt;li&gt;Autoriser le SSH pour les VMs ? Plus besoin ! Le VPN a accès à tout automatiquement.&lt;/li&gt;
&lt;li&gt;Accès au VPN depuis Internet ? Euuh oui ça on garde !&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Au final, voici mes règles (en gris clair celles qui sont désactivées) :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/02/pfsense_rules.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Petite checklist pour vérifier que tout marche bien :&lt;/p&gt;
&lt;p&gt;Depuis le VPN :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On a accès à la PFSense sur https://192.168.9.254&lt;/li&gt;
&lt;li&gt;On a accès au Proxmox sur https://10.0.0.1:8006&lt;/li&gt;
&lt;li&gt;On a accès au serveur web nginx sur http://192.168.9.10&lt;/li&gt;
&lt;li&gt;On a accès au serveur web nginx sur l’IP publique et port 8001.&lt;/li&gt;
&lt;li&gt;On peut se connecter en SSH à &lt;code&gt;charles@192.168.9.10&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hors du VPN :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pas d’accès à la PFSense sur &lt;a class="link" href="https://example.org" target="_blank" rel="noopener"
&gt;https://example.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Pas d’accès au Proxmox sur &lt;a class="link" href="https://example.org:8006" target="_blank" rel="noopener"
&gt;https://example.org:8006&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;On a accès au serveur web nginx sur l’IP publique et port 8001.&lt;/li&gt;
&lt;li&gt;On ne peut pas se connecter en SSH à &lt;code&gt;charles@192.168.9.10&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Checks ? Checks !&lt;/p&gt;
&lt;h2 id="comment-débugger"&gt;Comment débugger
&lt;/h2&gt;&lt;p&gt;Je ne m’attends pas forcément à ce que TOUT marche dans ce tutorial.&lt;/p&gt;
&lt;p&gt;Ça marche pour moi.&lt;/p&gt;
&lt;p&gt;Mais vous avez une machine différente, vous êtes dans le turfu, vous avez un provider différent, vous êtes peut-être même gaucher, qui sait ! Ça me paraît plus important de vous apprendre à vous débrouiller par vous-même que vous donner une liste d’instructions à copier/coller, et puis que quand ça ne marche pas vous soyez coincé.&lt;/p&gt;
&lt;p&gt;Je présente donc dans cette section les outils que j’ai appris et que j’ai trouvé très utiles pour débugger.&lt;/p&gt;
&lt;h3 id="sniffer-vos-paquets"&gt;Sniffer vos paquets
&lt;/h3&gt;&lt;p&gt;Quand vous essayez de pinger un serveur, ou juste de vous y connecter, et que ça ne marche pas, c’est frustrant.&lt;/p&gt;
&lt;p&gt;Le pointeur clignote, il se passe rien, et vous savez qu’il ne va rien se passer. Juste si vous attendez 1 minute ou 2, vous allez voir un joli &amp;ldquo;Timeout&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Ça peut être parce que le paquet s’est perdu, parce qu’il a été mangé par un pare-feu, ou même parce que le service auquel vous tentez d’accéder est hors ligne. Pour comprendre le cheminement d’un paquet, on peut utiliser &lt;code&gt;tcpdump&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;L’option &lt;code&gt;-i&lt;/code&gt; permet de spécifier l’interface sur laquelle vous écoutez. Par exemple : &lt;code&gt;tcpdump -i vmbr0&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;L’option &lt;code&gt;-p&lt;/code&gt; permet de spécifier le protocole que vous écoutez. Par exemple : &lt;code&gt;tcpdump -p udp&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Et l’option &lt;code&gt;port&lt;/code&gt; permet de spécifier le port. Par exemple : &lt;code&gt;tcpdump port 22&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Vous allez voir, ou non, si un paquet sort ou entre de chez vous ou non. S’il ne sort pas, il est en toute vraisemblance bloqué par iptables ou le pare-feu de la machine sur laquelle vous êtes.&lt;/p&gt;
&lt;p&gt;Vous pouvez utiliser cette instruction sur l’hyperviseur, sur une VM, et aussi sur la PFSense.&lt;/p&gt;
&lt;h3 id="loggez-les-iptables"&gt;Loggez les iptables
&lt;/h3&gt;&lt;p&gt;Est-ce que le script iptable est en train de dropper les paquets que vous envoyez ?&lt;/p&gt;
&lt;p&gt;Rajouter une instruction dans votre script avant l’instruction qui potentiellement droppe votre paquet. Par exemple, ajoutez :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;iptables -A OUTPUT -o vmbr1 -s 10.0.0.1 -p tcp -j LOG&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;En gros l’idée c’est de remplacer la fin (ACCEPT) par LOG. Et ensuite les logs s’afficheront dans &lt;code&gt;/var/log/syslog&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="utilisez-les-logs-de-pfsense"&gt;Utilisez les logs de PFSense
&lt;/h3&gt;&lt;p&gt;Dans l’interface de la PFsense, vous pouvez aller dans Status / System Logs, puis Firewall, pour voir toutes les connexions bloquées. La vôtre apparaît ? Il faudrait peut-être créer une règle. La vôtre n’apparaît pas ? Alors soit elle est passée, soit elle n’est même pas arrivée sur la PFSense.&lt;/p&gt;
&lt;p&gt;Au passage, en cliquant sur le petit +, vous pouvez facilement ajouter une règle qui concerne spécifiquement la connexion qui a été bloquée.&lt;/p&gt;
&lt;p&gt;Si vous suspectez qu’elle est passée, alors regardez par où elle est partie en sniffant les paquets de la machine. Soit avec &lt;code&gt;tcpdump&lt;/code&gt;, soit en allant dans Diagnostics/Packet Capture.&lt;/p&gt;
&lt;p&gt;Ah oui, et si vous venez juste de mettre à jour les règles du pare-feu.. donnez-lui quelques minutes. Ça m’est arrivé de me casser la tête sur un problème, de décider d’y revenir plus tard, et quand je suis revenu, le problème était résolu comme par magie. Il fallait juste attendre un peu.&lt;/p&gt;
&lt;p&gt;Un problème avec le VPN ? Les logs sont dans Status / System Logs, puis OpenVPN.&lt;/p&gt;</description></item><item><title>Proxmox VE 6 + pfsense sur un serveur dédié (1/2)</title><link>https://blog.zwindler.fr/2020/03/02/deploiement-de-proxmox-ve-6-pfsense-sur-un-serveur-dedie/</link><pubDate>Mon, 02 Mar 2020 07:35:00 +0000</pubDate><guid>https://blog.zwindler.fr/2020/03/02/deploiement-de-proxmox-ve-6-pfsense-sur-un-serveur-dedie/</guid><description>&lt;img src="https://blog.zwindler.fr/2020/03/article_logo_pfsense_proxmox.webp" alt="Featured image of post Proxmox VE 6 + pfsense sur un serveur dédié (1/2)" /&gt;&lt;blockquote&gt;
&lt;p&gt;Note de zwindler : cet article a été co-écrit par &lt;a class="link" href="https://www.charlesbordet.com/" target="_blank" rel="noopener"
&gt;Charles Bordet&lt;/a&gt;, et se veut être une version à jour de &lt;a class="link" href="https://blog.zwindler.fr/2017/07/11/deploiment-de-proxmox-ve-5-sur-un-serveur-dedie-part-1/" &gt;cette suite d’articles écrits sur ce blog&lt;/a&gt; (mais avec des versions obsolètes de Proxmox et de PFSense). Merci à lui !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2 id="introduction"&gt;Introduction
&lt;/h2&gt;&lt;p&gt;Je me présente rapidement : je m’appelle &lt;a class="link" href="https://www.charlesbordet.com" target="_blank" rel="noopener"
&gt;Charles&lt;/a&gt;, je suis data scientist, et j’utilise le serveur dont je vais vous décrire l’installation pour mes analyses de données et mes outils professionnels. Mais avant de commencer, retournons un peu en arrière.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note de zwindler&lt;/strong&gt; : vous pouvez &lt;a class="link" href="#archi" &gt;sauter l’intro et passer directement à l’architecture&lt;/a&gt; si vous voulez).&lt;/p&gt;
&lt;p&gt;Il y a un peu plus d’un an, je souscrivais pour la première fois à un VPS. Mon objectif ? Sortir de l’écosystème Google en auto-hébergeant mes propres services.&lt;/p&gt;
&lt;p&gt;J’avais déjà eu l’occasion d’utiliser des serveurs sur EC2, mais de manière très ponctuelle et plutôt limitée. J’avais besoin d’une grosse machine pour faire des calculs et 2 jours plus tard je coupais tout. Rien à voir avec l’hébergement continu, performant et sécurisé de services comme un Nextcloud, un Gitlab, et autres applis web que je voulais m’auto-fournir. C’était avant tout un test pour moi.&lt;/p&gt;
&lt;p&gt;Est-ce que j’allais trouver dans le monde de l’open source suffisamment de bonnes alternatives, et est-ce que j’allais réussir à les héberger ?&lt;/p&gt;
&lt;p&gt;Bilan au bout d’un an : J’en suis plutôt content. J’ai beaucoup appris et j’ai remplacé quasi tous les services Google.&lt;/p&gt;
&lt;p&gt;Sauf que&amp;hellip; Mes services sont répartis sur plusieurs VPS, et c’est un peu le bordel. Et puis j’ai pas de backups, à part ceux proposés par Hetzner. Mes bases de données ne sont pas répliquées. Et puis.. niveau sécurité, y’avait rien.&lt;/p&gt;
&lt;p&gt;C’est à ce moment-là que je suis retourné sur le blog qui tout au début m’avait permis de démarrer (un certain Dryusdan), et j’ai trouvé cet article : &lt;a class="link" href="https://www.dryusdan.fr/installer-un-cluster-proxmox-ceph-tinc-openvswitch/" target="_blank" rel="noopener"
&gt;Installer un cluster hyperconvergé avec Proxmox, Ceph, Tinc, OpenVSwitch&lt;/a&gt;. C’est marrant parce que je ne comprenais rien à ce titre, mais il m’a servi de nouveau point de départ. De fil en aiguille, je suis tombé sur l’article de m4vr0x : &lt;a class="link" href="https://blog.zwindler.fr/2017/07/11/deploiment-de-proxmox-ve-5-sur-un-serveur-dedie-part-1/" &gt;Déploiement de Proxmox VE 5 sur un serveur dédié – part 1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Et là, j’ai compris. Proxmox allait me servir à démarrer/arrêter mes propres VPS de manière complètement flexible, et en plus m4vr0x me présentait un tuto détaillé étape par étape pour avoir une infrastructure robuste et sécurisée.&lt;/p&gt;
&lt;p&gt;Top !&lt;/p&gt;
&lt;p&gt;J’ai commencé le tutoriel, et puis je me suis rapidement aperçu que ce que j’avais à l’écran n’était pas strictement identique aux étapes décrites par m4vr0x. Mon plus gros problème, c’est que je ne comprenais rien à ce que je faisais. C’est quoi une gateway ? Un routeur ? iptables ? Une masquerade ?&lt;/p&gt;
&lt;p&gt;Si c’est votre cas aussi, j’ai pris un &lt;a class="link" href="https://openclassrooms.com/fr/courses/857447-apprenez-le-fonctionnement-des-reseaux-tcp-ip" target="_blank" rel="noopener"
&gt;cours de réseau sur OpenClassrooms&lt;/a&gt; que je vous conseille très fortement si vous aussi vous avez l’impression d’avoir loupé un trimestre à la fac et que iptables n’était même pas parmi les langues étrangères proposées.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/02/apprennez_tcp_ip.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Et deux mois plus tard&amp;hellip; ça y est : j’ai mis en place mon serveur dédié avec l’hyperviseur Proxmox, sécurisé par PFSense. Certains services sont accessibles sur Internet, et d’autres seulement via le VPN privé, selon l’usage. Et mon objectif du jour, c’est de reprendre le tutoriel de m4vr0x, le remettre au goût du jour de 2020, et aussi de détailler les étapes où je me suis retrouvé bloqué, afin que vous ne le soyez pas.&lt;/p&gt;
&lt;p&gt;Mon gros problème quand j’ai commencé à rentrer dans ce monde de l’administration système, c’était le langage. Imaginez lire le code des impôts. Vous comprenez rien. Par contre, quand vous allez sur service-public.fr, on vous explique la loi avec des termes plus simples de tous les jours. Cet article, je l’adresse aussi à mon moi d’il y a deux mois qui ne comprenait rien à ces termes.&lt;/p&gt;
&lt;p&gt;Prêt ? C’est parti !&lt;/p&gt;
&lt;h2 id="larchitecture"&gt;L’architecture
&lt;/h2&gt;&lt;p&gt;Sans surprise, je vais reprendre l’architecture proposée par m4vr0x et son magnifique schéma :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_simple-infra-map.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Ça c’est notre objectif final qu’on détaillera un peu plus tard.&lt;/p&gt;
&lt;h3 id="proxmox-ve"&gt;Proxmox VE
&lt;/h3&gt;&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/02/proxmox_logo.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Proxmox, c’est une solution d’hyperviseur, de virtualisation, qui s’installe sur un serveur dédié. À la place d’avoir une Debian classique, vous avez une Debian légèrement modifiée qui vous donne Proxmox. Donc Proxmox, c’est avant tout un OS.&lt;/p&gt;
&lt;p&gt;C’est opensource et gratuit.&lt;/p&gt;
&lt;p&gt;Ce que j’aurais aimé qu’on me dise dès le début, c’est que Proxmox, c’est un peu comme VMware ou VirtualBox. On l’installe, et ensuite on peut créer des machines virtuelles dont on configure les composants comme on veut.&lt;/p&gt;
&lt;h3 id="pfsense"&gt;PFSense
&lt;/h3&gt;&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/02/pfsense.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;PFSense, c’est aussi un OS complet, cette fois-ci basé sur FreeBSD, qui va nous servir de pare-feu, de routeur, et aussi de VPN. Je suis sûr qu’il y a plein d’autres choses qu’on peut faire avec PFSense.&lt;/p&gt;
&lt;p&gt;Au début, je me demandais pourquoi utiliser PFSense alors que jusqu’ici j’utilisais toujours &lt;code&gt;ufw&lt;/code&gt; qui était pas mal. En plus, Proxmox propose lui aussi des fonctionnalités de pare-feu.&lt;/p&gt;
&lt;p&gt;Déjà un intérêt c’est que PFSense filtre les paquets avant qu’ils arrivent sur la VM. Alors que &lt;code&gt;ufw&lt;/code&gt; (ou iptables, c’est pareil) regarde les paquets une fois qu’ils sont sur la VM. Subtile différence.&lt;/p&gt;
&lt;p&gt;Ensuite, c’est une solution complète avec une belle interface qui va faire plus qu’un firewall basique.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La PFSense permet d’isoler le réseau local (LAN) qui va contenir toutes les VMs d’Internet.&lt;/li&gt;
&lt;li&gt;La PFSense a une belle interface qui permet d’aller voir les logs, extraire les paquets (très utile pour débugger !), et paramétrer tout ce qui a besoin de l’être.&lt;/li&gt;
&lt;li&gt;La PFSense est remplie d’outils utiles : Routeur, serveur DHCP, VPN, DNS, et sûrement d’autres que je ne comprends pas mais qui seront utiles plus tard pendant la vie d’adulte.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="le-hardware"&gt;Le hardware
&lt;/h3&gt;&lt;p&gt;Pas de comparaison de différents providers ici.&lt;/p&gt;
&lt;p&gt;Pour ma part, j’utilise Hetzner depuis le début, et c’est eux que j’ai choisi pour mon serveur dédié, notamment via le &lt;a class="link" href="https://www.hetzner.com/sb" target="_blank" rel="noopener"
&gt;Server Auction&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;J’ai pris une grosse machine avec :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un Intel Xeon E5-1650V3&lt;/li&gt;
&lt;li&gt;2 HDD de 4 To&lt;/li&gt;
&lt;li&gt;256 Go de RAM&lt;/li&gt;
&lt;li&gt;1 IP publique (pas de failover pour le moment mais ça ne change strictement rien à ce tuto)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tout ça pour environ 85€/mois. Bon plan ? Mauvais plan ? En vrai j’en sais trop rien. Je tenais à avoir beaucoup beaucoup de RAM parce que j’en ai régulièrement besoin pour mes analyses de données.&lt;/p&gt;
&lt;p&gt;Le seul hic c’est que comme le serveur est hébergé en Allemagne, quand je me connecte au VPN tout l’internet passe en allemand.&lt;/p&gt;
&lt;h3 id="linstallation"&gt;L’installation
&lt;/h3&gt;&lt;p&gt;Hetzner ne propose pas &lt;a class="link" href="https://wiki.hetzner.de/index.php/Standardimages/en" target="_blank" rel="noopener"
&gt;directement d’image Proxmox&lt;/a&gt;, ce qui est un peu dommage. &lt;a class="link" href="https://community.hetzner.com/tutorials/install-and-configure-proxmox_ve" target="_blank" rel="noopener"
&gt;Les pages d’aide&lt;/a&gt; proposent de partir d’une Debian et d’upgrader vers Proxmox tout à la main. Franchement pas évident.&lt;/p&gt;
&lt;p&gt;Heureusement, il existe une image &lt;em&gt;non officielle&lt;/em&gt; que j’ai utilisée et avec laquelle tout s’est très bien passé.&lt;/p&gt;
&lt;p&gt;Pour ça, il suffit de démarrer le serveur en mode &lt;em&gt;Rescue&lt;/em&gt; (on peut l’activer à tout moment dans l’interface).&lt;/p&gt;
&lt;p&gt;Une fois connecté en SSH, on accède aux images avec l’utilitaire &lt;code&gt;installimage&lt;/code&gt;. Dans la liste des OS proposés, choisissez « Other (!!NO SUPPORT!!) ». Oui hein c’est pas très rassurant tous ces points d’exclamation. Mais faites-moi confiance.&lt;/p&gt;
&lt;p&gt;C’est là que les images Proxmox apparaissent. J’en ai 3 pour Jessie, Strech, et Buster, qui correspondent respectivement à Debian 8, 9, et 10. Évidemment on va prendre Buster.&lt;/p&gt;
&lt;p&gt;Ensuite, un éditeur va s’ouvrir pour choisir la configuration du Proxmox.&lt;/p&gt;
&lt;p&gt;HARD DISK DRIVE(S)&lt;/p&gt;
&lt;p&gt;Ici je ne touche à rien, je monte mes deux HDDs :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;DRIVE1 /dev/sda
DRIVE2 /dev/sdb
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;SOFTWARE RAID&lt;/p&gt;
&lt;p&gt;Ici je laisse les valeurs par défaut aussi, ce qui me donne un Software RAID 1 :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;SWRAID 1
SWRAIDLEVEL 1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;HOSTNAME&lt;/p&gt;
&lt;p&gt;Ici, on demande spécifiquement un FQDN. Par exemple : &lt;code&gt;proxmox.example.org&lt;/code&gt;. Vous pouvez d’ailleurs dès maintenant paramétrer vos DNS pour qu’ils redirigent vers ce FQDN.&lt;/p&gt;
&lt;p&gt;PARTITIONS&lt;/p&gt;
&lt;p&gt;Et finalement, la partie la plus marrante, on crée les partitions.&lt;/p&gt;
&lt;p&gt;L’idée c’est d’avoir une partition pour le boot, et une partie pour LVM (Logical Volume Management). Moi ce que je comprends c’est que LVM est un système de partitionnement qui est plus flexible que la méthode traditionnelle et donc plus adaptée pour ce qu’on veut faire.&lt;/p&gt;
&lt;p&gt;Ensuite, dans la partie LVM, je mets une partition swap et tout le reste pour mon utilisation future.&lt;/p&gt;
&lt;p&gt;Au final, ça donne :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;PART /boot ext3 512M
PART lvm vg0 all
LV vg0 swap swap swap 2G
LV vg0 root / ext4 all
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;OPERATING SYSTEM IMAGE&lt;/p&gt;
&lt;p&gt;Là on change rien. Hetzner a déjà pré-rempli avec l’image Proxmox qu’on souhaite utiliser.&lt;/p&gt;
&lt;p&gt;Pour sortir de ce fichier, on peut faire F10. Bon ça marche pas chez moi, à la place j’ai le menu « File » de ma console qui se déroule. Du coup je fais deux fois &lt;em&gt;Échap&lt;/em&gt; et ça marche aussi. On enregistre évidemment.&lt;/p&gt;
&lt;p&gt;Et l’installation va se faire toute seule.&lt;/p&gt;
&lt;p&gt;Si vous avez fait une bêtise, pas d’inquiétude. Redémarrez le serveur en mode &lt;em&gt;Rescue&lt;/em&gt; et placez-vous sur la case départ (vous ne toucherez rien du tout par contre).
Une fois l’installation terminée, redémarrez, puis vous aurez accès à l’interface de Proxmox à l’adresse &lt;a class="link" href="https://proxmox.example.org:8006" target="_blank" rel="noopener"
&gt;https://proxmox.example.org:8006&lt;/a&gt; (changez avec votre FQDN bien entendu !).&lt;/p&gt;
&lt;h2 id="première-ligne-de-sécurité"&gt;Première ligne de sécurité
&lt;/h2&gt;&lt;h3 id="le-serveur-ssh"&gt;Le serveur SSH
&lt;/h3&gt;&lt;p&gt;Votre serveur est up et déjà des petits malins frappent à la porte. S’il y a un truc que j’ai appris ces deux derniers mois, c’est qu’il y a des tonnes de bots dont le seul objectif est de parcourir toutes les IPv4 (ça se fait en quelques heures) et de toquer à la plupart des ports &lt;em&gt;classiques&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Maintenant imaginez qu’un bot tombe sur un prompt où on lui demande un mot de passe. Que va-t-il faire ? Bruteforcer le mot de passe bien sûr !&lt;/p&gt;
&lt;p&gt;J’ai redémarré mon serveur à 06:39:35, et à 06:40:09 je recevais ma première attaque.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/02/ssh_bot_scan.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;La première chose que je fais, c’est sécuriser le serveur SSH :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Je crée un nouvel utilisateur principal avec un accès sudo&lt;/li&gt;
&lt;li&gt;J’interdis de se connecter directement à root en SSH&lt;/li&gt;
&lt;li&gt;J’interdis de se connecter avec un mot de passe en SSH&lt;/li&gt;
&lt;li&gt;Je change le port du SSH. Prenez un port aléatoire après 1000 (en général je regarde l’heure qu’il est et ça me donne un numéro de port)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour la dernière règle (changer le port), c’est optionnel car ce n’est pas de la sécurité en soit (ça n’arrêtera pas un attaquant), mais ça va drastiquement réduire le « bruit de fond », la plupart des bots ne cherchant que les ports par défaut.&lt;/p&gt;
&lt;p&gt;Voici les commandes :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# adduser tomtom
# usermod -aG sudo tomtom
# su - tomtom
# mkdir ~/.ssh
# chmod 700 ~/.ssh
# vim ~/.ssh/authorized_keys # là j&amp;#39;ajoute ma clé SSH
# chmod 600 ~/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Puis je modifie le fichier &lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt; avec les options suivantes :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Port 21153
PermitRootLogin no
PasswordAuthentication no
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Et puis on redémarre le serveur SSH : &lt;code&gt;/etc/init.d/ssh restart&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Pro tip : Assurez-vous bien de pouvoir vous connecter avec l’utilisateur que vous venez de créer. Sinon, vous êtes bon pour reprendre de zéro :D&lt;/p&gt;
&lt;p&gt;Juste avec ça, vous devriez voir le nombre d’attaques dans &lt;code&gt;/var/log/auth.log&lt;/code&gt; drastiquement se réduire.&lt;/p&gt;
&lt;p&gt;Mais ça ne suffit pas et ça ne protège pas d’une attaque bruteforce. Pour ça, il va falloir installer &lt;code&gt;fail2ban&lt;/code&gt;. Cet outil va lire les logs, identifier un attaquant (quelqu’un qui essaie de forcer la porte d’entrée) et bannir son IP. On peut le configurer pour le SSH mais aussi pour plein d’autres outils !&lt;/p&gt;
&lt;p&gt;On l’installe avec &lt;code&gt;apt install fail2ban&lt;/code&gt;. Puis on crée un nouveau fichier &lt;code&gt;/etc/fail2ban/jail.local&lt;/code&gt; avec la configuration suivante :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[DEFAULT]
bantime = 84600
findtime = 600
maxretry = 3
destemail = tomtom@example.org
sendername = Fail2ban
action = %(action_mwl)s
[sshd]
enabled = true
port = 21153
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;En fait c’est surtout la dernière partie qui est obligatoire. Il faut activer l’outil pour le SSH, et spécifier le port que vous avez modifié précédemment. Et n’oubliez pas de redémarrer le service : &lt;code&gt;systemctl restart fail2ban&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Testez alors si ça marche en essayant de vous connecter depuis une autre IP que la votre. Bah oui, sinon vous allez vous bannir vous-même. Donc utilisez un VPN ou bien connectez-vous en premier sur un serveur distant, et depuis ce serveur distant, essayez de vous faire bannir.&lt;/p&gt;
&lt;p&gt;Comment voir si ça marche ? Regardez les logs &lt;code&gt;/var/log/auth.log&lt;/code&gt; et &lt;code&gt;/var/log/fail2ban.log&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="configurer-votre-serveur-smtp"&gt;Configurer votre serveur SMTP
&lt;/h3&gt;&lt;p&gt;Normalement vous devriez recevoir des emails de la part de &lt;code&gt;fail2ban&lt;/code&gt; (avec la configuration ci-dessus).. si vous avez configuré &lt;code&gt;postfix&lt;/code&gt;, qui vient de base avec Proxmox.&lt;/p&gt;
&lt;p&gt;Si vous avez suivi jusque là, il y a de bonnes chances pour que vous n’y ayez pas encore touché. Là on le fait pour &lt;code&gt;fail2ban&lt;/code&gt;, mais Proxmox peut aussi vous notifier de certains événements importants, donc c’est une étape importante, pas seulement pour &lt;code&gt;fail2ban&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Lancez donc un &lt;code&gt;dpkg-reconfigure postfix&lt;/code&gt; et choisissez les options suivantes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Internet Site.&lt;/li&gt;
&lt;li&gt;System mail name = &lt;code&gt;proxmox.example.org&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Postmaster mail recipient = &lt;code&gt;tomtom&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Other destinations to accept mail from : Laissez les valeurs par défaut, c’est-à-dire : &lt;code&gt;proxmox, proxmox.example.org, proxmox.example.org, localhost.example.org, localhost&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Force synchronous updates on mail queue? Non.&lt;/li&gt;
&lt;li&gt;Local networks = On laisse par défaut.&lt;/li&gt;
&lt;li&gt;Mailbox size limit = 0&lt;/li&gt;
&lt;li&gt;Local address extension character = +&lt;/li&gt;
&lt;li&gt;Internet Protocols = all&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La console va vous parler, puis redémarrez le service avec &lt;code&gt;systemctl restart postfix&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="linterface-proxmox"&gt;L’interface Proxmox
&lt;/h3&gt;&lt;p&gt;Ensuite j’aime bien créer encore un autre utilisateur, qui lui n’aura pas d’accès &lt;code&gt;sudo&lt;/code&gt;, et qui sera réservé à Proxmox.&lt;/p&gt;
&lt;p&gt;Après avoir tapé &lt;code&gt;adduser proxmox&lt;/code&gt;, il faudra vous connecter en root sur l’interface Proxmox et ajouter l’utilisateur dans Datacenter / Permissions / Users.
Pour lui donner des accès, vous pouvez taper les commandes suivantes (tirées de la documentation : &lt;a class="link" href="https://pve.proxmox.com/wiki/User_Management#_real_world_examples" target="_blank" rel="noopener"
&gt;User Management&lt;/a&gt;) :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;pveum groupadd admin -comment &amp;#34;System Administrators&amp;#34;
pveum aclmod / -group admin -role Administrator
pveum usermod proxmox@pam -group admin
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Vous pouvez restreindre ces accès à tout moment.&lt;/p&gt;
&lt;p&gt;Pendant que vous êtes connectés avec &lt;strong&gt;root&lt;/strong&gt;, vous pouvez aussi en profiter pour placer un certificat Let’s Encrypt et éviter d’avoir l’avertissement du navigateur pour le HTTPS. Plus de détails ici : &lt;a class="link" href="https://blog.zwindler.fr/2018/05/29/signez-la-console-proxmox-ve-avec-lets-encrypt-cest-encore-plus-trivial/" &gt;Signez l’UI de Proxmox VE avec Let’s Encrypt, c’est (encore plus) trivial&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Voilà.&lt;/p&gt;
&lt;p&gt;Maintenant, on n’aura plus besoin de &lt;strong&gt;root&lt;/strong&gt;. On peut se déconnecter et tout faire avec le nouvel utilisateur.&lt;/p&gt;
&lt;p&gt;Et voilà ! Maintenant, on a une belle interface, ouverte à l’internet entier, avec un petit écran de logi&amp;hellip; hein quoi ? Eh ouais, on peut se faire bruteforce le Proxmox là ! D’ailleurs c’est peut-être en train d’arriver en ce moment même !&lt;/p&gt;
&lt;h3 id="retour-sur-fail2ban"&gt;Retour sur fail2ban
&lt;/h3&gt;&lt;p&gt;Cette étape est un peu optionnelle dans le sens où dans le futur, on pourra bloquer l’ouverture de Proxmox sur le monde réel et ne pouvoir y accéder que depuis le VPN.&lt;/p&gt;
&lt;p&gt;Mais j’ai tendance à penser qu’on n’est jamais trop prudent&amp;hellip;&lt;/p&gt;
&lt;p&gt;Retournez dans le fichier &lt;code&gt;/etc/fail2ban/jail.local&lt;/code&gt; et ajoutez la configuration suivante :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[proxmox]
enabled = true
port = https,http,8006
filter = proxmox
logpath = /var/log/daemon.log
maxretry = 3
# 1 hour
bantime = 3600
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Et on ajoute la partie suivante dans le fichier &lt;code&gt;/etc/fail2ban/filter.d/proxmox.conf&lt;/code&gt; (voir la &lt;a class="link" href="https://pve.proxmox.com/wiki/Fail2ban" target="_blank" rel="noopener"
&gt;doc officielle&lt;/a&gt;) :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[Definition]
failregex = pvedaemon\[.*authentication failure; rhost=&amp;lt;HOST&amp;gt; user=.* msg=.*
ignoreregex =
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Cette deuxième partie, elle sert justement à repérer les messages d’erreurs causés par les méchants qui essaient de se connecter.&lt;/p&gt;
&lt;p&gt;Et on oublie pas de redémarrer fail2ban.&lt;/p&gt;
&lt;p&gt;Là pour tester c’est un peu plus compliqué que pour le SSH, mais par exemple vous pouvez essayer de le faire depuis votre téléphone (pas sur la connexion wifi hein !).&lt;/p&gt;
&lt;p&gt;Bon. On a bien avancé. Mais on n’a pas fait grand chose non plus.&lt;/p&gt;
&lt;h2 id="configuration-du-réseau"&gt;Configuration du réseau
&lt;/h2&gt;&lt;p&gt;Dans cette partie, mon objectif est vraiment de reprendre exactement le schéma de m4vr0x :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_full-infra-diag.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Le truc de base à garder en tête, c’est qu’en frontal, on a l’hyperviseur. C’est incontournable.&lt;/p&gt;
&lt;p&gt;On doit forcément passer par l’hyperviseur pour atteindre une VM.&lt;/p&gt;
&lt;p&gt;Du coup, si notre pare-feu EST une VM, ben&amp;hellip; ça casse un peu tout le délire. C’est un peu comme si le gardien du château était au fond du jardin.&lt;/p&gt;
&lt;p&gt;C’est pour ça que notre objectif, ça va être de router automatiquement TOUT le trafic vers la VM pare-feu. Donc vers la PFSense.&lt;/p&gt;
&lt;p&gt;En temps normal, on devrait avoir la PFSense en frontal, et derrière elle on aurait le réseau local.&lt;/p&gt;
&lt;p&gt;C’est pourquoi la PFSense est connectée à deux réseaux :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le WAN, aka Internet&lt;/li&gt;
&lt;li&gt;Le LAN, tout le réseau local avec les VMs qui sont derrières PFSense&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Entre les deux, il y a la PFSense.&lt;/p&gt;
&lt;p&gt;En routant la totalité du trafic de l’hyperviseur vers la PFSense, c’est un peu comme si la PFSense était en frontal (alors qu’en vrai c’est proxmox le frontal sur Internet). Et ce petit &lt;em&gt;router tout le trafic automatiquement&lt;/em&gt; se traduira en une LONGUE série d’instructions iptables.&lt;/p&gt;
&lt;h3 id="paramétrage-des-interfaces-virtuelles"&gt;Paramétrage des interfaces virtuelles
&lt;/h3&gt;&lt;p&gt;Déjà, on crée les réseaux WAN et LAN. Connectez-vous sur votre interface Proxmox &lt;a class="link" href="https://proxmox.example.org:8006" target="_blank" rel="noopener"
&gt;https://proxmox.example.org:8006&lt;/a&gt; (avec votre utilisateur spécial, pas le root !), cliquez sur votre node, puis System &amp;gt; Network :
&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_network-new.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Sur son tuto, m4vr0x avait 2 interfaces (2 NIC on dit). Moi avec Hetzner j’en ai qu’une. Au début j’ai cru que c’était game over pour moi. En fait non, 1 seule suffit. C’est comme pour lotus.&lt;/p&gt;
&lt;p&gt;Juste un petit conseil. On fait un petit backup des interfaces comme elles ont été configurées par le provider d’abord : &lt;code&gt;cp /etc/network/interfaces /etc/network/interfaces.bak&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;On crée un premier bridge en cliquant sur Create/Linux Bridge et on remplit comme suit :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Name : vmbr0&lt;/li&gt;
&lt;li&gt;IPv4/CIDR : Choisissez l’IP qui était auparavant sur votre interface NIC. En gros c’est votre IP publique. Il faut aussi ajouter le CIDR.&lt;/li&gt;
&lt;li&gt;Gateway (IPv6) : Idem, choisissez la Gateway qui était sur l’interface NIC.&lt;/li&gt;
&lt;li&gt;IPv6/CIDR : Idem que pour l’IPv4. J’ai pris le choix d’en mettre une, comme Hetzner m’en a fourni une. Je me dis qu’en 2020 y’a plus d’IPv4 disponible, donc y’a un moment va falloir s’y mettre.&lt;/li&gt;
&lt;li&gt;Gateway (IPv6) : Idem.&lt;/li&gt;
&lt;li&gt;Autostart : On coche.&lt;/li&gt;
&lt;li&gt;VLAN aware : On laisse décoché.&lt;/li&gt;
&lt;li&gt;Bridge ports : Là vous mettez le nom de votre première interface. Celle dont vous avez extrait l’IP et la Gateway.&lt;/li&gt;
&lt;li&gt;Comment : Internet.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si jamais vous ne savez pas ce que c’est que le CIDR ou la Gateway, c’est là que je vous recommande très chaudement le cours d’OpenClassrooms que je citais au début. Franchement, vous n’en ressortirez que plus compétent sur les réseaux et ce sont quelques heures investies qui vous en feront gagner beaucoup d’autres plus tard.&lt;/p&gt;
&lt;p&gt;Je remets discrètement le lien ici : &lt;a class="link" href="https://openclassrooms.com/fr/courses/857447-apprenez-le-fonctionnement-des-reseaux-tcp-ip" target="_blank" rel="noopener"
&gt;Apprenez le fonctionnement des réseaux TCP/IP &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Et si vous avez juste oublié comment calculer le CIDR à partir de votre masque, vous pouvez utiliser cette &lt;a class="link" href="https://docs.netgate.com/pfsense/en/latest/book/network/understanding-cidr-subnet-mask-notation.html" target="_blank" rel="noopener"
&gt;table de correspondance&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Là, si vous validez, vous aller avoir un message d’erreur. Il faut au préalable supprimer les infos IP/Gateway de l’interface du NIC. En plus si vous laissez l’IP sur le NIC et le bridge, vous allez avoir des problème (j’en sais quelque chose).&lt;/p&gt;
&lt;p&gt;Pour être 100% honnête, je ne suis pas sûr que ce bridge soit indispensable. Je ne vois pas trop ce qu’il apporte de plus par rapport à directement utiliser l’interface NIC. Là c’est un peu comme si on mettait une double porte pour rentrer chez soi.&lt;/p&gt;
&lt;p&gt;Ensuite, un deuxième bridge. Celui-ci sera un bridge « virtuel », ça veut dire qu’il ne sera connecté sur aucune réelle interface NIC. On va avoir un premier bridge virtuel qui donnera sur le réseau WAN, et un deuxième bridge virtuel qui donnera sur le réseau LAN. C’est une manière de créer des réseaux privés distincts.&lt;/p&gt;
&lt;p&gt;Imaginez qu’on crée une première porte virtuelle qui mène vers le monde de WAN, et une deuxième porte virtuelle qui mène vers le monde de &lt;del&gt;Jumanji&lt;/del&gt; LAN.&lt;/p&gt;
&lt;p&gt;Pour ce deuxième bridge, on rentre :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Name : vmbr1&lt;/li&gt;
&lt;li&gt;IPv4/CIDR : 10.0.0.1/30.&lt;/li&gt;
&lt;li&gt;Comment : WAN&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;m4vr0x rentrait la valeur « WAN » dans bridge port. Mais en fait 1) je crois que ça n’était pas utile, et 2) Proxmox 6 vous empêche d’assigner une interface qui n’existe pas. Si vous tenez vraiment à le faire, il faudra éditer à la main le fichier &lt;code&gt;/etc/network/interfaces&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Je le mets quand même dans &lt;em&gt;Comment&lt;/em&gt; parce que c’est utile pour s’en rappeler.&lt;/p&gt;
&lt;p&gt;Pour l’IP, on utilise un CIDR = 30 pour être sûr de n’avoir que 2 IPs de disponible. Oui, on évite de se donner une plage avec des millions d’IPs si on n’en a pas besoin. Là, si jamais un brigan arrive à se relier je-ne-sais-comment au réseau WAN, eh bien il ne pourra pas avoir d’IP.&lt;/p&gt;
&lt;p&gt;Et finalement le dernier bridge :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Name : vmbr2&lt;/li&gt;
&lt;li&gt;IPv4/CIDR : 192.168.9.1/24.&lt;/li&gt;
&lt;li&gt;Comment : LAN&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ici c’est un peu pareil, mais on se laisse la possibilité d’avoir 256 IPs, puisqu’on ne sait pas combien de machines virtuelles on va avoir exactement.&lt;/p&gt;
&lt;p&gt;&lt;del&gt;Allez, on valide en cliquant sur Reboot tout en haut de l’interface.&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;Bonne nouvelle, il n’est maintenant plus forcément nécessaire de redémarrer entièrement l’hôte en cas de modification des interfaces réseaux. Si vous installez le package &lt;code&gt;ifupdown2&lt;/code&gt; (via un petit &lt;code&gt;apt install&lt;/code&gt;), vous pourrez cliquer sur la case Apply Configuration dans le menu Network pour prise en compte à chaud des modifications !&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/04/pending.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;C’est peut-être le moment de vous montrer une petite astuce si jamais vous vous êtes planté. En fait, quand j’ai suivi le tuto de m4vr0x, j’ai réussi à m’enfermer dehors de mon serveur une bonne dizaine de fois.&lt;/p&gt;
&lt;p&gt;La solution, pour Hetzner, c’est de passer en mode &lt;em&gt;Rescue&lt;/em&gt;, puis de monter le volume LVM en suivant les instructions de &lt;a class="link" href="https://wiki.hetzner.de/index.php/Hetzner_Rescue-System/en#Mounting_LVM_Volumes" target="_blank" rel="noopener"
&gt;cette page d’aide&lt;/a&gt;. Par exemple, l’idée ça pourrait être de remettre le fichier &lt;code&gt;/etc/network/interfaces&lt;/code&gt; dans son état initial.&lt;/p&gt;
&lt;p&gt;L’idée, c’est que même si j’ai l’impression que mon tutorial est &lt;em&gt;fail-proof&lt;/em&gt;, je suis sûr qu’il ne l’est pas. C’est probablement impossible de l’être. Par contre, on peut apprendre les outils pour réparer nos conneries. Et ça nous rend confiant pour essayer des trucs.&lt;/p&gt;
&lt;p&gt;Bon allez. On vérifie son contenu de &lt;code&gt;/etc/network/interfaces&lt;/code&gt; et on passe à la suite :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;auto lo
iface lo inet loopback
iface lo inet6 loopback
auto enp4s0
iface enp4s0 inet manual
up route add -net xx.xx.xx.xx netmask 255.255.255.224 gw xx.xx.xx.xx dev enp4s0
auto vmbr0
iface vmbr0 inet static
address xx.xx.xx.xx
netmask 27
gateway xx.xx.xx.xx
bridge-ports enp4s0
bridge-stp off
bridge-fd 0
#Internet
iface vmbr0 inet6 static
address xx:xx:xx::xx
netmask 64
gateway fe80::1
auto vmbr1
iface vmbr1 inet static
address 10.0.0.1
netmask 30
bridge-ports none
bridge-stp off
bridge-fd 0
#WAN
auto vmbr2
iface vmbr2 inet static
address 192.168.9.1
netmask 24
bridge-ports none
bridge-stp off
bridge-fd 0
#LAN
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Notez que j’ai une règle de routage au début avec la ligne qui commence par &lt;code&gt;up route add&lt;/code&gt;. Cette ligne était déjà là avant, alors je n’y ai pas touché.&lt;/p&gt;
&lt;h2 id="déploiement-de-pfsense"&gt;Déploiement de PFSense
&lt;/h2&gt;&lt;p&gt;On va télécharger la dernière version sur le site : &lt;a class="link" href="https://www.pfsense.org/download/" target="_blank" rel="noopener"
&gt;PFSense&lt;/a&gt;. Moi j’ai pris une architecture AMD64 et l’ISO.&lt;/p&gt;
&lt;p&gt;Évidemment on vérifie le checksum. Ça sert à rien de passer des heures sur la sécurité si on télécharge un fichier trafiqué. Je suis sympa je vous donne même la commande : &lt;code&gt;openssl dgst -sha256 Downloads/pfSense-CE-2.4.4-RELEASE-p3-amd64.iso.gz&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Puis on l’upload dans le volume de stockage &lt;em&gt;local&lt;/em&gt; sur l’interface de Proxmox.&lt;/p&gt;
&lt;p&gt;Si comme moi vous avez une connexion un peu pourrite, on peut aussi le télécharger directement sur le serveur :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cd /var/lib/vz/template/iso
wget https://frafiles.pfsense.org/mirror/downloads/pfSense-CE-2.4.5-RELEASE-amd64.iso.gz
openssl dgst -sha256 pfSense-CE-2.4.5-RELEASE-amd64.iso.gz
gunzip pfSense-CE-2.4.5-RELEASE-amd64.iso.gz
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Et pouf l’ISO va apparaître dans votre interface.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/04/pfsense_iso.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Maintenant on lance une VM (et pas un CT).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;General&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Node : Choisissez votre node.&lt;/li&gt;
&lt;li&gt;VM ID : On peut laisser la valeur par défaut (100 normalement).&lt;/li&gt;
&lt;li&gt;Name : PFSense.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;OS&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use CD/DVD disc image file (iso) : Storage = local et ISO image est le fichier qu’on vient d’uploader.&lt;/li&gt;
&lt;li&gt;Guest OS = Other&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;System&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Graphic card : &lt;del&gt;VMware compatible&lt;/del&gt; Default&lt;/li&gt;
&lt;li&gt;SCSI Controller : VirtIO SCSI&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Hard Disk&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bus/Device : VirtIO Block / 0.&lt;/li&gt;
&lt;li&gt;Storage : local.&lt;/li&gt;
&lt;li&gt;Disk size : 8 GB.&lt;/li&gt;
&lt;li&gt;Format : QEMU&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;CPU&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sockets : 1&lt;/li&gt;
&lt;li&gt;Cores : 2&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note de zwindler : Charles conseillait une carte graphique « VMware compatible », mais à l’usage, je trouve que celle par défaut offre un meilleur rendu&lt;/p&gt;
&lt;p&gt;Si vous voulez vous pouvez mettre plus de cœurs. Je ne pense pas que ça change grand chose étant donné que la VM ne va pas être gourmande du tout.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Memory&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Memory : 512.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Idem, vous pouvez mettre plus, mais pour commencer vous pouvez très bien mettre cette valeur et l’augmenter plus tard si le besoin s’en fait ressentir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Network&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bridge : vmbr1&lt;/li&gt;
&lt;li&gt;Model : Intel E1000 ou VirtIO&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour ce dernier point, ça dépend si vous aimez les problèmes ou non. Intel E1000 semble fonctionner. VirtIO aussi mais sous certaines conditions. En fait, je me suis retrouvé avec des VM qui pouvaient pinger Internet mais les requêtes tcp/udp ne passaient pas. Ça m’a rendu fou.&lt;/p&gt;
&lt;p&gt;On y reviendra. Moi j’ai pris VirtIO.&lt;/p&gt;
&lt;p&gt;Pour l’instant, on valide.&lt;/p&gt;
&lt;p&gt;La PFSense a besoin d’être connectée à 2 interfaces réseau : Le WAN et le LAN. Bah oui puisque c’est justement elle qui va faire le lien entre les deux interfaces. Pour l’instant, elle n’est connectée que à vmbr1, qui correspond au WAN.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/04/pfsense_vmbr2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Cliquez sur la VM, puis Hardware, et « Add/Network Device ». Choisissez vmbr2 et le même modèle que vous aviez choisi pour vmbr1.&lt;/p&gt;
&lt;p&gt;Maintenant on peut démarrer la VM.&lt;/p&gt;
&lt;h3 id="installation-de-pfsense"&gt;Installation de PFSense
&lt;/h3&gt;&lt;p&gt;En allant sur &lt;em&gt;Console&lt;/em&gt;, vous allez pouvoir afficher l’écran de la machine.&lt;/p&gt;
&lt;p&gt;Choisissez Install pfSense.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/02/pfsense_screen.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Ensuite, on vous demande votre disposition clavier. Vous pouvez sélectionner ce que vous voulez, de toute façon après il vous remet en qwerty (sympa).&lt;/p&gt;
&lt;p&gt;Pour le partitionnement, choisissez Auto: Guided Disk Setup, sauf si vous savez ce que vous faites. Les choses vont alors se faire toutes seules, jusqu’à :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/02/pfsense_screen2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Dites-lui non, puis rebootez. Après le reboot, choisissez de ne pas configurer de VLAN :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/02/pfsense_screen3.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Pour la WAN interface, choisissez l’interface &lt;code&gt;vtnet0&lt;/code&gt;, qui est l’équivalent de vmbr1. Pour la LAN interface, choisissez l’interface &lt;code&gt;vtnet1&lt;/code&gt;, qui est l’équivalent de vmbr2.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/02/pfsense_screen4.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On arrive alors sur le menu principal de la PFSense. Ce menu bien moche, c’est l’écran d’accueil. Oui oui. Rassurez-vous, plus tard on aura une interface web bien plus jolie. Pour l’instant, tapez 2 pour assigner des adresses IP à vos interfaces :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/02/pfsense_screen5.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Pour le WAN, on va lui donner :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;DHCP : no&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;IPv4 : 10.0.0.2&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Subnet bit count : 30&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Upstream gateway address : 10.0.0.1&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DHCP6 : no&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;IPv6 : Rien (appuyez sur Entrée)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Do you want to revert HTTP as the webConfigurator protocol? no&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; L’écran principal va réapparaître. De nouveau on tape 2, et cette fois-ci on configure le LAN :
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;IPv4 : 192.168.9.254&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Subnet bit count : 24&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Upstream gateway address : Rien (appuyez sur Entrée)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;IPv6 : Rien (appuyez sur Entrée)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Activer le serveur DHCP : No&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Do you want to revert HTTP as the webConfigurator protocol? no&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Finalement, on nous annonce que le webConfigurator est disponible à l’adresse https://192.168.9.254. On va donc s’y connecter pour continuer la configuration.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;… Quoi ? … Ça ne marche pas ? … Sûr ? … C’est con …&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Oui je reprends les blagues de m4vr0x, et alors :D ?&lt;/p&gt;
&lt;p&gt;Bon l’idée c’est juste qu’on a un réseau local ici, donc non on ne peut pas y accéder depuis Internet. Il faut être dans le LAN pour y accéder. Les machines qui sont dans le LAN sont l’hyperviseur et la PFSense. Et les deux.. n’ont pas d’interface graphique.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Petit debugging tip&lt;/em&gt;. Normalement, là où vous en êtes, vous devriez être capable de pinger l’hyperviseur depuis la PFSense. À partir du menu principal, tapez 7 puis l’IP de l’hyperviseur (10.0.0.1). Le ping devrait fonctionner.&lt;/p&gt;
&lt;p&gt;Par contre, si vous essayez de pinger la PFSense, ça ne va pas marcher. En effet, par défaut, la PFSense est inaccessible depuis le WAN. Parce que le WAN, c’est Internet, c’est le monde dangereux. Dans notre cas particulier, le WAN c’est seulement l’hyperviseur pour l’instant, mais plus tard, tout le trafic d’Internet viendra de l’interface du WAN.&lt;/p&gt;
&lt;p&gt;Donc quand on ping depuis la PFSense, ça marche parce que c’est la PFSense qui initie la connexion, donc en face on sait qu’on a un copain, donc on accepte sa réponse de ping.&lt;/p&gt;
&lt;p&gt;Mais quand on ping vers la PFSense, ça ne marche pas parce qu’elle ne vous connaît pas et elle ne parle pas aux inconnus.&lt;/p&gt;
&lt;p&gt;J’ai mis des semaines à comprendre ça, et de nombreuses personnes s’en plaignaient dans les commentaires, donc ça me semblait important de faire cette parenthèse.&lt;/p&gt;
&lt;h2 id="accéder-à-la-console-de-pfsense"&gt;Accéder à la console de PFsense
&lt;/h2&gt;&lt;p&gt;Du coup, comment on va accéder à cette interface web ?&lt;/p&gt;
&lt;p&gt;A partir de là, vous avez plusieurs solution. La plus simple est, en attendant qu’on ait un accès direct au réseau local des VM via un VPN par exemple, on peut simplement faire un tunnel SSH.&lt;/p&gt;
&lt;p&gt;Pour se faire, lancez la commande suivante depuis votre PC :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ssh tomtom@IP_PUB_PROXMOX -L 8443:192.168.9.254:443
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Une fois la commande lancée, l’UI de PFsense sera accessible à l’URL https://localhost:8443 tant que le tunnel sera opérationnel. Ça peut suffire. Sous Windows, vous pouvez faire la même chose avec Putty (ou n’importe quel autre client SSH un peu évolué).&lt;/p&gt;
&lt;p&gt;La deuxième option est de créer une machine virtuelle dans le réseau LAN qui disposera d’une interface graphique. Par exemple, une simple Ubuntu Desktop, qui nous servira de poste de rebond. Téléchargeons-la directement depuis le serveur :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cd /var/lib/vz/template/iso
wget http://releases.ubuntu.com/18.04.4/ubuntu-18.04.4-desktop-amd64.iso
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Puis, on crée une nouvelle VM avec le paramétrage suivant.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;General&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Node : Choisissez votre node.&lt;/li&gt;
&lt;li&gt;VM ID : On peut laisser la valeur par défaut (101 normalement).&lt;/li&gt;
&lt;li&gt;Name : UbuntuDesktop.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;OS&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use CD/DVD disc image file (iso) : Storage = local et ISO image est le fichier qu’on vient d’uploader.&lt;/li&gt;
&lt;li&gt;Guest OS = Linux 5.x&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;System&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Graphic card : &lt;del&gt;VMware compatible&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;SCSI Controller : VirtIO SCSI&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Hard Disk&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bus/Device : VirtIO Block / 0.&lt;/li&gt;
&lt;li&gt;Storage : local.&lt;/li&gt;
&lt;li&gt;Disk size : 25 GB.&lt;/li&gt;
&lt;li&gt;Format : QEMU&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note de zwindler : Charles conseillait une carte graphique « VMware compatible », mais à l’usage, je trouve que celle par défaut offre un meilleur rendu&lt;/p&gt;
&lt;p&gt;On peut mettre moins de &lt;em&gt;storage&lt;/em&gt; mais il faut garder à l’idée que c’est une VM temporaire de toute façon. Une fois que tout sera en place, on pourra la détruire.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CPU&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sockets : 1&lt;/li&gt;
&lt;li&gt;Cores : 4&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Memory&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Memory : 4096.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pareil, on peut mettre moins de mémoire RAM.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Network&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bridge : vmbr2&lt;/li&gt;
&lt;li&gt;Model : Intel E1000 ou VirtIO&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Là évidemment on se plante pas ! La VM et toutes les autres VM qu’on créera seront toujours sur le vmbr2, donc le LAN ! Et là vous êtes content d’avoir écrit WAN ou LAN en commentaires du bridge puisque ça vous évite de vous perdre.&lt;/p&gt;
&lt;p&gt;De toute façon, si vous vous branchez sur le WAN, il n’y aura pas d’IP disponible.&lt;/p&gt;
&lt;p&gt;Je passe sur les détails de l’installation de Ubuntu, elle n’est vraiment pas compliquée.&lt;/p&gt;
&lt;p&gt;Ce qui est important, c’est de vous paramétrer une IP, étant donné qu’il n’y a pas de serveur DHCP pour vous en assigner une automatiquement.&lt;/p&gt;
&lt;p&gt;Allez dans les Paramètres puis choisissez Réseau. Activez la connexion, et dans les paramètres, l’onglet IPv4, rentrez les paramètres suivants :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IPv4 Method = manuel&lt;/li&gt;
&lt;li&gt;Address = 192.168.9.10&lt;/li&gt;
&lt;li&gt;Netmask = 255.255.255.0&lt;/li&gt;
&lt;li&gt;Gateway = 192.168.9.254&lt;/li&gt;
&lt;li&gt;DNS = 1.1.1.1&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et là, c’est bon !&lt;/p&gt;
&lt;p&gt;Comment ça l’accès internet ne marche pas ?!&lt;/p&gt;
&lt;p&gt;Évidemment qu’il ne marche pas ! Suivez un peu. On a une VM qui est connectée au réseau LAN seulement. Le réseau LAN est-il relié à Internet ? Seulement à travers la PFSense. Et comme la PFSense bloque tout, on n’a pas accès.&lt;/p&gt;
&lt;p&gt;Par contre, vous devriez être capable de pinger l’hyperviseur et la PFSense avec &lt;code&gt;ping 192.168.9.1&lt;/code&gt; et &lt;code&gt;ping 192.168.9.254&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Et finalement, vous allez même pouvoir vous connecter à l’interface web de la PFSense en ouvrant une page web et en tapant &lt;code&gt;https://192.168.9.254/&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="accéder-à-la-console-de-pfsense-1"&gt;Accéder à la console de PFsense
&lt;/h2&gt;&lt;p&gt;Cette interface n’est pour le moment accessible que depuis le réseau local (ou depuis votre tunnel si vous avez choisi cette voie). Et heureusement, parce que par défaut, les identifiants sont :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Username = admin&lt;/li&gt;
&lt;li&gt;Password = pfsense&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Au démarrage, l’appli vous propose un &lt;em&gt;wizard&lt;/em&gt; de configuration. Suivez simplement les consignes.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hostname : Correspond à la partie avant le domaine. Par exemple, dans &lt;code&gt;proxmox.example.org&lt;/code&gt;, l’hostname c’est proxmox.&lt;/li&gt;
&lt;li&gt;Domain : Et le domaine, c’est l’autre partie restante.&lt;/li&gt;
&lt;li&gt;DNS : 1.1.1.1&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le reste peut être laissé par défaut, jusqu’à l’étape 4 sur l’interface WAN. Normalement tout est bien pré-rempli. Toutefois, détail important, il faut désactiver la case Block RFC1918 Private Networks.&lt;/p&gt;
&lt;p&gt;Cette option permet de bloquer les paquets qui parviennent d’un réseau privé d’entrer par l’interface WAN. Un réseau privé, c’est un réseau dont l’IP commence par 10, 172.16, ou 192.168. Et comme notre WAN est justement sur un réseau privé, eh bien cette option bloque tout.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/03/pfsense_block.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;En temps normal, le WAN correspond à Internet. Dans notre cas spécifique, ce n’est pas le cas, et on doit donc décocher cette case.&lt;/p&gt;
&lt;p&gt;Continuez puis finissez par changer le mot de passe de l’admin. À la fin, on vous propose de vérifier si une mise à jour. Vous pouvez essayer&amp;hellip;&lt;/p&gt;
&lt;p&gt;&amp;hellip; sauf que vous n’avez toujours pas accès à l’internet sur votre VM ! (suivez un peu)&lt;/p&gt;
&lt;p&gt;Il reste maintenant la partie la plus fun : Envoyer tout le trafic sur la PFSense, configurer PFSense et déployer une application.&lt;/p&gt;
&lt;p&gt;Et vous l’aurez dans dans le prochain épisode !&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2020/03/09/proxmox-ve-6-pfsense-sur-un-serveur-dedie-2-3/" &gt;Proxmox VE 6 + pfsense sur un serveur dédié (2/2)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Déploiement de Proxmox VE 5 sur un serveur dédié – part 3</title><link>https://blog.zwindler.fr/2017/07/25/deploiement-de-proxmox-ve-5-sur-un-serveur-dedie-part-3/</link><pubDate>Tue, 25 Jul 2017 11:55:18 +0000</pubDate><guid>https://blog.zwindler.fr/2017/07/25/deploiement-de-proxmox-ve-5-sur-un-serveur-dedie-part-3/</guid><description>&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_thumbnail.webp" alt="Featured image of post Déploiement de Proxmox VE 5 sur un serveur dédié – part 3" /&gt;&lt;blockquote&gt;
&lt;p&gt;Note : Cette suite d’articles de 2016 écrite par M4vr0x a été remis à jour par Charles et moi. Je vous conseille d’aller lire celui ci plutôt, qui sera plus en phase avec les versions actuelles. &lt;a class="link" href="https://blog.zwindler.fr/2020/03/02/deploiement-de-proxmox-ve-6-pfsense-sur-un-serveur-dedie/%22%3e" &gt;Proxmox VE 6 + pfsense sur un serveur dédié (1/2)&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Cet article fait partie d’une suite de 3 articles sur la mise en place de Proxmox VE et sa sécurisation et dont voici les adresses :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2017/07/11/deploiment-de-proxmox-ve-5-sur-un-serveur-dedie-part-1/" &gt;Déploiement de Proxmox VE 5 sur un serveur dédié - part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2017/07/18/deploiement-de-proxmox-ve-5-sur-un-serveur-dedie-part-2/" &gt;Déploiement de Proxmox VE 5 sur un serveur dédié - part 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2017/07/25/deploiement-de-proxmox-ve-5-sur-un-serveur-dedie-part-3/" &gt;Déploiement de Proxmox VE 5 sur un serveur dédié - part 3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nous avons donc à présent une belle infrastructure à disposition avec une VM PFSense en frontal et un niveau de sécurité relativement correct. Nous allons donc terminer par :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La configuration d’un accès distant sécurisé grâce à OpenVPN&lt;/li&gt;
&lt;li&gt;L’adaptation des règles de filtrage pour que cela fonctionne&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mais avant cela, je vais juste faire un léger aparté pour vous montrer comment autoriser l’accès extérieur à un service d’une machine virtuelle.&lt;/p&gt;
&lt;p&gt;Comme pour les parties précédentes, si des paramètres ne sont pas explicités, ils sont à laisser à leur valeur par défaut.&lt;/p&gt;
&lt;h2 id="publication-de-services-sur-linternet-du-web"&gt;Publication de services sur l’internet du web
&lt;/h2&gt;&lt;p&gt;Imaginons que vous ayez quelques VMs qui vous fournissent des services de « Prod », et que pour des raisons qui vous sont propres, vous souhaitiez pouvoir y accéder sans passer par votre futur VPN &amp;hellip; « Comment faire ? » me demanderiez-vous. « Et bien, vous répondrais-je &amp;hellip; C’est très simple mon cher ami, grâce à notre magnifique infrastructure, l’ajout d’UNE SEULE règle suffira ! » (mouahaha)&lt;/p&gt;
&lt;p&gt;Donc prenons le cas d’un serveur PLEX , au hasard, hébergé sur un NAS Synology virtualisé &amp;hellip; son @IP est 192.168.9.10 et son port d’écoute est, par défaut, le TCP:32400.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Se rendre dans le menu Firewall &amp;gt; NAT puis cliquer sur « &lt;em&gt;ADD&lt;/em&gt; »&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Interface&lt;/strong&gt; : WAN
&lt;strong&gt;Protocol&lt;/strong&gt; : TCP&lt;br&gt;
&lt;strong&gt;Destination&lt;/strong&gt; : Any&lt;br&gt;
&lt;strong&gt;Destination Port Range (From)&lt;/strong&gt; : Other - 32400&lt;br&gt;
&lt;strong&gt;Redirect target IP&lt;/strong&gt; : 192.168.9.10&lt;br&gt;
&lt;strong&gt;Redirect target port&lt;/strong&gt; : Other - 32400&lt;br&gt;
&lt;strong&gt;Description&lt;/strong&gt; : Choisir un nom pour la règle (ex: Synology - Plex)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valider avec « &lt;em&gt;Save&lt;/em&gt; » puis « &lt;em&gt;Apply Changes&lt;/em&gt; » pour recharger la configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_pfsense-nat-rule.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Voilà, c’est tout !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Vous avez crée une règle de NAT qui renvoie toutes les requêtes arrivant sur le port TCP:32400 de votre interface WAN vers le port TCP:32400 de votre Plex ! Cerise sur le gâteau, vu que PFSense est bien conçu (et que vous n’avez pas modifié le paramètre « Filter rule association ») il vous a généré une règle de FW associée pour autoriser le flux de votre règle NAT.&lt;/p&gt;
&lt;p&gt;Comme tous les services publiés sur votre IP public constituent des vecteurs potentiels d’attaque on va y allez « molo sur la mayo » (&amp;hellip; vous connaissez cette expression ? Je crois que je viens de l’inventer &amp;hellip; truc de fou &amp;hellip; une fulgurance &amp;hellip; Non sérieux quelqu’un connaît ? &amp;hellip; Euh oui pardon &amp;hellip; ). Je disais donc que nous privilégierons évidemment un accès via le VPN que nous allons mettre en place &amp;hellip;. genre maintenant, tout de suite.&lt;/p&gt;
&lt;h2 id="configuration-daccès-distant-sécurisé-via-openvpn"&gt;Configuration d’accès distant sécurisé via OpenVPN
&lt;/h2&gt;&lt;p&gt;Je ne vais pas vous détailler l’action de chaque option, et je ne les connais pas toutes d’ailleurs, par contre si vous êtes intéressé, je vous encourage fortement à vous référer à ces sources :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://openvpn.net/index.php/open-source/documentation/howto.html" target="_blank" rel="noopener"
&gt;Documentation officielle d’OpenVPN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.netgate.com/pfsense/en/latest/recipes/openvpn-ra.html" target="_blank" rel="noopener"
&gt;Article « OpenVPN Remote Access Server » du Wiki de PFSense&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="http://www.provya.net/index.php?d=2016/04/18/11/00/31-pfsense-securisez-lacces-distant-de-vos-collaborateurs-nomades-avec-openvpn" target="_blank" rel="noopener"
&gt;Un très bon tuto francophone&lt;/a&gt; qui détaille bien les options &amp;hellip; lui ;-)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="création-de-lautorité-de-certification"&gt;Création de l’autorité de certification
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Naviguer jusqu’à la liste des « CAs » via le menu System &amp;gt; Cert Manager :&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_pfsense-ca-creation.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Celle-ci est vide, nous allons donc créer une nouvelle entrée.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cliquer sur le bouton « ADD » en bas à droite, puis renseigner comme suit :&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Descriptive name&lt;/strong&gt; : Nom choisi pour la CA&lt;br&gt;
&lt;strong&gt;Method&lt;/strong&gt; : Create an internal Certificate Authority&lt;/p&gt;
&lt;p&gt;Une fois la méthode sélectionnée, l’encadré inférieur va changé&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key length&lt;/strong&gt; : 2048 (longueur de la clé de chiffrement)&lt;br&gt;
&lt;strong&gt;Digest Algorithm&lt;/strong&gt; : SHA256 (méthode de hachage)&lt;br&gt;
&lt;strong&gt;Lifetime&lt;/strong&gt; : 3650 (durée de validité en jours)&lt;br&gt;
&lt;strong&gt;Country Code&lt;/strong&gt; : FR (Code ISO du pays d’émission du CA)&lt;/p&gt;
&lt;p&gt;Les autres champs sont libres et à titre indicatif, évitez toutefois les infos trop personnelles/confidentielles. Choisissez simplement un « Common Name » un peu explicite pour pouvoir l’identifier facilement.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cliquer sur « &lt;em&gt;Save&lt;/em&gt; » et contempler le résultat :&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_pfsense-ca-exemple.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h3 id="création-du-certificat-serveur"&gt;Création du certificat serveur
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Cliquer à présent sur l’onglet rouge « &lt;em&gt;Certificates&lt;/em&gt; » où un certificat utilisé par la WebUI existe déjà, puis cliquer sur le bouton « &lt;em&gt;ADD&lt;/em&gt; » pour en créer un nouveau :&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Method&lt;/strong&gt; : Create an internal Certificate Authority&lt;/p&gt;
&lt;p&gt;Et là grosse surprise ! &amp;hellip; Une fois la méthode sélectionnée, l’encadré inférieur va changé&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Descriptive name&lt;/strong&gt; : Nom choisi pour la certificat serveur&lt;br&gt;
&lt;strong&gt;Certificate authority&lt;/strong&gt;:  Sélectionner la CA crée juste avant (la seule normalement)&lt;br&gt;
&lt;strong&gt;Key length&lt;/strong&gt; : 2048&lt;br&gt;
&lt;strong&gt;Digest Algorithm&lt;/strong&gt; : SHA256&lt;br&gt;
&lt;strong&gt;Certificate Type&lt;/strong&gt; : Server Certificat (Qui a dit pourquoi ? &amp;hellip; Toi =&amp;gt; [] &amp;hellip; tu sors)&lt;br&gt;
&lt;strong&gt;Lifetime&lt;/strong&gt; : 3650 (10 ans ça devrait suffire)&lt;/p&gt;
&lt;p&gt;Les champs suivants sont normalement pré-remplis donc conservez les même valeurs que précédemment sauf pour « &lt;em&gt;Common Name&lt;/em&gt; » bien sûr (Pourquoi ? &amp;hellip; t’étais pas sorti toi ??!)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valider avec le bouton « &lt;em&gt;Save&lt;/em&gt; »&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="création-du-certificat-client"&gt;Création du certificat client
&lt;/h3&gt;&lt;p&gt;Alors là c’est tricky &amp;hellip; attention &amp;hellip; il va falloir relire le paragraphe précédent (oui y compris les vannes bidons) et refaire la même manip en changeant simplement :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Certificate Type&lt;/strong&gt; : Client Certificat &amp;hellip; \o/&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_pfsense-cert-exemples.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h3 id="création-du-serveur-vpn"&gt;Création du serveur VPN
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Se rendre dans le menu VPN &amp;gt; OpenVPN, puis cliquer sur « &lt;em&gt;ADD&lt;/em&gt; »&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="general-information"&gt;&lt;em&gt;General Information&lt;/em&gt;
&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;Server Mode&lt;/strong&gt; : Remote Access (SSL/TLS + User Auth)&lt;/p&gt;
&lt;p&gt;Avec ce mode vous aurez besoin des certificats sur le client mais devrez également saisir le login/password du user crée ci-dessus à chaque connexion du tunnel VPN. C’est une sécurité supplémentaire que vous pouvez désactiver en choisissant « Remote Access (SSL/TLS) »&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Local Port&lt;/strong&gt; : 2294&lt;/p&gt;
&lt;p&gt;Rien d’obligatoire ici mais pour les même raison expliquées dans la 2e partie de l’article ça limite drastiquement l’efficacité de nombreux bots qui utilisent les ports standards.&lt;/p&gt;
&lt;h4 id="cryptographic-settings"&gt;&lt;strong&gt;&lt;em&gt;Cryptographic Settings&lt;/em&gt;&lt;/strong&gt;
&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;TLS Authentication&lt;/strong&gt; : Laisser coché&lt;/p&gt;
&lt;p&gt;La TLS est une couche supplémentaire d’authentification/chiffrement qui permet d’ajouter une seconde ligne de défense à SLL et à priori l’impact n’est pas significatif au niveau des performances. Libre à vous de lire la doc et de l’enlever en toute connaissance de cause si vous le souhaitez.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Description&lt;/strong&gt; : Choisir un nom pour le serveur OpenVPN&lt;br&gt;
&lt;strong&gt;Certificate authority&lt;/strong&gt; : Sélectionner la CA créée juste avant (toujours la seule normalement)&lt;br&gt;
&lt;strong&gt;Server Certificate&lt;/strong&gt; : Choisir le certificat serveur créé précédemment&lt;/p&gt;
&lt;h4 id="tunnel-settings"&gt;&lt;em&gt;Tunnel Settings&lt;/em&gt;
&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;IPv4 Tunnel Network&lt;/strong&gt; : 10.2.2.0/24&lt;/p&gt;
&lt;p&gt;Conformément à notre schéma réseau, visible dans la [2e partie de l’article][2]. Là aussi, libre à vous de choisir votre segment réseau, du moment que vous adaptez la suite à votre plan d’adressage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Redirect Gateway&lt;/strong&gt; : Cocher la case&lt;/p&gt;
&lt;p&gt;Ce paramètre permet de forcer le client à utiliser le VPN en tant que passerelle par défaut dès qu’il est activé. Ce qui peut faire office de proxy sécurisé pour l’ensemble de votre trafic quand vous vous connectez depuis un Wifi Public par exemple. Si vous utilisez un client qui le permet (ex: TunnelBlick), vous pouvez laisser cette options décochée et l’activer au besoin coté client, en revanche l’ajout d’une option « push « route 192.168.9.0 255.255.255.0 » sera obligatoire.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Concurrent connections&lt;/strong&gt; : 3&lt;/p&gt;
&lt;p&gt;Facultatif, permet de limiter le nombre de client connectés en même temps.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Inter-client communication&lt;/strong&gt; : Cocher la case&lt;/p&gt;
&lt;p&gt;Si vous souhaitez que vos client puissent communiquer entre eux.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Disable IPv6&lt;/strong&gt; : Cocher la case&lt;/p&gt;
&lt;h4 id="client-settings"&gt;&lt;em&gt;Client Settings&lt;/em&gt;
&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;Dynamic IP&lt;/strong&gt; : Cocher la case&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valider avec le bouton « &lt;em&gt;Save&lt;/em&gt; » &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="création-de-lunique-utilisateur"&gt;Création de l&amp;rsquo;(unique) utilisateur
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Se rendre dans le menu System &amp;gt; User Manager, puis cliquer sur « &lt;em&gt;ADD&lt;/em&gt; » &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Disabled&lt;/strong&gt; : A cocher pour empêcher le user d’avoir le droit de se loguer sur la WebUI&lt;/p&gt;
&lt;p&gt;En effet, le but est d’avoir un utilisateur dédié sans accès à l’interface. Ensuite choisissez un login, un password, un nom long (facultatif), une date d’expiration (si vous cherchez des ennuis, vu que vous vous demanderez dans quelques mois pourquoi ça ne fonctionne plus). Une fois le user crée, nous allons lui attribuer le certificat client que nous avons généré précédemment :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Cliquer sur le bouton « &lt;em&gt;Edit user&lt;/em&gt; » (mais si, le petit crayon bleu à droite &amp;hellip; l’autre droite)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dans le cadre  « &lt;em&gt;User Certificates&lt;/em&gt;  , cliquer sur « &lt;em&gt;Add&lt;/em&gt; » &lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Method&lt;/strong&gt; : Choose an existing certificate&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Existing Certificates&lt;/strong&gt; : Sélectionner votre certificat client qui doit être le seul non encore utilisé&lt;/p&gt;
&lt;p&gt;Il ne vous reste plus qu’à sauvegarder la modification. L’idée est de créer un couple user/certificat client par personne (logique) voir par machine cliente, ça permet notamment pouvoir les révoquer individuellement au besoin. Enfin si vous avez besoin de plusieurs utilisateurs, créez leur un groupe dédié pour les ranger (c’est plus propre, on est pas des sauvages).&lt;/p&gt;
&lt;h3 id="configuration-dudes-clients"&gt;Configuration du/des client(s)
&lt;/h3&gt;&lt;p&gt;Afin de pouvoir accéder à notre tunnel, il faut maintenant récupérer :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La clé privé du certificat client crée précédemment&lt;/li&gt;
&lt;li&gt;La clé publique de ce même certificat&lt;/li&gt;
&lt;li&gt;Un modèle de configuration client d’OpenVPN et l’adapter&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Je suis donc censé vous décliner la marche à suivre pour préparer des « kits » de configuration,  en fonction des options sélectionnées pour notre serveur, des spécificités de mise en forme de certificats pour les différents types de clients (Linux, MacOS, iOS, Android &amp;hellip; voir Windows) et également pour chaque &amp;hellip; ah ouai &amp;hellip; mais non en fait.&lt;/p&gt;
&lt;p&gt;Nous allons plutôt utiliser un des (nombreux) avantages de PFSense, à savoir son gestionnaire de paquets !&lt;/p&gt;
&lt;p&gt;En effet, il existe plus d’une cinquantaine de packages (en release 2.3.4) qui permettent d’ajouter des fonctionnalités à notre Firewall. Pour ne rien gâcher, ils sont installables en un clic depuis l’interface Web et leurs paramètres sont sauvegardés automatique par le mécanisme de backup intégré de PFSense qui est un simple fichier XML.&lt;/p&gt;
&lt;p&gt;Enfin, comble du bonheur, il en existe un qui fait exactement tout ce qui nous intéresse : openvpn-client-export !&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_wonderful-world.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Se rendre dans le menu System &amp;gt; Package Manager, puis cliquer sur l’onglet « &lt;em&gt;Available Packages&lt;/em&gt; » &lt;/li&gt;
&lt;li&gt;Taper « export » dans le champ de recherche, puis installer le paquet via le bouton « &lt;em&gt;Install&lt;/em&gt; »&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vous pouvez aussi profiter d’une recherche manuelle pour parcourir les différents paquets disponibles.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_pfsense-export-pkg.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://docs.netgate.com/pfsense/en/latest/packages/openvpn-client-export.html" target="_blank" rel="noopener"
&gt;Lien vers la documentation du package OpenVPN Client Export&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Naviguer vers le menu VPN &amp;gt; OpenVPN, puis cliquer sur le nouvel onglet &lt;em&gt;« Client Export »&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Remote Access Server&lt;/strong&gt; : Sélectionner le serveur VPN souhaité (le seul à priori)&lt;br&gt;
&lt;strong&gt;Host Name Resolution&lt;/strong&gt; : Other&lt;/p&gt;
&lt;p&gt;Le choix par défaut « &lt;em&gt;Interface IP Address&lt;/em&gt; » va renseigner l’@IP locale de votre interface &lt;strong&gt;WAN&lt;/strong&gt; (10.0.0.2) dans le fichier de configuration du client et quand vous essaierez de vous y connecter depuis internet ça marchera beaucoup moins bien. Le mieux est de sélectionner « &lt;em&gt;Other&lt;/em&gt; » et de saisir directement votre IP publique ou votre nom de domaine (en cas d’utilisation de DynHost par exemple).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use Random Local Port :&lt;/strong&gt; Cocher la case (obligatoire si vous prévoyez plusieurs client en simultanés)&lt;/p&gt;
&lt;p&gt;Scroller à présent vers le bas jusqu’au cadre OpenVPN Clients :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_clients-export.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Il ne reste plus qu’à télécharger les configs qui vous intéresse !&lt;/p&gt;
&lt;p&gt;Pour les utilisateurs de MacOS, je vous conseille le client VPN &lt;a class="link" href="https://tunnelblick.net/downloads.html" target="_blank" rel="noopener"
&gt;Tunnelblick&lt;/a&gt;. Une fois installé, télécharger la « &lt;em&gt;Standard Configuration&lt;/em&gt; » au format « &lt;em&gt;Archive&lt;/em&gt; » . Dézipper l’archive, ajouter le suffixe « .tblk » pour transformer le dossier en configuration pour Tunnelblick et enfin l’ouvrir pour la charger automatiquement dans l’application.&lt;/p&gt;
&lt;p&gt;Une fois la/les configuration(s) installé(s) sur votre/vos client(s), il ne reste plus qu’à paramétrer les règles PFSense requises.&lt;/p&gt;
&lt;h3 id="configuration-des-flux"&gt;Configuration des flux
&lt;/h3&gt;&lt;h4 id="autoriser-laccès-du-client-au-serveur-vpn-depuis-internet"&gt;Autoriser l’accès du client au serveur VPN depuis internet
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;Naviguer vers le menu Firewall &amp;gt; Rules&lt;/li&gt;
&lt;li&gt;Sélectionner l’onglet WAN puis ajouter une nouvelle règle avec « &lt;em&gt;ADD&lt;/em&gt; »&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Action&lt;/strong&gt; : Pass&lt;br&gt;
&lt;strong&gt;Interface&lt;/strong&gt; : WAN&lt;br&gt;
&lt;strong&gt;Protocol&lt;/strong&gt; : UDP&lt;br&gt;
&lt;strong&gt;Source&lt;/strong&gt; : Any&lt;br&gt;
&lt;strong&gt;Destination&lt;/strong&gt; : WAN address&lt;br&gt;
&lt;strong&gt;Destination Port Range (From)&lt;/strong&gt; : 2294 (ou le port d’écoute choisi pour votre serveur)&lt;br&gt;
&lt;strong&gt;Description&lt;/strong&gt; : Renseigner le nom qui s’affichera pour la règle (ex: OpenVPN nomad access)&lt;/p&gt;
&lt;h4 id="autoriser-laccès-du-client-en-provenance-du-tunnel-vpn-aux-lan--wan"&gt;Autoriser l’accès du client en provenance du tunnel VPN aux LAN &amp;amp; WAN
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;Sélectionner l’onglet OpenVPN puis ajouter à nouveau une règle avec « &lt;em&gt;ADD&lt;/em&gt; »&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Action&lt;/strong&gt; : Pass&lt;br&gt;
&lt;strong&gt;Interface&lt;/strong&gt; : OpenVPN&lt;br&gt;
&lt;strong&gt;Protocol&lt;/strong&gt; : Any&lt;br&gt;
&lt;strong&gt;Source&lt;/strong&gt; : Network - 10.2.2.0/24&lt;br&gt;
&lt;strong&gt;Destination&lt;/strong&gt; : any&lt;/p&gt;
&lt;p&gt;Ici on peut limiter l’accès des clients au seul LAN mais il faudra désactiver l’option « &lt;em&gt;Redirect Gateway&lt;/em&gt; » du serveur et le VPN ne pourra plus être utilisé en tant que proxy Web.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Destination Port Range (From)&lt;/strong&gt; : 2294 (ou le port d’écoute choisi pour votre serveur)&lt;br&gt;
&lt;strong&gt;Description&lt;/strong&gt; : Renseigner un nom pour la règle&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valider les changements via le bouton « &lt;em&gt;Apply Changes&lt;/em&gt; »&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vous n’avez plus qu’à démarrer votre client VPN, renseigner votre login/pass et c’est parti !&lt;/p&gt;
&lt;h2 id="the-end-"&gt;THE END !
&lt;/h2&gt;&lt;p&gt;Voilà n’hésitez pas à commenter, poser des questions, faire une donation via PayPal si vous voulez supporter le blog avec les quelques euros qui traînent sur votre compte et surtout abonnez-vous à NoLife &amp;hellip; ah non c’est pas ça je m’égare &amp;hellip; allez see u guys.&lt;/p&gt;</description></item><item><title>Déploiement de Proxmox VE 5 sur un serveur dédié – part 2</title><link>https://blog.zwindler.fr/2017/07/18/deploiement-de-proxmox-ve-5-sur-un-serveur-dedie-part-2/</link><pubDate>Tue, 18 Jul 2017 12:00:32 +0000</pubDate><guid>https://blog.zwindler.fr/2017/07/18/deploiement-de-proxmox-ve-5-sur-un-serveur-dedie-part-2/</guid><description>&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_thumbnail.webp" alt="Featured image of post Déploiement de Proxmox VE 5 sur un serveur dédié – part 2" /&gt;&lt;blockquote&gt;
&lt;p&gt;Note : Cette suite d’articles de 2016 écrite par M4vr0x a été remis à jour par Charles et moi. Je vous conseille d’aller lire celui ci plutôt, qui sera plus en phase avec les versions actuelles. &lt;a class="link" href="https://blog.zwindler.fr/2020/03/02/deploiement-de-proxmox-ve-6-pfsense-sur-un-serveur-dedie/%22%3e" &gt;Proxmox VE 6 + pfsense sur un serveur dédié (1/2)&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Cet article fait partie d’une suite de 3 articles sur la mise en place de Proxmox VE et sa sécurisation et dont voici les adresses :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2017/07/11/deploiment-de-proxmox-ve-5-sur-un-serveur-dedie-part-1/" &gt;Déploiement de Proxmox VE 5 sur un serveur dédié - part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2017/07/18/deploiement-de-proxmox-ve-5-sur-un-serveur-dedie-part-2/" &gt;Déploiement de Proxmox VE 5 sur un serveur dédié - part 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2017/07/25/deploiement-de-proxmox-ve-5-sur-un-serveur-dedie-part-3/" &gt;Déploiement de Proxmox VE 5 sur un serveur dédié - part 3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Après avoir déployé Proxmox, nous allons poursuivre la mise en œuvre de notre infrastructure de Labs sur notre serveur dédié, en procédant aux étapes suivantes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sécuriser l’OS&lt;/li&gt;
&lt;li&gt;Paramétrer les interfaces via la WebUI de Proxmox&lt;/li&gt;
&lt;li&gt;Installer la VM PFSense&lt;/li&gt;
&lt;li&gt;Utiliser l’iptables de l’hyperviseur pour router et sécuriser les flux&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="basic-hardening"&gt;Basic hardening
&lt;/h1&gt;&lt;p&gt;Je vous conseille TRÈS VIVEMENT (non en fait c’est obligatoire) d’appliquer les bonnes pratiques élémentaires en matière de sécurisation listées dans &lt;a class="link" href="https://docs.ovh.com/x/iIQUAQ" target="_blank" rel="noopener"
&gt;ce très bon article rédigé par OVH&lt;/a&gt; et qui détaille tous les points ci-dessous.&lt;/p&gt;
&lt;p&gt;Si vous voulez creuser un peu plus, regardez également du coté des outils d’audit du genre de &lt;a class="link" href="https://cisofy.com/lynis/" target="_blank" rel="noopener"
&gt;Lynis&lt;/a&gt; (ex rkhunter), c’est simple à utiliser et ça vous donnera plein de pistes sur des vulnérabilités potentielles : &lt;a class="link" href="https://packages.cisofy.com/community/" target="_blank" rel="noopener"
&gt;Doc d’installation officielle&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Voilà, pour ma part, ce que j’ai mis en place :&lt;/p&gt;
&lt;h5 id="changement-du-mot-de-passe-root"&gt;Changement du mot de passe root
&lt;/h5&gt;&lt;p&gt;Si vous avez utilisé un mot de passe simple pour éviter les risques d’erreurs lors de la configuration (comme évoqué dans la part 1), on se connecte via SSH et on paramètre un VRAI password.&lt;/p&gt;
&lt;h5 id="mise-à-jour-du-système"&gt;Mise à jour du système
&lt;/h5&gt;&lt;p&gt;Toujours une bonne habitude à prendre avant de commencer, même si à l’heure où j’écris ces lignes la version 5 de Proxmox est sortie depuis seulement quelques jours. Rien de compliqué, on est sur une Debian :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;apt-get update; apt-get upgrade
&lt;/code&gt;&lt;/pre&gt;&lt;h5 id="création-dutilisateur"&gt;Création d’utilisateur
&lt;/h5&gt;&lt;p&gt;La création d’un utilisateur « lambda », autre que root, est fortement recommandée. Par défaut l’authentification du portail de Proxmox se base sur PAM donc vous pourrez vous loguer avec, après l’avoir ajouté dans la WebUI.&lt;/p&gt;
&lt;h5 id="configuration-du-serveur-ssh"&gt;Configuration du serveur SSH
&lt;/h5&gt;&lt;p&gt;Désactivez l’accès root et privilégiez le recours au user évoqué ci-dessus puis utilisez une élévation de privilège de type su ou sudo.&lt;/p&gt;
&lt;h5 id="installation-de-fail2ban"&gt;Installation de Fail2ban
&lt;/h5&gt;&lt;p&gt;Là aussi indispensable, il s’installe en une commande, il est déjà configuré avec un grand nombre de règles par défaut qui parsent vos différents log et bannissent toutes les @IP concernées. D’ailleurs, si vous n’êtes pas convaincu de son utilité, je vous mets un (petit) extrait de mon auth.log juste avant son installation :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_auth-log.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Voilà, voilà &amp;hellip; contrairement à &lt;a class="link" href="http://www.infosniper.net/index.php?ip_address=222.190.105.10&amp;amp;map_source=1&amp;amp;overview_map=1&amp;amp;lang=1&amp;amp;map_type=1&amp;amp;zoom_level=7" target="_blank" rel="noopener"
&gt;notre ami de Nanjing&lt;/a&gt; qui a effectué 161 tentatives en 32h avec des logins plus ou moins improbables &amp;hellip; nous on se marre moins tout de suite !!&lt;/p&gt;
&lt;p&gt;Au passage, voilà &lt;a class="link" href="https://www.digitalocean.com/community/tutorials/how-to-protect-ssh-with-fail2ban-on-ubuntu-14-04" target="_blank" rel="noopener"
&gt;un article sur la configuration de Fail2ban&lt;/a&gt; de l’hébergeur Digital Ocean (Ils en font d’ailleurs beaucoup d’intéressants je vous encourage à écumer leurs tutos)&lt;/p&gt;
&lt;h5 id="changement-du-port-découte-du-serveur-ssh"&gt;Changement du port d’écoute du serveur SSH
&lt;/h5&gt;&lt;p&gt;Alors là attention, aucun doute sur la pertinence de la mesure, cela vous permettra d’éviter la grande majorité des tentatives d’accès non autorisées car la plupart des bots se contentent de scanner les ports par défauts des principaux services. Par contre si vous faites ça, vous allez devoir adapter le port SSH dans le script iptables que je vous fournis pas la suite et les tentatives d’intrusion sur le port 22 seront redirigés directement sur le PFSense, ce qui n’est pas forcément mieux. Bref à vous de voir, pour ma part je reste sur le port par défaut mais avec un Fail2ban bien configuré.&lt;/p&gt;
&lt;h1 id="configuration-du-réseau"&gt;Configuration du réseau
&lt;/h1&gt;&lt;p&gt;Voici le plan réseau de l’infrastructure que nous allons mettre en place (cliquez pour agrandir) :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_full-infra-diag.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Le but est de rediriger la totalité du trafic entrant sur l’adresse IP public du serveur vers l’interface WAN du PFSense. Cela permet de gérer la sécurisation et le routage des flux simplement, directement depuis PFSense et surtout en évitant d’avoir à doubler chaque règles de filtrage sur l’iptables.&lt;/p&gt;
&lt;h2 id="paramétrage-des-interfaces-virtuels"&gt;Paramétrage des interfaces virtuels
&lt;/h2&gt;&lt;p&gt;Cela peut se faire directement via la WebUI de Proxmox, Les réglages seront simplement automatiquement retranscrits dans le fichier « &lt;em&gt;/etc/network/interfaces&lt;/em&gt;« .&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Se connecter à l’interface d’administration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Via un navigateur, on se rend en HTTPS sur l’IP public via le port 8006 (https://@IP_PUBLIC_IP:8006). Si vous souhaitez signer vos certificats pour éviter le genre de message que vous allez rencontrer, n’hésitez pas à lire &lt;a class="link" href="https://blog.zwindler.fr/2017/05/02/proxmox-lets-encrypt/" &gt;ce superbe article de Zwindler&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sélectionner votre node dans la colonne de gauche, puis naviguer dans System &amp;gt; Network&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_network-new.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Vous devriez avoir deux interfaces, en01 et en02 (ou eth0 et eth1 chez Kimsufi), qui correspondent aux deux ports physiques de la carte réseau ainsi qu’une interface virtuel, &lt;strong&gt;vmbr0&lt;/strong&gt; bridgé sur &lt;strong&gt;eno1&lt;/strong&gt; qui est l’interface active.&lt;/p&gt;
&lt;p&gt;On peut d’ailleurs voir à quoi cela correspond en affichant notre fichier de configuration :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat /etc/network/interfaces
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Qui devrait contenir ceci :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;auto lo
iface lo inet loopback
iface eno1 inet manual
iface eno2 inet manual
auto vmbr0
iface vmbr0 inet static
address xx.xx.xx.xx
netmask 255.255.255.0
gateway xx.xx.xx.xx
bridge_ports eno1
bridge_stp off
bridge_fd 0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On voit que l’interface eno1 est configuré en « manual », sans adresse IP puisque elle est « portée » par &lt;strong&gt;vmbr0&lt;/strong&gt;, et qu’eno2 n’est pas utilisée.&lt;/p&gt;
&lt;h2 id="création-des-bridges-linux"&gt;Création des bridges Linux
&lt;/h2&gt;&lt;p&gt;On reprend en configurant conformément au schéma ci-dessus :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cliquer sur « &lt;em&gt;Create&lt;/em&gt; » et sélectionner « &lt;em&gt;Linux Bridge&lt;/em&gt;« &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_create-bridge.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Le réseau « VmWanNET » (10.0.0.0/30) sera donc volontairement choisit pour limiter à deux le nombre d’adresses atribuables, celle-ci et le &lt;strong&gt;WAN&lt;/strong&gt; du PFSense. Ici pas de bridge sur une interface réelle pour la vmbr1 puisque « &lt;strong&gt;WAN&lt;/strong&gt; » n’existe pas au niveau de l’hyperviseur, mais cela facilitera la correspondance lors du paramétrage de PFSense.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cliquer (à nouveau) sur « &lt;em&gt;Create&lt;/em&gt; » et sélectionner (encore) « &lt;em&gt;Linux Bridge&lt;/em&gt;« &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cette fois on configure l’interface vmbr2 qui fera parti du réseau « PrivNET » (192.168.9.0/24), et qui sera utilisée plus tard par l’interface « &lt;strong&gt;LAN&lt;/strong&gt; » du PFSense  :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;IP address : 192.168.9.1
Subnet mask : 255.255.255.0
Bridges Ports : LAN
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Une fois terminé, cela donne :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_network-ok.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rebooter l’hyperviseur&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il suffit de cliquer sur « Restart » en haut à droite. C’est impératif pour prendre en compte proprement les modifications, c’est pas moi qui le dis, c’est marqué au dessus de l’encadré affichant le log : « &lt;em&gt;Pending changes (Please reboot to activate changes)&lt;/em&gt; » &amp;hellip; allez promis c’est la seule fois où ce sera nécessaire.&lt;/p&gt;
&lt;p&gt;Après le redémarrage, vous pouvez vérifier le contenu du fichier « interfaces » :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;auto lo
iface lo inet loopback
iface eno1 inet manual
iface eno2 inet manual
auto vmbr0
iface vmbr0 inet static
address xx.xx.xx.xx
netmask 255.255.255.0
gateway xx.xx.xx.xx
bridge_ports eno1
bridge_stp off
bridge_fd 0
auto vmbr1
iface vmbr1 inet static
address 10.0.0.1
netmask 255.255.255.252
bridge_ports WAN
bridge_stp off
bridge_fd 0
auto vmbr2
iface vmbr2 inet static
address 192.168.9.1
netmask 255.255.255.0
bridge_ports LAN
bridge_stp off
bridge_fd 0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Je vous conseille de le conserver quelques part puisque en cas de réinstallation, un simple copier/coller suivi d’un reboot vous permettra de tout reconfigurer rapidement. Nous poursuivrons le paramétrage et la sécurisation par la suite.&lt;/p&gt;
&lt;h1 id="déploiement-de-pfsense"&gt;Déploiement de PFSense
&lt;/h1&gt;&lt;h2 id="création-de-la-vm"&gt;Création de la VM
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Télécharger l’ISO de PFSense&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rendez-vous sur &lt;a class="link" href="https://www.pfsense.org/download/" target="_blank" rel="noopener"
&gt;le site officiel&lt;/a&gt; pour récupérer la dernière version stable de la Community Edition, de type « &lt;em&gt;install&lt;/em&gt;« , au format ISO et pour archi AMD64 (64bits). On sélectionne ensuite le volume de stockage souhaité, ici « &lt;em&gt;local&lt;/em&gt;« , puis on clique sur Content &amp;gt; Upload&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_pfsense-vm-upload-iso.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Mais on peut également, surtout si votre débit d’upload est poussif, la télécharger directement depuis le serveur dans le répertoire des ISOs :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cd /var/lib/vz/template/iso
wget [lien mort, aller sur https://pfsense.org/]
gunzip pfSense-CE-2.3.4-RELEASE-amd64.iso.gz
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Créer la VM pour PFSense&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voilà les paramètres que j’utilise, ceux qui n’y figure pas sont laissés par défaut :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OS&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Linux/Other OS types : Other OS types&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;CD/DVD&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Use CD/DVD disc image file (iso)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Storage : local&lt;/li&gt;
&lt;li&gt;ISO image : pfSense-CE-2.3.4-RELEASE-amd64.iso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Hard Disk&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bus/Device : VirtIO / 0&lt;/li&gt;
&lt;li&gt;Storage : local&lt;/li&gt;
&lt;li&gt;Size : 8 GB&lt;/li&gt;
&lt;li&gt;Format : QEMU (qcow2)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;CPU&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sockets : 1&lt;/li&gt;
&lt;li&gt;Cores : 2&lt;/li&gt;
&lt;li&gt;Type : Défaut (kvm64)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Memory&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Mémoire fixe avec ballooning activé&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Taille : 2048 MB&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Network&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bridged mode (Accès par pont)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bridge : vmbr1&lt;/li&gt;
&lt;li&gt;Model Intel E1000&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;/!\ Pour la carte réseau SURTOUT pas de VirtIO sans installer le driver requis /!\&lt;br&gt;
Pour plus détails &lt;a class="link" href="https://forum.pfsense.org/index.php?topic=72907.0" target="_blank" rel="noopener"
&gt;ici&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Créer la seconde interface réseau&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Assurez-vous d’être dans la « Server View » dans le menu en haut à gauche, puis sélectionnez votre VM PFSense nouvellement crée. Enfin, cliquez sur Hardaware &amp;gt; Add &amp;gt; Network Device&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_pfsense-vm-network-device.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;La configuration est la même que pour la première mais pontée sur &lt;strong&gt;vmbr2&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="installation-de-los"&gt;Installation de l’OS
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Démarrer la VM via le bouton « Start »&lt;/li&gt;
&lt;li&gt;Ouvrir une console VNC avec le bouton « Console »&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Laisser le boot se terminer, si ce n’est pas encore fait, jusqu’à voir s’afficher le premier écran de l’installeur :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_pfsense-vm-install-screen-1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Libre à vous de choisir les réglages qui vous conviennent, valider avec le dernier choix du menu.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Choisir « Quick/easy Install »&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_pfsense-vm-install-screen-2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valider à nouveau et l’installation se lance&lt;/li&gt;
&lt;li&gt;Sélectionner le choix par défaut « &lt;em&gt;Standard Kernel&lt;/em&gt;« &lt;/li&gt;
&lt;li&gt;Autoriser le reboot&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vérifiez le boot order de la VM pour bien démarrer sur le disque local, vous pouvez également éjecter l’ISO.&lt;/p&gt;
&lt;h2 id="configuration-des-interfaces"&gt;Configuration des interfaces
&lt;/h2&gt;&lt;p&gt;Une fois la VM redémarrée, vous arrivez sur le menu principal de la console de PFSense :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_pfsense-vm-config-screen.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Taper « 1 » (pas trop fort) pour assigner les interfaces, puis configurer comme suit :&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt; - Paramétrage des VLANs : No (n)
 - WAN interface name : em0
 - LAN interface name : em1
 - Optional 1 interface name : Aucun (appuyer sur entrée)
 - Valider (avec y) si :
WAN -&amp;gt; em0
LAN -&amp;gt; em1
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;De retour dans menu général  taper « 2 » pour configurer les @IP des interfaces&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Taper &amp;#34;1&amp;#34; pour le WAN (em0 - static)
- DHCP : No (n)
- @IP : 10.0.0.2
- Masque : 30
- Gateway : 10.0.0.1
- DHCP6 : No (n)
- WAN IPv6 address : Aucune (appuyer sur entrée)
- HTTP revert : No (n)
 - Valider (avec entrée) si :
IPv4 WAN address =&amp;gt; 10.0.0.2/30
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;A nouveau  « 2 » pour configurer les @IP des interfaces&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Taper &amp;#34;2&amp;#34; pour le LAN (em1 - static)
- @IP : 192.168.9.254
- Masque : 24
- Gateway : Aucune (appuyer sur entrée)
- @IPv6 : Aucune (appuyer sur entrée)
- DHCP server : No (n)
- HTTP revert : No (n)
 - Valider (avec entrée) si :
IPv4 LAN address =&amp;gt; 192.168.9.254/24
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Rebooter la VM en tapant « 5 » puis « y »&lt;/li&gt;
&lt;li&gt;A l’issue, taper « 7 » pour tester le ping vers 10.0.0.1 (l’adresse de &lt;strong&gt;vmbr1&lt;/strong&gt;) et ainsi vérifier la connectivité au sein du &lt;strong&gt;VmWanNET&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="finalisation-via-la-webui"&gt;Finalisation via la WebUI
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Se connecter à la WebUI via un navigateur à l’adresse https://192.168.9.254 &amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;hellip; Quoi ? &amp;hellip; Ça ne marche pas ? &amp;hellip; Sûr ? &amp;hellip; C’est con &amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bon pour ceux qui suivent encore, félicitations ! Pour les autres, l’interface &lt;strong&gt;LAN&lt;/strong&gt; de PFSense n’est pour l’instant pas accessible depuis l’extérieur &amp;hellip; et c’est tant mieux car le password et le login sont toujours ceux par défaut. La solution la plus simple est donc de créer une VM avec n’importe quel OS, du moment qu’il possède une interface graphique et un navigateur web (et que ce n’est pas un Windows). Une Ubuntu Desktop, à télécharger sur &lt;a class="link" href="https://www.ubuntu.com/download/desktop" target="_blank" rel="noopener"
&gt;le site officiel&lt;/a&gt;, fera parfaitement l’affaire.&lt;/p&gt;
&lt;p&gt;Je ne vais pas revenir sur la création de la VM, sachez juste que 5 Go de disque et 512 Mo de RAM suffisent. N’oubliez pas de bridger la carte réseau sur &lt;strong&gt;vmbr2&lt;/strong&gt; pour accéder au réseau &lt;strong&gt;LAN&lt;/strong&gt;. Vous pouvez également, une fois la VM crée, modifier le paramètre Hardware &amp;gt; Display en « VMWare compatible » c’est qui vous permettra de disposer d’autres résolutions plus confortable que le minuscule 800×600.&lt;/p&gt;
&lt;p&gt;Une fois l’OS installé, il faut tout de même paramétrer le réseau manuellement puisque nous n’avons pas (encore) de serveur DHCP fonctionnel :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;- IP : 192.168.9.10 (Peu importe tant qu&amp;#39;on reste dans 192.168.9.0/24)
- Netmask : 255.255.255.0
- Gateway : 192.168.9.254
- DNS : 8.8.8.8
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Se connecter à la WebUI via un navigateur à l’adresse https://192.168.9.254 (non mais vraiment cette fois)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Username : admin
Password : pfsense
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="suivez-le-white-wizard"&gt;Suivez le (White) Wizard
&lt;/h3&gt;&lt;p&gt;Rapport à ma VM PFsense qui se nomme Olorin &amp;hellip; pertinent pour un pare-feu &amp;hellip;&lt;/p&gt;
&lt;p&gt;« You Shall Not Pass ! » &amp;hellip; ok si vous l’avez toujours pas j’abandonne.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Choisir un hostname (non pas celui-là, c’est le mien) et le(s) serveur(s) DNS souhaité(s)&lt;/li&gt;
&lt;li&gt;Valider ou modifier le FQDN du serveur NTP&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour la suite rien à modifier en principe puisque nous avons fait les réglages via la console précédemment.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vérifier la configuration de l’interface &lt;strong&gt;WAN&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;IP Address : 10.0.0.2
Subnet Mask : 30
Upstream Gateway : 10.0.0.1
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Vérifier la configuration de l’interface LAN&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;LAN IP Address : 192.168.9.254&lt;br&gt;
Subnet Mask : 24&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Changer le mot de passe administrateur&lt;/li&gt;
&lt;li&gt;Recharger la configuration et l’accueil du dashboard s’affiche&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_pfsense-main-screen.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h1 id="configuration-du-réseau-suite"&gt;Configuration du réseau (suite)
&lt;/h1&gt;&lt;h2 id="routage-et-nat"&gt;Routage et NAT
&lt;/h2&gt;&lt;p&gt;Particulièrement pour cette partie, je vous encourage à garder le plan réseau à portée de vue.&lt;/p&gt;
&lt;p&gt;Pour l’instant, le &lt;strong&gt;WAN&lt;/strong&gt; du PFSense communique bien avec le vmbr1 ,normal me direz vous, ils sont sur le même segment réseau et &lt;strong&gt;WAN&lt;/strong&gt; est ponté sur vmbr1 dans Proxmox. Maintenant nous allons faire le nécessaire pour pouvoir sortir sur internet depuis la patte WAN du PFSense et donc également depuis le LAN par la suite.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pour cela, créer un petit script sur le serveur Proxmox&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vi /root/kvm-networking-up.sh
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Coller les lignes suivantes :&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;#!/bin/sh
## IP forwarding activation
echo 1 &amp;amp;amp;amp;amp;gt; /proc/sys/net/ipv4/ip_forward
# Point PFSense WAN as route to VMs
ip route change 192.168.9.0/24 via 10.0.0.2 dev vmbr1
# Point PFSense WAN as route to VPN
ip route add 10.2.2.0/24 via 10.0.0.2 dev vmbr1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Comme indiqué dans les commentaires :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La première ligne active le routage&lt;/li&gt;
&lt;li&gt;La deuxième indique au serveur de sortir par vmbr1 puis de passer par le &lt;strong&gt;WAN&lt;/strong&gt; du PFSense pour communiquer avec les VMs. Cela permet d’isoler &lt;strong&gt;vmbr2&lt;/strong&gt; du reste de « PrivNET », cette sécurité sera renforcée, lors de la configuration d’iptables par un blocage complet des flux sur &lt;strong&gt;vmbr2&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Même chose pour la dernière mais pour communiquer avec le(s) client(s) du VPN que nous configurerons dans la suite de l’article.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Puis pour qu’il soit lancé automatiquement au boot, lors du démarrage de vmbr1 :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lui permettre de s’exécuter&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;chmod +x /root/kvm-networking-up.sh
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Paramétrer son appel dans le fichier « interfaces »&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vi /etc/network/interfaces
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ajouter la ligne en gras à la fin du bloc de configuration du bridge vmbr2 :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[...]
auto vmbr1
iface vmbr1 inet static
address 10.0.0.1
[...]
auto vmbr2
iface vmbr2 inet static
[...]
bridge_fd 0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;post-up /root/kvm-networking-up.sh&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Comme je vous ai promis qu’on ne rebooterait plus au début de cette article, on va simplement l’exécuter manuellement pour cette fois :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;/root/kvm-networking-up.sh
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;[Edit zwindler]M4vr0x a oublié qu’il a déplacé une règle IPtable pour rediriger le traffic de l’IP externe vers le pfsense&amp;hellip; La ligne suivante ne marche pas encore, mais à l’étape d’après[/Edit]&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Relancer la console VNC du PFSense et taper « 7 » pour vérifier le ping vers l’internet (genre 8.8.8.8)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="sécurisation-de-lhyperviseur-via-iptables"&gt;Sécurisation de l’hyperviseur via iptables
&lt;/h2&gt;&lt;p&gt;Voilà on a presque terminé mais pendant qu’on s’amusait, et malgré les mesures prises au début de ce tuto, une armée de bots (et pas que des chinois), des hordes de BlackHat ainsi que l’intégralité de la NSA, du GCHQ et de &amp;hellip; l’ANSSI ? &amp;hellip; se tirent la bourre pour essayer de pénétrer sur votre petit serveur sans défense.&lt;/p&gt;
&lt;p&gt;Je n’aurais donc que trois choses à dire :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Si vous ne savez pas ce qu’est le GCHQ, il faut absolument lire &lt;a class="link" href="https://blog.zwindler.fr/2015/10/07/test_espionnage_citoyen_gchq/" &gt;ce magnifique article&lt;/a&gt; !&lt;/li&gt;
&lt;li&gt;Si vous ne savez pas ce qu’est la NSA &amp;hellip; là je ne peux plus rien pour vous&lt;/li&gt;
&lt;li&gt;Nous n’allons pas mourir sans combattre et nous allons au moins &amp;hellip; essayer de les ralentir !&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/07/proxmox-install_this-is-spartha.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h3 id="création-des-règles"&gt;Création des règles
&lt;/h3&gt;&lt;p&gt;Nous allons créer un script pour exécuter toutes les commandes iptables requises. Je vous encourage à ne pas automatiser son lancement au boot avant d’être totalement sûr que tout fonctionne bien.&lt;/p&gt;
&lt;p&gt;Pour ceux qui ont pris iptables en deuxième langue au collège, je vous donne directement le contenu du script (à copier sur le serveur Proxmox) :&lt;/p&gt;
&lt;p&gt;Pour les autres, je vous conseille de bien lire (et comprendre tant qu’à faire) ce qui suit jusqu’à la fin avant de vous lancer. J’ai commenté quasiment chaque ligne mon script le plus explicitement possible, donc je vais simplement vous expliquer le rôle de chacune des parties :&lt;/p&gt;
&lt;p&gt;_VARIABLES _: On commence par la variabilisation des noms de bridges, des @IP et des réseaux. Cela vous permettra de l’adapter rapidement à votre configuration si elle diffère. Quoi qu’il en soit, il faut absolument définir la variable « &lt;em&gt;PublicIP&lt;/em&gt; » avec celle de votre serveur.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;CLEAN ALL &amp;amp; DROP IPV6&lt;/em&gt; : Ensuite on supprime toutes les règles existantes.&lt;/p&gt;
&lt;p&gt;Petit point d’attention, le script, légèrement bourrin, flush toutes les tables et supprime toutes les chaines personnalisées vides à chaque exécution. Si vous voulez éviter ça, pour garder votre/vos chaines Fail2ban existantes par exemple, je vous conseille de plutôt spécifier les tables et chaines à nettoyer.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;DEFAULT POLICY&lt;/em&gt; : On positionne les polices par défaut à DROP : tout ce qui ne sera pas explicitement autorisé sera interdit (comme à l’armée &amp;hellip; \o/ ça faisait longtemps).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;CHAINS&lt;/em&gt;&lt;/strong&gt; : On crée des chaines personnalisées pour éviter la répétition des options.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;GLOBAL RULES&lt;/strong&gt;&lt;/em&gt; : Elles permettent les communications from/to l’interface locale, préservent les connections déjà actives et autorisent la réponse au ping.&lt;/p&gt;
&lt;p&gt;_RULES FOR PrxPubVBR _: On passe à la configuration des flux pour l’interface bridge vmbr0, c’est ici que tout se joue.&lt;/p&gt;
&lt;p&gt;L’idée est simple, on ne va autoriser que les services du Proxmox auxquels on souhaite pouvoir accéder depuis internet via l’IP public (donc le moins possible). &lt;strong&gt;TOUS&lt;/strong&gt; les autres flux seront redirigés sur l’interface &lt;strong&gt;WAN&lt;/strong&gt; du PFSense ce qui nous permettra, comme expliqué au début, d’éviter une pénible gestion de deux firewall chaînés. Une fois que le VPN sera configuré on pourra d’ailleurs désactiver l’accès externe à la WebUI. Pour le SSH on pourra garder un accès de secours en cas de problème avec le futur VPN.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;_RULES FOR PrxVmWanVBR _&lt;/strong&gt;: Pour vmbr1, c’est très simple, on autorise seulement les connexions, en provenance du LAN des VMs et du/des client(s) VPN,  à sshd et l’interface web de Proxmox.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;RULES FOR PrxVmPrivVBR&lt;/strong&gt;&lt;/em&gt; : Pour vmbr2, encore mieux, on laisse tout fermé !&lt;/p&gt;
&lt;p&gt;De plus, comme paramétré précédemment, aucune route ne passe par ce bridge. C’est un moyen simple et assez efficace d’isoler au maximum cette interface du réseau auquel elle appartient. Le mieux aurait été d’utiliser une configuration similaire au mode « &lt;em&gt;promiscuous&lt;/em&gt; » des Vswitchs d’ESX mais je n’ai pas trouvé d’équivalent pour KVM. Une autre solution utilisant la seconde interface physique du serveur est à l’étude par mon expert en sécurité et fera peut être l’objet d’un article spécifique ou d’une MAJ future. D’ailleurs j’en profite :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Merci Nico, Merci Zwindler !&lt;/p&gt;
&lt;p&gt;La clusterisation de nos cerveaux (non ce n’est pas sale) m’a fait gagner beaucoup de temps :-D&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Et voilà ! (avec l’accent américain) Vous avez bien bossé et vous disposez d’une infra totalement fonctionnelle et relativement bien sécurisé, GG !&lt;/p&gt;
&lt;p&gt;Il nous restera bien sûr à configurer les règles adéquates sur PFSense pour les services de vos futures VMs auxquels vous souhaiterez accéder depuis l’extérieur et configurer un serveur VPN afin d’y accéder directement au chaud depuis votre nouveau &lt;strong&gt;LAN.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Nous allons voir tout ça dans &lt;a class="link" href="https://blog.zwindler.fr/2017/07/25/deploiement-de-proxmox-ve-5-sur-un-serveur-dedie-part-3/" &gt;la troisième et dernière partie de cette article par ici&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>