Guide de Configuration Sécurisée - VPS Infomaniak Ubuntu 24.04
⚠️ Informations importantes sur VPS Infomaniak
Ce guide est spécifiquement adapté pour les VPS Lite Infomaniak avec Ubuntu 24.04 :
- Utilisateur par défaut :
ubuntu(et nonroot) - Authentification : Clé SSH configurée lors de la commande du VPS
- IP du serveur : Visible dans le Manager Infomaniak
- Accès root : Via
sudo -iaprès connexion avec l'utilisateurubuntu
📖 Documentation officielle Infomaniak : https://www.infomaniak.com/fr/support/faq/1973
Objectifs de ce guide
Nous allons configurer votre VPS pour : 1. ✅ Créer un utilisateur non-root dédié 2. ✅ Réutiliser la même clé SSH que celle d'ubuntu 3. ✅ Sécuriser l'accès SSH 4. ✅ Installer NFS et OpenVPN pour connecter votre NAS Synology 5. ✅ Configurer Docker avec gestion optimale des permissions 6. ✅ Automatiser les montages NFS via VPN
Table des matières
- Connexion initiale et création d'utilisateur
- Configuration SSH sécurisée
- Mise à jour du système
- Installation NFS Client
- Installation et configuration OpenVPN
- Configuration du montage NFS automatique
- Installation Docker avec utilisateur non-root
- Configurations de sécurité supplémentaires
1. Connexion initiale et création d'utilisateur
1.1 Connexion initiale avec l'utilisateur ubuntu
Selon la documentation officielle Infomaniak :
- L'utilisateur par défaut pour Ubuntu 24.04 sur un VPS Infomaniak est ubuntu
- La connexion se fait avec la clé SSH que vous avez configurée lors de la commande du VPS
- Vous pouvez retrouver l'adresse IP de votre serveur sur le Manager Infomaniak
Localiser votre clé SSH :
- Si vous avez généré la clé via Infomaniak, elle a été téléchargée sur votre ordinateur (généralement dans ~/Downloads/)
- Si vous avez utilisé votre propre clé, elle se trouve probablement dans ~/.ssh/ sur votre machine
- Vous pouvez vérifier vos clés avec : ls -la ~/.ssh/
# Connexion SSH avec votre clé privée
# Remplacez [chemin-vers-clé] par le chemin de votre clé privée
# Remplacez [IP-VPS] par l'adresse IP de votre serveur
ssh -i [chemin-vers-clé] ubuntu@[IP-VPS]
# Exemple : ssh -i ~/.ssh/infomaniak_key ubuntu@192.168.1.100
⚠️ Note importante : Si vous obtenez une erreur "WARNING: UNPROTECTED PRIVATE KEY FILE!", exécutez :
chmod 400 [chemin-vers-clé]
Une fois connecté, passez en mode root pour les opérations d'administration :
sudo -i
1.2 Création du nouvel utilisateur
Remplacez nomutilisateur par le nom souhaité :
# En tant que root (via sudo -i)
# Ou directement avec sudo depuis ubuntu
sudo adduser nomutilisateur
1.3 Ajout des droits sudo
# Ajouter l'utilisateur au groupe sudo
sudo usermod -aG sudo nomutilisateur
# Vérifier l'ajout au groupe
groups nomutilisateur
1.4 Réutilisation de la clé SSH existante
Nous allons configurer le nouvel utilisateur pour utiliser la même clé SSH que l'utilisateur ubuntu.
Sur le VPS, en tant qu'ubuntu (ou avec le nouvel utilisateur une fois connecté) :
# Créer le répertoire .ssh pour le nouvel utilisateur
sudo mkdir -p /home/nomutilisateur/.ssh
# Copier la clé SSH autorisée depuis ubuntu
sudo cp /home/ubuntu/.ssh/authorized_keys /home/nomutilisateur/.ssh/
# Définir les bonnes permissions
sudo chmod 700 /home/nomutilisateur/.ssh
sudo chmod 600 /home/nomutilisateur/.ssh/authorized_keys
# Définir le bon propriétaire
sudo chown -R nomutilisateur:nomutilisateur /home/nomutilisateur/.ssh
# Vérifier le contenu
sudo cat /home/nomutilisateur/.ssh/authorized_keys
💡 Explication : Cette étape copie la clé SSH publique déjà présente pour l'utilisateur ubuntu vers votre nouvel utilisateur, vous permettant d'utiliser la même clé privée pour vous connecter avec les deux comptes.
1.5 Test de connexion avec le nouvel utilisateur
Depuis votre machine locale, ouvrir un nouveau terminal (garder l'ancien ouvert par sécurité) :
# Utiliser la même clé SSH que pour ubuntu
ssh -i [chemin-vers-clé] nomutilisateur@[IP-VPS]
# Exemple : ssh -i ~/.ssh/infomaniak_key nomutilisateur@192.168.1.100
✅ Si la connexion fonctionne, vous pouvez passer à l'étape suivante.
💡 Astuce : Pour simplifier les connexions, vous pouvez créer un alias dans ~/.ssh/config sur votre machine locale :
# Sur votre machine locale
nano ~/.ssh/config
Ajouter :
Host vps-infomaniak
HostName [IP-VPS]
User nomutilisateur
IdentityFile [chemin-vers-clé]
IdentitiesOnly yes
Host vps-ubuntu
HostName [IP-VPS]
User ubuntu
IdentityFile [chemin-vers-clé]
IdentitiesOnly yes
Ensuite, vous pourrez vous connecter simplement avec :
ssh vps-infomaniak # Pour le nouvel utilisateur
ssh vps-ubuntu # Pour l'utilisateur ubuntu (backup)
2. Configuration SSH sécurisée
⚠️ IMPORTANT : Ne pas fermer votre session ubuntu avant d'avoir testé la connexion avec le nouvel utilisateur !
# Avec le nouvel utilisateur
sudo nano /etc/ssh/sshd_config
Modifier ou ajouter ces lignes :
# Désactiver la connexion root par SSH
PermitRootLogin no
# Désactiver l'authentification par mot de passe (une fois les clés SSH configurées)
PasswordAuthentication no
# Autoriser votre nouvel utilisateur ET ubuntu (comme backup)
AllowUsers nomutilisateur ubuntu
# Si vous voulez désactiver ubuntu complètement (optionnel, à faire plus tard)
# AllowUsers nomutilisateur
# Changer le port SSH (optionnel mais recommandé)
# Port 2222
# Autres paramètres de sécurité
PubkeyAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding no
PrintMotd no
AcceptEnv LANG LC_*
Recommandations :
- Gardez AllowUsers nomutilisateur ubuntu au début pour avoir un backup
- Une fois tout configuré et testé, vous pourrez retirer ubuntu si vous le souhaitez
- Si vous changez le port SSH (ex: 2222), pensez à ouvrir ce port dans UFW plus tard
Redémarrer SSH :
sudo systemctl restart sshd
Tester la nouvelle configuration avant de fermer la session existante :
# Dans un nouveau terminal sur votre machine locale
ssh -i [chemin-vers-clé] nomutilisateur@[IP-VPS]
3. Mise à jour du système
# Mettre à jour la liste des paquets
sudo apt update
# Mettre à jour tous les paquets installés
sudo apt upgrade -y
# Mettre à jour la distribution (si nécessaire)
sudo apt dist-upgrade -y
# Nettoyer les paquets inutilisés
sudo apt autoremove -y
sudo apt autoclean
3.1 Configuration des mises à jour automatiques de sécurité
# Installer unattended-upgrades
sudo apt install unattended-upgrades -y
# Configurer
sudo dpkg-reconfigure -plow unattended-upgrades
4. Installation NFS Client
# Installer le client NFS
sudo apt install nfs-common -y
# Vérifier l'installation
showmount --version
4.1 Créer les points de montage
# Créer les répertoires de montage (exemples)
sudo mkdir -p /mnt/nas/documents
sudo mkdir -p /mnt/nas/media
sudo mkdir -p /mnt/nas/backups
# Définir les permissions appropriées
sudo chown nomutilisateur:nomutilisateur /mnt/nas/*
5. Installation et configuration OpenVPN
5.1 Installation
sudo apt install openvpn -y
5.2 Configuration avec votre NAS Synology
Sur votre NAS Synology :
1. Aller dans Panneau de configuration > VPN Server
2. Activer OpenVPN
3. Télécharger le fichier de configuration (.ovpn)
Sur votre VPS :
# Créer le répertoire de configuration
sudo mkdir -p /etc/openvpn/client
# Transférer le fichier .ovpn depuis votre machine locale
scp /chemin/local/fichier.ovpn nomutilisateur@votre-ip-vps:/home/nomutilisateur/
# Déplacer le fichier vers le répertoire OpenVPN
sudo mv /home/nomutilisateur/fichier.ovpn /etc/openvpn/client/synology.conf
# Si votre fichier contient des références à des certificats séparés
# Assurez-vous qu'ils sont également dans /etc/openvpn/client/
5.3 Configurer les identifiants (si nécessaire)
# Créer le fichier d'authentification
sudo nano /etc/openvpn/client/credentials.txt
Ajouter :
votre-utilisateur-vpn
votre-mot-de-passe-vpn
Sécuriser le fichier :
sudo chmod 600 /etc/openvpn/client/credentials.txt
Modifier le fichier de configuration :
sudo nano /etc/openvpn/client/synology.conf
Ajouter ou modifier la ligne :
auth-user-pass /etc/openvpn/client/credentials.txt
5.4 Tester la connexion VPN
# Test manuel
sudo openvpn --config /etc/openvpn/client/synology.conf
# Si ça fonctionne (Ctrl+C pour arrêter), activer au démarrage
sudo systemctl enable openvpn-client@synology
sudo systemctl start openvpn-client@synology
# Vérifier le statut
sudo systemctl status openvpn-client@synology
5.5 Vérifier la connexion VPN
# Vérifier l'interface VPN
ip addr show
# Vérifier la route
ip route
# Tester le ping vers le NAS (remplacer par l'IP VPN du NAS)
ping 10.8.0.1
6. Configuration du montage NFS automatique
6.1 Tester le montage manuel d'abord
# Vérifier les partages disponibles sur le NAS (IP VPN du NAS)
showmount -e 10.8.0.1
# Test de montage manuel
sudo mount -t nfs 10.8.0.1:/volume1/documents /mnt/nas/documents
# Vérifier
df -h | grep nas
ls -la /mnt/nas/documents
6.2 Configuration dans /etc/fstab
⚠️ Important : Les montages NFS doivent attendre que le VPN soit établi.
# Sauvegarder fstab original
sudo cp /etc/fstab /etc/fstab.backup
# Éditer fstab
sudo nano /etc/fstab
Ajouter à la fin (adapter selon vos partages) :
# Montages NFS depuis Synology via VPN
10.8.0.1:/volume1/documents /mnt/nas/documents nfs defaults,_netdev,x-systemd.automount,x-systemd.requires=openvpn-client@synology.service 0 0
10.8.0.1:/volume1/media /mnt/nas/media nfs defaults,_netdev,x-systemd.automount,x-systemd.requires=openvpn-client@synology.service 0 0
10.8.0.1:/volume1/backups /mnt/nas/backups nfs defaults,_netdev,x-systemd.automount,x-systemd.requires=openvpn-client@synology.service 0 0
Explication des options :
- defaults : Options par défaut
- _netdev : Indique que c'est un périphérique réseau
- x-systemd.automount : Montage automatique à la demande
- x-systemd.requires=openvpn-client@synology.service : Attend que le VPN soit actif
6.3 Tester la configuration fstab
# Démonter les montages manuels
sudo umount /mnt/nas/documents
sudo umount /mnt/nas/media
sudo umount /mnt/nas/backups
# Recharger systemd
sudo systemctl daemon-reload
# Monter tout ce qui est dans fstab
sudo mount -a
# Vérifier
df -h | grep nas
6.4 Créer un script de vérification (optionnel)
sudo nano /usr/local/bin/check-nfs-mounts.sh
Contenu :
#!/bin/bash
# Vérifier si le VPN est actif
if ! systemctl is-active --quiet openvpn-client@synology; then
echo "VPN non actif, démarrage..."
systemctl start openvpn-client@synology
sleep 10
fi
# Monter les partages NFS
mount -a
# Vérifier les montages
df -h | grep nfs
Rendre exécutable :
sudo chmod +x /usr/local/bin/check-nfs-mounts.sh
7. Installation Docker avec utilisateur non-root
7.1 Installation de Docker
# Supprimer les anciennes versions potentielles
sudo apt remove docker docker-engine docker.io containerd runc
# Installer les prérequis
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release -y
# Ajouter la clé GPG officielle de Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Ajouter le dépôt Docker
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Installer Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
7.2 Configuration pour utiliser Docker sans sudo
# Ajouter votre utilisateur au groupe docker
sudo usermod -aG docker nomutilisateur
# Appliquer les changements (déconnexion/reconnexion requise)
# Option 1 : Se déconnecter et se reconnecter
exit
ssh nomutilisateur@votre-ip-vps
# Option 2 : Ou utiliser newgrp
newgrp docker
# Vérifier que Docker fonctionne sans sudo
docker run hello-world
7.3 Configuration des UID/GID pour Docker
Important pour la gestion des permissions :
# Vérifier votre UID et GID
id
# Exemple de sortie : uid=1000(nomutilisateur) gid=1000(nomutilisateur)
Dans vos docker-compose.yml, toujours spécifier l'utilisateur :
version: '3.8'
services:
mon-service:
image: mon-image
user: "1000:1000" # Votre UID:GID
volumes:
- /mnt/nas/documents:/data
environment:
- PUID=1000
- PGID=1000
7.4 Structure recommandée pour vos projets Docker
# Créer une structure organisée
mkdir -p ~/docker
cd ~/docker
# Pour chaque service, créer un dossier
mkdir -p ~/docker/service1/{config,data}
mkdir -p ~/docker/service2/{config,data}
# Exemple de docker-compose.yml
nano ~/docker/service1/docker-compose.yml
Exemple de configuration :
version: '3.8'
services:
mon-app:
image: mon-image:latest
container_name: mon-app
user: "1000:1000"
restart: unless-stopped
volumes:
- ./config:/config
- ./data:/data
- /mnt/nas/media:/media:ro # Lecture seule depuis le NAS
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Zurich
ports:
- "8080:8080"
7.5 Configuration de Docker pour démarrer au boot
sudo systemctl enable docker
sudo systemctl enable containerd
7.6 Script pour gérer les permissions (optionnel mais utile)
nano ~/fix-permissions.sh
Contenu :
#!/bin/bash
# Récupérer UID et GID de l'utilisateur actuel
USER_ID=$(id -u)
GROUP_ID=$(id -g)
echo "Configuration des permissions pour UID:GID = $USER_ID:$GROUP_ID"
# Fixer les permissions dans les dossiers Docker
find ~/docker -type d -exec chmod 755 {} \;
find ~/docker -type f -exec chmod 644 {} \;
# S'assurer que l'utilisateur possède tous les fichiers
sudo chown -R $USER_ID:$GROUP_ID ~/docker
echo "Permissions configurées !"
Rendre exécutable :
chmod +x ~/fix-permissions.sh
8. Configurations de sécurité supplémentaires
8.1 Installation et configuration du pare-feu UFW
# Installer UFW
sudo apt install ufw -y
# Autoriser SSH (IMPORTANT avant d'activer le pare-feu !)
sudo ufw allow 22/tcp # Ou votre port SSH personnalisé
# Autoriser OpenVPN (si nécessaire)
sudo ufw allow 1194/udp
# Autoriser les ports Docker nécessaires
# Exemple : autoriser le port 8080
sudo ufw allow 8080/tcp
# Activer le pare-feu
sudo ufw enable
# Vérifier le statut
sudo ufw status verbose
8.2 Installation de Fail2Ban
# Installer Fail2Ban
sudo apt install fail2ban -y
# Créer une configuration locale
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# Éditer la configuration
sudo nano /etc/fail2ban/jail.local
Configuration recommandée :
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
[sshd]
enabled = true
port = 22
logpath = %(sshd_log)s
backend = %(sshd_backend)s
Activer :
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# Vérifier le statut
sudo fail2ban-client status
sudo fail2ban-client status sshd
8.3 Configuration de logs et monitoring
# Installer logwatch
sudo apt install logwatch -y
# Configurer pour recevoir un rapport quotidien
sudo nano /etc/cron.daily/00logwatch
Ajouter :
#!/bin/bash
/usr/sbin/logwatch --output mail --mailto votre-email@exemple.com --detail high
8.4 Désactiver les services inutiles
# Lister les services actifs
systemctl list-unit-files --state=enabled
# Désactiver les services inutiles (exemples)
sudo systemctl disable bluetooth.service
sudo systemctl disable cups.service
8.5 Configuration de limites système pour Docker
sudo nano /etc/security/limits.conf
Ajouter :
nomutilisateur soft nofile 65536
nomutilisateur hard nofile 65536
9. Checklist finale et tests
9.1 Tests de connexion
- Connexion SSH avec clé fonctionne
- Connexion root SSH est désactivée
- VPN OpenVPN est actif :
sudo systemctl status openvpn-client@synology - Partages NFS sont montés :
df -h | grep nas - Docker fonctionne sans sudo :
docker ps
9.2 Tests de sécurité
- Pare-feu UFW est actif :
sudo ufw status - Fail2Ban est actif :
sudo systemctl status fail2ban - Mises à jour automatiques configurées
9.3 Tests Docker
# Créer un conteneur de test
docker run -d --name test-nginx -p 8080:80 nginx
# Vérifier qu'il tourne
docker ps
# Tester l'accès
curl localhost:8080
# Nettoyer
docker stop test-nginx
docker rm test-nginx
9.4 Tests NFS et permissions
# Créer un fichier de test
touch /mnt/nas/documents/test-vps.txt
# Vérifier les permissions
ls -la /mnt/nas/documents/test-vps.txt
# Nettoyer
rm /mnt/nas/documents/test-vps.txt
10. Commandes de maintenance courantes
Mise à jour du système
sudo apt update && sudo apt upgrade -y
sudo apt autoremove -y
Vérification de l'état du système
# État général
systemctl status
# Espace disque
df -h
# Mémoire
free -h
# Processus
htop # ou top
# Logs système
sudo journalctl -xe
Gestion Docker
# Voir les conteneurs actifs
docker ps
# Voir tous les conteneurs
docker ps -a
# Voir les images
docker images
# Nettoyer Docker
docker system prune -a
# Logs d'un conteneur
docker logs nom-conteneur
# Redémarrer un conteneur
docker restart nom-conteneur
Vérification VPN
# Statut OpenVPN
sudo systemctl status openvpn-client@synology
# Redémarrer le VPN
sudo systemctl restart openvpn-client@synology
# Logs VPN
sudo journalctl -u openvpn-client@synology -f
Vérification NFS
# Remonter tous les partages
sudo mount -a
# Démonter un partage
sudo umount /mnt/nas/documents
# Vérifier les montages actifs
mount | grep nfs
11. Résolution de problèmes courants
Problème : Impossible de se connecter en SSH
# Vérifier que SSH écoute
sudo netstat -tlnp | grep ssh
# Vérifier les logs
sudo tail -f /var/log/auth.log
Problème : VPN ne se connecte pas
# Vérifier les logs
sudo journalctl -u openvpn-client@synology -n 50
# Test manuel
sudo openvpn --config /etc/openvpn/client/synology.conf
Problème : NFS ne monte pas
# Vérifier que le VPN est actif
ping 10.8.0.1
# Vérifier les partages disponibles
showmount -e 10.8.0.1
# Tester un montage manuel
sudo mount -t nfs -v 10.8.0.1:/volume1/documents /mnt/nas/documents
Problème : Docker - Permission denied
# Vérifier que vous êtes dans le groupe docker
groups
# Si non, ajouter et redémarrer la session
sudo usermod -aG docker $USER
exit
Problème : Conteneur Docker ne peut pas écrire
# Vérifier les permissions du volume
ls -la /path/to/volume
# Corriger si nécessaire
sudo chown -R $(id -u):$(id -g) /path/to/volume
12. Sauvegarde et documentation
Sauvegarder les configurations importantes
# Créer un dossier de backup
mkdir -p ~/backups/configs
# Sauvegarder les fichiers de configuration
sudo cp /etc/ssh/sshd_config ~/backups/configs/
sudo cp /etc/fstab ~/backups/configs/
sudo cp /etc/openvpn/client/synology.conf ~/backups/configs/
sudo cp -r ~/docker ~/backups/
# Créer une archive
tar -czf ~/backups/vps-config-$(date +%Y%m%d).tar.gz ~/backups/configs/
Documenter vos services Docker
Créer un fichier README.md dans chaque dossier de service :
nano ~/docker/mon-service/README.md
Exemple de contenu :
# Mon Service
## Description
Description du service
## Configuration
- Port : 8080
- Volumes : ...
- Variables d'environnement : ...
## Commandes utiles
- Démarrer : `docker-compose up -d`
- Arrêter : `docker-compose down`
- Logs : `docker-compose logs -f`
- Redémarrer : `docker-compose restart`
## Notes
Notes spécifiques au service
13. Améliorations futures
Suggestions d'améliorations :
- Reverse Proxy : Installer Nginx Proxy Manager ou Traefik pour gérer plusieurs services
- SSL/TLS : Configurer Let's Encrypt pour HTTPS
- Monitoring : Installer Prometheus + Grafana pour surveiller le système
- Backups automatiques : Configurer des sauvegardes régulières
- Authentification 2FA : Ajouter l'authentification à deux facteurs pour SSH
- VPN personnel : Installer WireGuard pour accéder à votre VPS de manière sécurisée
Ressources supplémentaires
- Documentation Ubuntu : https://help.ubuntu.com/
- Documentation Docker : https://docs.docker.com/
- Documentation OpenVPN : https://openvpn.net/community-resources/
- Documentation Synology VPN : https://kb.synology.com/
- Sécurité Linux : https://linux-audit.com/
Auteur : Guide créé pour la configuration d'un VPS Infomaniak
Date : Décembre 2025
Version Ubuntu : 24.04 LTS