Proxmox – Pare-feu (deep)

Noyé dans un océan de doutes

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 :

  1. Se connecter à son interface de gestion Proxmox
  2. Vérifier que le bridge utilisé par la VM Home-Assistant : généralement vmbr0
  3. Ouvrir le panneau de console Shell (root)
  4. 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) .
  1. 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.

  1. 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…
  1. 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-numbers
       
                
                        
            

    2. 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).
    
    
    
       
                
                        
            

    -I insère la règle en haut de la chaîne (prioritaire)

    3. Supprimer une règle

    1. Liste les règles avec leur numéro :
        iptables -L FORWARD -v -n --line-numbers
       
                
                        
            

    Exemple 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
       
                
                        
            
    1. Supprime la règle 2 :
        iptables -D FORWARD 2
       
                
                        
            

    Sauvegarder (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.backup   
                
                        
            
        cp /etc/iptables/rules.v6 /etc/iptables/rules.v6.backup   
                
                        
            
    Désactivation globale
        sudo iptables -F   
                
                        
            
        sudo ip6tables -F   
                
                        
            
    Rappel des sauvegardes

    En 1 seule commande, oui.

        sudo netfilter-persistent reload
       
                
                        
            
    Automatisation

    (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]"
    fi
       
                
                        
            

    Enregistrez 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
       
                
                        
            

Tags: , , , ,

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *