Chahine AzegrarBTS SIO · SISR
← Tous les projets

Sécurité

Proxmox en routeur sécurisé et service Docker

L'hôte Proxmox sert de passerelle filtrante entre le réseau de l'école et un réseau privé de conteneurs ; une application Docker y est publiée par redirection de port.

Problème

Les conteneurs vivent sur un réseau privé et ne doivent pas être exposés directement. L'hôte Proxmox doit faire office de passerelle, filtrer ce qui entre et ne publier que les services voulus.

Architecture

Réseau école --- vmbr0 (zone publique)
                    |
                 Proxmox  : filtrage nftables, NAT, routage
                    |
                 vmbr1 (zone privée) 192.168.1.0/24
                    +-- CT100, CT101 …  clones du modèle Debian
                    +-- CT141           Docker + application web

Mise en œuvre

Pare-feu nftables

Politique par défaut : tout est refusé en entrée, sauf ce qui est explicitement autorisé.

table inet filter {
  chain input {
    type filter hook input priority 0; policy drop;
    iif "lo" accept
    ct state established,related accept
    iifname "vmbr1" accept                       # LAN des conteneurs
    iifname "vmbr0" tcp dport { 22, 80, 443, 8006 } accept
  }
}
table ip nat {
  chain postrouting {
    type nat hook postrouting priority 100;
    oif "vmbr0" masquerade                        # sortie Internet des CT
  }
}

Le script est lancé par un service systemd pour que les règles survivent au redémarrage. Le noyau est durci avec sysctl : anti-usurpation (rp_filter), pas de proxy ARP, ping ignoré.

Service Docker dans un LXC

  1. Création d'un modèle Debian, puis clonage complet pour chaque conteneur.
  2. Activation du nesting sur le LXC pour que Docker puisse y fonctionner.
  3. Point de montage dédié pour les données : supprimer le conteneur ne supprime pas les données.
  4. Redirection d'un port de l'hôte vers le conteneur (DNAT) pour publier l'application.

Problèmes résolus

SymptômeCauseSolution
Images Docker impossibles à télécharger (timeout TLS)MTU trop grand derrière le NATMTU réduit à 1400
Disque racine à 95 %Images Docker volumineusesSurveillance avec df -h, données sur un volume séparé
Connexion refusée alors que le service tourneRègles iptables de Docker en conflit avec le routage de l'hôteIsolation du problème couche par couche

Limites et pistes d'amélioration

  • Dans le jeu de règles ci-dessus, SSH (22) et l'interface d'administration Proxmox (8006) sont ouverts à toute la zone publique. Il faudrait les restreindre à des adresses sources précises.
  • Docker et nftables manipulent tous deux le filtrage de paquets : les règles de Docker interfèrent avec celles de l'hôte, ce qui a causé un des blocages ci-dessus.

Compétences du référentiel mobilisées

  • Sécuriser les équipements et les usages
  • Installer, tester et déployer une solution
  • Exploiter des services réseau