Cloud serveur Proxmox 6.x sur un serveur Kimsufi |
Article original Publié le : 14 février 2020 Mise a jour le : – |
I. Solution
Pour les besoins d’un petit labs de quelques mois, c’est une solution correcte pour une vingtaine d’euros.
Voici l’instance utilisée
- KS-11 Intel Xeon W3520 4c/8t 2,66GHz
- 16Go DDR3 ECC 1333 MHz
- SoftRaid 2x2To
- 100 Mbps
- 19,99 € HT (soit 23,99 € TTC)
Toutes les offres ici
Je dispose de quelques serveurs physiques récupérés gracieusement Dell et HP mais le cout élevé en électricité ça douille de ouf, le bruit même si isolé, les coupures de courant car non ondulé et connexion vdsl en carton … m’ont orienté vers cette solution,
C’est aussi l’occasion de tester cet environnement en cloud et d’essayer de le sécurisé au maximum.
II. Installation
Les templates sont nombreux, j’ai choisi par rapidité Proxmox v6.
L’installation est assez succincte, assez transparente même, à part le partitionnement tout est automatisé, on se retrouve après 20 min avec un Proxmox fraichement installé clé en main.
![]() |
|
|
|
|
/!\ Le mot de passe root pour la connexion ssh/web est envoyé par mail a l’issu de l’installation.
III. Préparation de l’environnement
Les premières actions seront bien sûr de désactivés le compte root, faire du filtrage ip, changer le port ssh, générer un certificat Let’s Encrypt, mais commençons par le commencement ..
/!\ Créer un record dns chez le registrar
- Maintenir son système a jour
1 |
# apt update && apt upgrade |
- Installation de paquet utile (pour l’utilisation de vim sous Debian voir cet article)
1 |
# apt install vim pwgen |
- Généré un mot de passe solide avec pwgen
1 |
# pwgen 17 1 |
- Changé le mot de passe root
1 |
# passwd |
- Créer un compte utilisateur et l’ajouter au groupe sudoers (visudo)
1 |
# adduser utilisateur |
1 |
# passwd utilisateur |
1 |
# echo 'utilisareur ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers |
- Pour SSH, changer le port d’écoute, désactiver le compte root et ajouter le ou les utilisateurs autorisés à se connecter
1 |
# vi /etc/ssh/sshd_config |
- Recharger ssh
1 |
# systemctl reload sshd.service |
Fermé la session et se reconnecter avec le compte utilisateur précédemment
/!\ Si l’erreur Could not chdir to home directory /home/utilisateur: No such file or directory apparait avec le compte utilisateur, il faut créer manuellement son home NOTA: Cette erreur se produit quand on cree un compte utilisateur avec useradd, utiliser plutot adduser
Déconnecter/reconnecter et on retrouve un shell en /bin/bash avec son home |
IV. Iptables
Il faut maintenant sécurisé iptables car par défaut il accepte tout.
Ce serveur n’a pas vocation à être ouvert a tout le monde, du coup je restreins le port ssh et le port d’administration de Proxmox a mes seules IP’s publiques.
/!\ L’importance de verrouiller au mieux ces points d’entrée Dès que le serveur est en ligne, les bots bombardent à la recherche d’accès …
|
État par défaut
1 |
$ sudo iptables -L |
1 2 3 4 5 6 7 8 |
Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination |
Avant de tout droper, il faut créer les règles pour s’assurer de garder la main dessus puis il faudra les sauvegarder.
Autoriser le loopback
1 |
$ sudo iptables -A INPUT -i lo -j ACCEPT |
1 |
$ sudo iptables -A OUTPUT -o lo -j ACCEPT |
Autoriser SSH pour son ou ses IP’s publiques
1 |
$ sudo iptables -A INPUT -p tcp -s ip_publique/32 --dport 2222 -j ACCEPT |
1 |
$ sudo iptables -A OUTPUT -p tcp -s ip_publique/32 --dport 2222 -j ACCEPT |
Autoriser le port de l’interface Proxmox pour son ou ses IP’s publiques
1 |
$ sudo iptables -A INPUT -p tcp -s ip_publique/32 --dport 8006 -j ACCEPT |
Autoriser les ports dns en udp/tcp et http/https en tcp pour que la machine puisse sortir et faire des updates/installes
1 |
$ sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT |
1 |
$ sudo iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT |
1 |
$ sudo iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT |
1 |
$ sudo iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT |
Conserver un état connecté
1 |
$ sudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT |
1 |
$ sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT |
1 |
$ sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT |
Autoriser l’icmp,
/!\ J’ai eu droit a un reboot en mode rescue (Le serveur est démarré (demande du ‘login’ à l’écran) mais inaccessible par le réseau (pas de ‘ping’).)
1 |
$ sudo iptables -A INPUT -p icmp -j ACCEPT |
Autant autoriser le ping en sortant pour les machines !
1 |
$ sudo iptables -A OUTPUT -p icmp -j ACCEPT |
Autoriser le ntp
1 |
$ sudo iptables -A OUTPUT -p udp --dport 123 -j ACCEPT |
Autoriser le DHCP d’Ovh (stack erreur persistante dans les logs)
dhclient[754]: DHCPREQUEST for xx.xx.xx.xx on vmbr0 to 91.121.126.xx port 67
dhclient[754]: send_packet: Operation not permitted
dhclient[754]: dhclient.c:2755: Failed to send 300 byte long packet over fallback interface.
1 |
$ sudo iptables -I INPUT -p udp --dport 67:68 --sport 67:68 -j ACCEPT |
1 |
$ sudo iptables -I OUTPUT -p udp --dport 67:68 --sport 67:68 -j ACCEPT |
Enfin bloquer tout le trafic et sauvegarder l’état de la configuration
1 |
$ sudo iptables -P INPUT DROP |
1 |
$ sudo iptables -P OUTPUT DROP |
Les règles minimales sont en places, si les règles de drop sont passés alors on peut sauvegarder la conf.
/!\ Sur Debian les règles ne sont pas persistantes au redémarrage
Possible de faire un script au démarrage pre-up qui s’exécute après que la configuration réseau soit chargée ou
Installer le paquet iptables-persistent et son service netfilter-persistent qui va permettre de pérenniser tout ça.
1 |
$ sudo apt install iptables-persistent |
Puis sauvegarder les règles
1 |
$ sudo iptables-save | tee /etc/iptables/rules.v4 |
Et recharger la conf.
1 |
$ sudo systemctl restart netfilter-persistent.service |
/!\ Les règles d’accès ci-dessus sont un minimum, il y aura d’autres règles à ouvrir plus loin dans la doc
V. Let’s Encrypt
On peut enfin se connecter a l’interface graphique
Pour la mise en place du certificat Let’s Encrypt, c’est devenu beaucoup plus simple que dans mon souvenir en v4
- Aller sur le node -> system -> certificates
- Cliquer sur Add et ajouter son domaine
- Puis Add ACME Account, renseigner son mail et accepter le TOS
- Puis lancer la création du certificat
/!\ Lets’Encrypt nécessite l’ouverture des ports 80 et 443 en entrée
1 |
$ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT |
1 |
$ sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT |
1 |
$ sudo iptables-save | tee /etc/iptables/rules.v4 |
1 |
$ sudo systemctl restart netfilter-persistent.service |
Le service pveproxy.service redémarre automatiquement et la page est bien sécurisé
VI. Création d’un nouveau bridge et NAT
Pour pouvoir créer x machines et contourner la restriction d’une seule IP publique, il faut créer un nouveau subnet pour ensuite naté les IP’s/ports
Actuellement il y a un bridge vmbr0 qui porte le port réseau enp1s0 auquel est rattaché l’IP publique
Crée un nouveau bridge sur le serveur qu’il s’appellera vmbr1 et qui portera l’adresse IP 192.168.50.1/24
- Aller sur le node -> system -> network
- Cliquer sur Create et Linux Bridge
/!\ Un redémarrage du serveur est nécessaire pour appliquer la nouvelle configuration réseau
1 |
$ sudo reboot |
Il faut maintenant faire le routage, on peut imaginer divers scenarios,
Dans mon cas j’ai essentiellement besoin d’accès ssh sur les différentes vms
- Activer l’IP Forwarding pour router les paquets entre interface
1 |
$ sudo bash -c "echo 1 > /proc/sys/net/ipv4/ip_forward" |
- Pour translater et renvoyer tout le trafic du subnet 192.168.50.0/24 vers l’interface vmbr0
1 |
$ sudo iptables -t nat -A POSTROUTING -s '192.168.50.0/24' -o vmbr0 -j MASQUERADE |
- Il reste à définir sur chaque machine une adresse et port et faire une règle de nat prerouting
le port sur la machine distante sera 22 et sera naté en sortie sur 2223
1 |
$ iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 2223 -j DNAT --to 192.168.50.10:2223 |
Sauvegarder la conf et redémarrer le service
1 |
$ sudo iptables-save > /etc/iptables/rules.v4 |
1 |
$ sudo systemctl restart netfilter-persistent.service |
Lancer une connexion ssh sur la machine distante en utilisant le port défini
1 |
$ ssh -p2223 utilisateur@srv-proxmox.izero.fr |
1 |
utilisateur@srv-proxmox.izero.fr's password: |
/!\ Cette machine est exposée sur le net, il convient donc de désactiver le compte root et de configuré iptables comme vu plus haut.
VII. Next step ?
Pour bien faire il faudrait créer un nouvel admin et verrouiller le compte root de l’interface graphique, mais quand j’ai exécuté le script de Let’s Encrypt il y a eu des erreurs car il faisait appel a root. À voir …
Mettre en place un Fail2ban mais en verrouillant l’accès a mes IP’s publiques je pense que cela ne soit pas nécessaire.
si je me trompe je serais ravie d’avoir un retour
D’autres articles en lien avec celui-ci seront créés prochainement.
VIII. Tips
Supprimer la popup de subscription
1 |
# sed -i.bak 's/NotFound/Active/g' /usr/share/perl5/PVE/API2/Subscription.pm && systemctl restart pveproxy.service |
IX. Quelques docs
–https://mind-and-go.com/blog/why-not-1/post/cloud-proxmox-derriere-une-seule-ip-24
–https://vdillenschneider.fr/architecture-de-services-avec-proxmox-sur-un-serveur-kimsufi
–http://communaute-omr.fr/?p=195
Hello, j’avais pensé aussi à héberger chez moi mais trop de contraintes aussi…Je n’ai pas encore testé un dédié mais je pense m’y mettre…
Pour le moment, je suis encore sur un VPS pour faire mes petites bidouilles…
Sympa tes articles en tout cas, on sent la personne passionnée…
Kenavo
Bonjour,
Merci, je travaille avec des personnes passionnées ça aide 🙂
le dédié reste une bonne alternative, pour le prix, la dispo h24 et ne pas gérer la maintenance, c’est confortable pour un p’tit labs avec un annuaire, proxy, fw …
J’adore Proxmox, plus tard j’installerais Openshit ou d’autre solutions quand j’aurais du temps..
Bonjour,
merci pour ce tuto bien complet.
Est ce que vous avez migré en proxmox 7? j’essaye depuis quelques jours sur un kimsufi tout neuf et je perds systématiquement le réseau.. rescue et compagnie à chaque fois.
Sinon je fais faire le votre.
merci encore.
Hello Xavier
Perso je suis resté sur du 6 et je rends mon serveur dans 2j, j’ai fini mon poc
Bonjour, il y a un truc que je ne comprends pas. Lors de l’installation du certificat. Pendant le challenge ACME.
Celui-ci test le port 80 or proxmox n’écoute pas sur le port 80. Comme cela peut il marcher ?
Merci
Bonjour,
je n’ai plus de proxmox mais si tu fais un netstat tu devrais voir le port 80 et 443 par souvenir, le 80 est redirigé
Bonjour
Merci pour ce tuto.
J’ai un serveur chez Kimsufi depuis plusieurs années avec un ESXi + PFSense et plusieurs VM pour divers usages.
Je m’étais basé sur ce tuto pour mettre tout ça en place : https://docplayer.fr/60119978-How-to-esxi-sur-kimsufi-avec-une-seule-ipv4-et-une-ipv6.html
J’envisage de migrer vers un nouveau serveur sous Proxmox (toujours chez Kimsufi) pour refaire la même chose en plus récent.
Dans mes recherches je tombe sur ce tuto.
Est-ce que cette solution pourrait fonctionner avec PFSense ?
Bonjour,
Il y a un second article où j’ai utilisé pfsense
https://it.izero.fr/proxmox-cloud-serveur-proxmox-6-x-sur-un-serveur-kimsufi-avec-pfsense-et-openvpn/