OVH – PROXMOX – Réseau privé

Buts

  • Configurer des VM en réseau privé sous Proxmox chez OVH
  • Que les VM du réseau privé aient accès à internet
  • Que les VM du réseau privé soient cachées d’internet sauf pour des ports et protocoles bien définis
  • Que la connexion SSH depuis internet vers les VM du réseau privé soit directe sans rebond ou tunnel
  • Que le serveur dédié OVH/Proxmox n’ai pas à être configuré spécifiquement (réseau, iptables)
  • Les IP des VM du réseau privé sont de type 192.168.xxx.xxx

Contraintes

  • Configurer en frontal des VM du réseau privé une VM Gateway et reverse proxy (http/https) avec une IP Public fixe (1 euro à vie par IP chez OVH à ce jour)

Etape 1 : Sous PROXMOX

Créer 2 VM Debian Jessie : une pour le serveur frontal et un en réseau privé.

On n’explique pas ici l’installation d’une VM Debian sous PROXMOX.

Pré-requis sur la VM frontale :

  • openssh-server
  • iptables
  • NGINX (reverse-proxy)
  • accès root

Pré-requis sur les VM du réseau privé :

  • openssh-server
  • iptables
  • accès root

Caractéristique VM frontale :

Il s’agit d’une petite configuration qui n’héberge qu’un reverse Proxy (NGINX ou Apache)

  • 1 interface réseau en mode bridge – Une MAC adresse correspondant à l’IP fixe fournie par OVH

proxmox

  • 1Go de ram
  • 2 vcpu
  • 16Go de disque

Caractéristique des autres VM :

Est fonction des besoins applicatifs.

  • 1 interface réseau en mode bridge

Etape 2 : Dans la VM Frontale

Configuration de l’interface eth0 qui donne accès à Internet avec l’IP fixe de OVH :

Faire comme indiqué dans les documentations OVH : http://guide.ovh.com/BridgeClient

Dans « /etc/networks/interface » :

auto eth0 iface
 eth0 inet static
 address xxx.xxx.xxx.xxx
 netmask 255.255.255.255
 brodcast xxx.xxx.xxx.xxx
 post-up route add yyy.yyy.yyy.254 dev eth0
 post-up route add default gw yyy.yyy.yyy.254
 pre-down route del yyy.yyy.yyy.254 dev eth0
 pre-down route del default gw yyy.yyy.yyy.254

où:
xxx.xxx.xxx.xxx est l’IP fixe fournie par OVH pour cette VM
yyy.yyy.yyy.yyy est l’IP fixe de votre serveur dédié OVH/Proxmox

Dans « /etc/resolv.conf » :

nameserver 213.186.33.99

Configuration d’un interface virtuelle eth0:0 qui donne accès aux autres VM du réseau privée :

Dans « /etc/networks/interface » :

auto eth0:0
 iface eth0:0 inet static
 address 192.168.0.10
 netmask 255.255.255.0
 network 192.168.0.0
 broadcast 192.168.0.255

Créer des règles Iptables et les rendre persistentes :

root@debian:~#iptables -t nat -A POSTROUTING -s 192.168.0.0/8 -o eth0 -j MASQUERADE
root@debian:~#iptables -A FORWARD -i eth0:0 -o eth0 -j ACCEPT

Installer le package « iptables-persistent »

root@debian:~#apt-get install iptables-persistent

Durant l’installation du package, il est proposé de sauver les règles afin qu’elles soient restaurées à chaque redémarrage du serveur.
Lors des futurs modifications des règles, exécuter les commandes suivantes afin de les rendre persistentes :

root@debian:~#iptables-save > /etc/iptables/rules.v4
root@debian:~#ip6tables-save > /etc/iptables/rules.v6

Activer le forwarding et rendre ce changement permanent :

root@debian:~#echo 1 > /proc/sys/net/ipv4/ip_forward

Editer « /etc/sysctl.conf » et décommenter la ligne :

net.ipv4.ip_forward = 1

Executer la commande :

root@debian:~#sysctl -p /etc/sysctl.con

Redémarrer le service networking :

root@debian:~#/etc/init.d/networking restart

Etape 3 : Dans les VM du réseau privé

Configuration de l’interface eth0 qui donne accès aux autres VM du réseau privé et à Internet via la gateway de la VM Frontale :

Dans « /etc/networks/interface » :

auto eth0
 iface eth0 inet static
 address 192.168.0.100
 netmask 255.255.255.0
 gateway 192.168.0.10

Dans « /etc/resolv.conf » :

nameserver 213.186.33.99

Redémarrer le service networking :

root@debian:~#/etc/init.d/networking restart

Permettre l’accès ssh directement à la cette VM du réseau privé en ssh via l’adresse IP de la VM frontale qui est la seule accessible d’internet :

Les 2 VM écoutent sur le port 22 pour SSH.

On accède à la VM d’un réseau privée en passant par un port différent de la VM frontale qui sera « forwardé » sur le port 22

ssh xxx.xxx.xxx.xxx -> accès SSH à la VM frontal

ssh xxx.xxx.xxx.xxx -p 22yyy -> accès SSH à la VM du réseau privé où 22yyy est un port différent pour chaque VM du réseau privé.

La règle iptables à exécuter sur la VM frontale est :

root@debian:~#iptables -t nat -A PREROUTING -p tcp -d xxx.xxx.xxx.xxx --dport 22100 -j DNAT --to-destination 192.168.0.100:22
root@debian:~#iptables-save > /etc/iptables/rules.v4

Mettre en place un reverse-proxy NGINX sur la VM frontale

Je ne documente pas cette partie, je vous redirige juste vers un des nombreux articles qui décrit cette configuration : http://homeserver-diy.net/wiki/index.php?title=Installation_et_configuration_d%E2%80%99un_reverse_proxy_avec_NginX

Un peu de sécurité

Vraiment un tout petit peu !

Vos serveurs (Proxmox, frontal et dans le réseau privé) sont vulnérables sur le port 22. Je conseille à minima :

  • d’y installer fail2ban bloquer les attaques en force brute
  • de n’autoriser en ssh que les connexions avec clée privée / public.

Je ne documente pas cette partie, je vous laisse trouver des tutos pour cela.

Commandes utiles

iptables

Ajouter une règle NAT de port forwarding

root@debian:~#iptables -t nat -A PREROUTING -p tcp -d xxx.xxx.xxx.xxx --dport 22xx -j DNAT --to-destination yyy.yyy.yyy.yyy:22
root@debian:~#iptables-save > /etc/iptables/rules.v4

Lister les règles NAT avec numéro de ligne

root@debian:~#iptables -L -v -n -t nat --line-numbers

Supprimer une règle NAT par son numéro de ligne

root@debian:~#iptables -t nat -D PREROUTING x
root@debian:~#iptables-save > /etc/iptables/rules.v4

SSH

Monter un tunnel ssh avec mapping de port

Le but est par exemple d’accéder à une console d’administration web hébergée sur le serveur distant depuis son poste en local (phMyAdmin ou console Solr par exemple) :

~# ssh -L port-local:localhost:port-distant user@servername

par exemple :

~# ssh -L 8080:localhost:80 user@servername

permet dans un navigateur en local d’accéder au serveur web distant sur le port 80 avec une url http://localhost:8080/

Références