Proxmox – Pare-feu (deep)
Contexte :
- J’avais besoin de bloquer l’accès en fonction de règles strictes basées sur l’IP.
- C’était précisément dans le cadre de cloquer tout accès à un serveur (home-assistant) hors HTTPS.
Dans le cadre d’une sécurisation à outrance (mode parano) je désire interdire l’accès à mon serveur home-assistant depuis son adresse IP et surtout parce que cette connexion est établie en HTTP et non en HTTPS.
Du coup, pour couper l’herbe sous le pied à la moindre tentative de connexion non sécurisée, je veux refuser la connexion tout bonnement.
Simple
Objectif :
Bloquer le trafic vers le port 8123 au niveau de l’hôte Proxmox, sauf si ça vient du proxy (192.168.0.104).
❔Pourquoi est-ce que le pare-feu Proxmox VM ne suffit pas seul ?
Parce que le filtrage Proxmox sur la VM (via GUI) agit uniquement à l’intérieur de la VM, au niveau de la couche logique tapX (dans le container réseau de la VM).
Cela ne bloque pas toujours le trafic dès l’arrivée sur le bridge réseau (vmbr0).
Étapes :
- Se connecter à son interface de gestion Proxmox
- Vérifier que le bridge utilisé par la VM Home-Assistant : généralement
vmbr0 - Ouvrir le panneau de console Shell (root)
- Ajouter les règles iptables suivantes (et dans cette ordre précis).
iptables -I FORWARD -d 192.168.0.100 -p tcp --dport 8123 -j DROP
iptables -I FORWARD -s 192.168.0.104 -d 192.168.0.100 -p tcp --dport 8123 -j ACCEPT
-
▶️ La règle « DROP » à destination de 192.168.0.100:8123 (home-assistant) est celle qui annonce que tout le reste sera refusé. Elle va venir en bas de la liste.
-
▶️ La règle « ACCEPT » vient par dessus la précédente et vient annoncer la permission accordée au trafic provenant de 192.168.0.104 (Nginx : reverse proxy) à destination de 192.168.0.100:8123 (home-assistant) .
- Faites dès à présent un essai en vous rendant successivement aux adresses :
– http//:192.168.0.100:8123 (doit être bloqué !)
– https://homeassistant.local (doit fonctionner !)
Les règles que l’on vient d’établir non sont pas persistantes. Elles seront perdues lors du prochain redémarrage de Proxmox.
Voyons à rendre ces derniers persistantes en installer un petit complément à Proxmox.
- Installation du composant iptables dans Proxmox.
apt install iptables-persistent
- Il vous sera demandé de valider <
Y> mais aussi je crois d’importer vos règles…
- Importer durablement nos précédentes règles :
netfilter-persistent save
🤩 Voilà, cette fois vous venez de bloquer durablement l’accès à votre serveur HAOS monté dans une VM sous Proxmox, par le biais de son adresse IP.
Aide pour les commandes iptables
-
1. Vérifier les règles actuelles
Liste toutes les règles en place (avec numéros de ligne)
iptables -L -v -n --line-numbers-L: list-v: verbose (affiche le trafic)-n: n’affiche pas les noms DNS (plus rapide)--line-numbers: affiche l’index des règles (utile pour les supprimer)
Tu peux aussi spécifier une chaîne (comme
FORWARD,INPUT, etc.) :iptables -L FORWARD -v -n --line-numbers2. Ajouter une règle
Exemple : Bloquer le port 8123 vers Home Assistant sauf depuis le proxy
# Bloquer tous les autres accès à HA sur le port 8123 iptables -I FORWARD -d 192.168.0.100 -p tcp --dport 8123 -j DROP # Autoriser le proxy à accéder à HA iptables -I FORWARD -s 192.168.0.104 -d 192.168.0.100 -p tcp --dport 8123 -j ACCEPT #Attention à l'ordre. Priorité toujours à la règle placée au dessus (donc écrit en dernier).-Iinsère la règle en haut de la chaîne (prioritaire)3. Supprimer une règle
-
Liste les règles avec leur numéro :
iptables -L FORWARD -v -n --line-numbersExemple de sortie :
Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 ACCEPT tcp -- 192.168.0.104 192.168.0.100 tcp dpt:8123 2 DROP tcp -- 0.0.0.0/0 192.168.0.100 tcp dpt:8123-
Supprime la règle 2 :
iptables -D FORWARD 2Sauvegarder (fichier) ses règles
A des fins de tests (par exemple) j’ai envie de désactiver les règles établies mais je veux pouvoir les remettre en place après mes tests.
Il faut pouvoir les sauvegarder dans un fichier distinct qu’il sera alors possible de rappeler au besoin à la fin des tests.
(Il y a 1 fichier par classe d’IP)Sauvegarde distinct
cp /etc/iptables/rules.v4 /etc/iptables/rules.v4.backupcp /etc/iptables/rules.v6 /etc/iptables/rules.v6.backupDésactivation globale
sudo iptables -Fsudo ip6tables -FRappel des sauvegardes
En 1 seule commande, oui.
sudo netfilter-persistent reloadAutomatisation
(Une fois vos règles enregistrées dans un fichier backup comme expliqué plus haut)
Si vous souhaitez automatiser ce processus, vous pouvez créer un script shell simple pour basculer entre les règles actives et désactivées. Par exemple :
#!/bin/bash if [ "$1" == "disable" ]; then iptables -F ip6tables -F elif [ "$1" == "enable" ]; then netfilter-persistent reload else echo "Usage: $0 [disable|enable]" fiEnregistrez ce script dans un fichier, par exemple toggle_iptables.sh, et rendez-le exécutable avec
chmod +x toggle_iptables.sh. Vous pouvez ensuite l’utiliser pour désactiver et réactiver facilement vos règles :./toggle_iptables.sh disable./toggle_iptables.sh enable
