Bonsoir,
Les deux questions sont posées à la fin du post. J’ai été obligé de développer un peu, je pense que le contexte est important pour comprendre. Ces questions ont un rapport avec : sécurité réseau / routage / iptables.
J’ai un serveur dédié chez OVH, avec une IP publique qui sera pour l’exemple 37.37.37.37/24. Le but est de ne pas utiliser l’IP Forwarding de OVH et donc ne posséder qu’une seule IP et MAC publique chez eux.
Ce serveur dédié est un hyperviseur XEN afin de déployer une infrastructure virtualisée. Je me retrouve donc avec un serveur physique virtualisant plusieurs machines virtuelles hébergeant elles-mêmes des services (par exemple LAMP, messagerie, firewall) dont certains nécessitent d’être accessibles depuis le web.
Les machines virtuelles nécessitant une connexion au réseau se trouvent derrière un Routeur/Firewall PfSense virtualisé.
Niveau réseau, le but est de faire du NAT pour les machines virtuelles. Elles sont donc sur le sous réseau 192.168.1.0/24. L’hyperviseur quand à lui possède la carte réseau physique (celle de OVH) eth0 en DHCP et qui récupère l’IP 37.37.37.37/24 qui m’a été attribuée.
Une machine virtuelle PfSense fait office de routeur/firewall pour les machines virtuelles. Elle est donc la passerelle pour le réseau des VM.
L’adressage est conçu comme ceci :
- l’hyperviseur a la carte physique eth0 avec l’IP publique 37.37.37.37 qui permet d’accéder au net
- l’hyperviseur a un bridge virtuel Dummy0 avec l’IP 192.168.0.1/24
- l’hyperviseur a un bridge virtuel Xbr0 avec l’IP 192.168.1.1/24
- la VM Routeur/Firewall PfSense a une carte réseau virtuelle avec l’IP 192.168.0.254/24
- la VM Routeur/Firewall PfSense a une carte réseau virtuelle avec l’IP 192.168.1.254/24
- Toutes les autres VM ont une carte réseau virtuelle avec une IP sur le réseau 192.168.1.0/24
Les bridges sont utilisés pour créer des sous-réseaux inteligibles par XEN. Pour info pour ceux qui ne connaissent pas, dans le fichier de configuration des machines virtuelles sur l’hyperviseur, il faut déclarer les interfaces réseau ainsi que le bridge qu’elles vont utiliser et qui doit-être existant sur l’hyperviseur.
Voici pour exemple la partie sur les interfaces réseau dans le fichier de configuration de la machine virtuelle Routeur/Firewall PfSense:
vif = [ ‘bridge=xbr0, mac=00:16:3e:00:01:01’, ‘bridge=dummy0, mac=00:16:3e:00:00:01’]
Explication de la ligne:
‘bridge=xbr0, mac=00:16:3e:00:01:01’ --> Utilisation du Bridge Xbr0 créé sur l’hyperviseur se trouvant sur le réseau 192.168.1.0. La carte réseau 1 dans la machine virtuelle aura comme MAC 00:16:3e:00:01:01. L’IP sera définie dans le système virtualisé.
‘bridge=dummy0, mac=00:16:3e:00:00:01’ --> Utilisation du Bridge Dummy0 créé sur l’hyperviseur se trouvant sur le réseau 192.168.0.0. La carte réseau 2 dans la machine virtuelle aura comme MAC 00:16:3e:00:00:01. L’IP sera définie dans le système virtualisé.
Pour que cela fonctionne, il m’a fallu sur l’hyperviseur transférer tout le traffic arrivant sur 37.37.37.37 vers 192.168.0.1, pour que le routeur/firewall PfSense récupère les paquets sur son interface 192.168.0.254 et les route sur le réseau 192.168.1.0 (réseau des autres machines virtuelles) via son interface 192.168.1.254.
Voici l’iptables de l’hyperviseur:
forward sur Dummy0 (192.168.0.1)
iptables -A FORWARD --in-interface dummy0 -j ACCEPT
on NAT tout ce qui sort sur eth0 (IP publique OVH)
iptables --table nat -A POSTROUTING --out-interface eth0 -j MASQUERADE
On laisse passer un accès SSH depuis l’extérieur sur l’hyperviseur avec le port 7575
iptables -t nat -A PREROUTING -p tcp --dport 7575 -i eth0 -j DNAT --to 192.168.0.1:7575
Full NAT entre l’interface publique et l’interface “coté WAN” du routeur/firewall PfSense
iptables -t nat -A PREROUTING -d 37.37.37.37 -j DNAT --to 192.168.0.254
iptables -t nat -A POSTROUTING -s 192.168.0.254 -j SNAT --to 37.37.37.37
routes de l’hyperviseur:
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use Iface
default sbg-gw-6k.fr.eu 0.0.0.0 UG 0 0 0 eth0
37.37.37.37 * 255.255.255.0 U 0 0 0 eth0
192.168.0.0 * 255.255.255.0 U 0 0 0 dummy0
192.168.1.0 * 255.255.255.0 U 0 0 0 xbr0
Maintenant que vous avez eu la patience et le courage de lire jusqu’ici, je vous expose mes questions :
-
J’ai laissé un accès SSH ouvert sur l’hyperviseur pour qu’en cas de problème sur ma machine virtuelle PfSense je puisse toujours accéder à l’hyperviseur et débugger plutôt qu’être obligé de redémarrer mon serveur via l’interface OVH en mode Rescue et CHROOT dans mon système pour commenter le lancement du script iptables et pouvoir rétablir l’accès.
Est-ce cohérent? C’est risqué vu qu’un accès en root sur mon hyperviseur donne évidemment les pleins droits sur les machines virtuelles. Cependant, l’accès en root au login est interdit dans la configuration de ssh. Qu’en pensez-vous? -
Forcément, quand mon hyperviseur a besoin d’accéder au net (mises à jour par exemple), il le fait par sa carte physique eth0 37.37.37.37 sans passer par la machine virtuelle PfSense, ceci étant dû à la route par défaut.
Est-ce risqué? Y a-t’il un moyen pour le faire passer par PfSense? J’ai simplement essayé d’ajouter la route par défaut “route add default dev xbr0” pour envoyer vers 192.168.0.0 et se faire router par PfSense mais ça m’a planté l’accès, j’ai du CHROOTer mon système pour récupérer l’accès SSH. Je pense que c’est parce que les paquets tournaient en rond mais je n’arrive plus à prendre du recul sur ce souci.
Je réfléchis trop avant de taper une commande parce que c’est assez pénible de se scier l’accès au réseau sur ce genre d’infra…