Le scenario est le suivant :

  • un serveur proxmox sur un serveur dédié hébergé chez online,
  • une seule IP publique,
  • plusieurs containers, un par application,
  • plusieurs sites web sur des containers différents,
  • des ordinateurs clients connectés en VPN site à site avec Ipfire.

Schématiquement on veut çà :

Proxmox avec VM ipfire et VPN site-to-site
Ludovic Lestrat

Description des différents réseaux à mettre en place

Sur le serveur Proxmox, on va mettre en place ce qu’on a déjà décrit dans l’article sur la configuration multi-site avec une adresse IP

  • le périphérique vmbr0 porte l’IP publique du serveur et reçoit toutes les flux en sortie des différents containers/machine virtuelles.
  • vmbr254 : c’est un bridge sur lequel on active le masquerading pour tout renvoyer depuis ce sous-réseau 192.168.50.0 vers l’extérieur. On va aussi utiliser ce bridge pour mettre en place des règles de NAT par service (par port).

La différence par rapport à la configuration présenté dans l’article cité précédemment, c’est qu’on veut intercaler un parefeu ipfire entre ce réseau 192.168.50.X et les containers/VM. Ipfire va donc se positionner avec :

  • une patte sur vmbr254 qui sera son interface red (WAN),
  • une patte sur un sous-réseau virtualisé porté par le bridge vmbr250, qui sera son interface Green (LAN).

Tous les containers à servir sur le Web seront branchés à ce bridge vmbr250 qui portera les adresses de la plage 192.168.100.X

Pour les besoins de la configuration intermédiaire d’Ipfire, on va positionner une VM avec une distribution Linux (Mint dans notre exemple) sur le pont vmbr254. Cette machine virtuelle nous permettra d’accéder dans un premier temps à l’interface web d’ipfire. Une fois le VPN configuré, elle ne sera utile que pour d’éventuels dépannages.

Configuration /etc/network/interfaces

Tout cela se traduit dans le fichier de configuration de proxmox /etc/network/interfaces. Voici ce que çà donne :

auto lo
iface lo inet loopback
iface eth0 inet manual

auto vmbr0
iface vmbr0 inet static
        address  xx.yy.zz.ww      # Ip public du serveur fourni par l'hebergeur
        netmask  255.255.255.0
        gateway  163.XX.101.1 # gateway de l'hebergeur
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0

# Le pont et ses règles de masquerading
auto vmbr254
iface vmbr254 inet static
        address  192.168.50.254
        netmask  255.255.255.0
        bridge_ports none
        bridge_stp off
        bridge_fd 0
        post-up echo 1 > /proc/sys/net/ipv4/ip_forward
        post-up iptables -t nat -A POSTROUTING -s '192.168.50.0/24' -o vmbr0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '192.168.50.0/24' -o vmbr0 -j MASQUERADE

# Le switch virtuel pour les CT et VM à servir
auto vmbr250
iface vmbr250 inet manual
        address  192.168.100.250
        netmask  255.255.255.0
        bridge_ports none
        bridge_stp off
        bridge_fd 0

# quelques regles de NAT pour servir les containers
# Pour les serveurs web
post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 192.168.10.253
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 192.168.10.253
post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 443 -j DNAT --to 192.168.10.253
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 443 -j DNAT --to 192.168.10.253
# Un serveur postgresql
post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 5432 -j DNAT --to 192.168.10.253
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 5432 -j DNAT --to 192.168.10.253
# Un port pour le futur VPN
post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 4450 -j DNAT --to 192.168.10.253
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 4450 -j DNAT --to 192.168.10.253

Pour les règles de NAT, on transfère tout ce qu’on va avoir besoin vers la future adresse de l’interface Red d’Ipfire.


Installation de la vm ipfire

On ne vas ici décrire le processus d’installation d’ipfire. Pour cela, aller voir le wiki

Pour pouvoir installer correctement ipfire en tant que machine virtuelle, on va procéder ainsi :

  • télécharger le dernier ISO d’ipfire,
  • aller dans Datacenter->[nom du noeud proxmox]->local,
  • cliquer sur le bouton "upload" pour charger l’ISO sur le serveur proxmox,
  • cliquer sur creer VM dans l’interface graphique de proxmox,
  • définir son ID, son nom, son type d’OS (Linux 4.X/3.X kernel),
  • dans l’onglet CD/DVD, sélectionner l’ISO d’ipfire,
  • suivre le reste du processus dans l’onglet réseau, sélectionner le pont vmr254,
  • finaliser les paramétrages et cliquer sur terminer.
    Ne surtout pas lancer le démarrage de la nouvelle VM tout de suite !
    En effet, il manque une interface réseau !
  • on sélectionne la VM ipfire dans la liste des VM/CT à gauche dans l’interface,
  • on choisit l’item "matériel",
  • on clique dans la liste déroulante sur "ajouter->Carte réseau",
  • on choisit le pont "vmbr250" en vérifiant bien que le modèle de carte réseau virtualisé est différent de celui affecté à "vmbr254"

Maintenant, on peut démarrer la machine virtuelle et procéder à l’installation d’Ipfire,

  • en sélectionnant bien pour l’interface Red la carte réseau virtualisée sur le bridge 254,
  • et pour l’interface green celle sur le bridge 250.
  • Pour Red, on mets les paramètres réseaux suivantes
    • IP : 192.168.50.253
    • Masque : 255.255.255.0
  • Pour green :
    • IP : 192.168.100.254
    • Masque 255.255.255.0
  • En DNS on indique :
    • Primaire : 192.168.50.254
    • Secondaire : un DNS externe, celui de l’hebergeur ou de google 8.8.8.8
    • Passerelle : 192.168.50.254

L’installation finie, on va utiliser la machine virtuel Linux Mint (par la console VNC de proxmox) pour aller se connecter sur l’interface de configuration à l’adresse et mettre en place nos règles de parefeu :
https://192.168.50.253:444

Les règles suivantes sont les premières avant la mise en place du VPN :

VM IPfire config après VPN
Ludovic Lestrat
  • une règle de NAT pour le serveur postgresql qui renvoie vers l’IP du container approprié,
  • une autre règle (9 sur image) pour postgresql permet à la fois d’accéder à postgresql depuis l’extérieur mais aussi entre containers,
  • une règle de NAT pour accéder en ssh à un autre container,
  • un ensemble de port standard ouvert du LAN vers le WAN pour les containers (http, https, DNS...),
  • deux règles de NAT pour renvoyer les ports web http et https vers le container qui héberge le reverse proxy Nginx (qui lui renvoie sur les bons containers).
  • deux règles permettant d’accéder à l’interface d’administration d’ipfire, l’une depuis internet (désactivée ici) et une depuis le réseau green (utile si la VM linux mint est sur ce réseau porté par vmbr250 et non pas sur le vmbr254)

    Configuration du VPN site à site

    Là encore, je ne vais pas décrire le processus et je vous renvoie à la doc d’ipfire , sachant que ce que l’on cherche à faire est une configuration site à site
    Je peux également vous indiquer cete vidéo intéressante pour bien comprendre ce qu’il faut faire :
    Vidéo en allemand (ya !)

Une fois le VPN en place, vos règles de parefeu devrait se résumer à ceci :

VM IPfire config après VPN
Ludovic Lestrat
  • les règles de NAT ne changent pas, sauf les règles ssh qui disparaissent puisqu’on passera uniquement via le VPN pour ces accès,
  • on indique que tout ce qui vient du VPN est accepté,
  • le parefeu lui même n’est plus accessible que depuis le VPN

Exploitation

Depuis les machines du LAN distant sur le schéma, il est désormais possible de :

  • accéder en ssh à un container en utilisant directement son adresse IP de la forme 192.168.100.X,
  • accéder à l’interface d’ipfire avec son IP locale 192.168.100.254
  • accéder au serveur postgresql en indiquant comme serveur IP 192.168.100.1
    Le tout, dans un flux sécurisé crypté par le VPN.

Avec le parefeu ipfire, on peut :

  • en profiter pour tracer l’ensemble des flux vers les différents services et générer des statistiques de fréquentation,
  • mettre en place des outils d’intrusions et d’exclusions automatique d’hotes,
  • tout ce qu’Ipfire peut apporter en terme de sécurité et de réglage deflux (QOS).

Sources :
Linuxfr
Forum proxmox
Blog Joe Aldeguer
Mind and Go
IPfire Wiki