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
- 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
- Configuration d’un accès réseau de type bridge chez OVH : http://guide.ovh.com/BridgeClient
- Running Proxmox behind a single IP address : https://www.ameir.net/blog/archives/55-running-proxmox-behind-a-single-ip-address.html/comment-page-1
- Setting up a simple Debian gateway : https://www.debian-administration.org/article/23/Setting_up_a_simple_Debian_gateway
- How To List and Delete Iptables Firewall Rules : https://www.digitalocean.com/community/tutorials/how-to-list-and-delete-iptables-firewall-rules
- Rendre les règles iptables permanentes sur la VM frontale : http://romain.therrat.fr/iptables-rendre-ses-regles-persistantes-sous-gnudebian-avec-iptable-persistent/
- Rendre le ip forwarding permanent sur la VM frontales : http://askubuntu.com/questions/311053/how-to-make-ip-forwarding-permanent
- Mettre en place sur la VM frontale les règles de forwarding pour l’acces ssh direct vers les VM du réseau privé : http://serverfault.com/questions/564445/how-can-i-forward-the-http-and-ssh-port-to-my-internal-server-using-iptables