--- title: Bien démarrer un serveur description: Sécuriser les accès et poser une base saine avant le premier déploiement. --- Un serveur de production doit être préparé **avant** d'héberger l'application. L'objectif du premier jour est simple : réduire la surface d'attaque, conserver un accès de secours et automatiser les mises à jour de sécurité. Garde ta première session SSH ouverte pendant les changements. Valide la configuration, puis ouvre une deuxième session avec la clé avant de désactiver les mots de passe. ## 1. Mettre le système à jour ```bash sudo apt update sudo apt full-upgrade -y sudo reboot ``` Après le redémarrage, reconnecte-toi et vérifie que les services essentiels sont revenus. ## 2. Créer un compte d'administration Le compte `root` ne doit pas être utilisé pour les connexions quotidiennes : ```bash sudo adduser deploy sudo usermod -aG sudo deploy ``` Ce compte servira à administrer et déployer l'application. Pour une équipe, préfère un compte nominatif par personne et un compte technique distinct pour l'automatisation. ## 3. Utiliser une clé SSH Génère la clé sur ta machine, jamais sur le serveur : ```bash ssh-keygen -t ed25519 -a 100 -f ~/.ssh/serveur_production ssh-copy-id -i ~/.ssh/serveur_production.pub deploy@ADRESSE_IP ``` Teste ensuite la connexion dans un nouveau terminal : ```bash ssh -i ~/.ssh/serveur_production deploy@ADRESSE_IP ``` Quand cet accès fonctionne, ajoute un fichier `/etc/ssh/sshd_config.d/99-hardening.conf` : ```text PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes ``` Valide **avant** de recharger SSH : ```bash sudo sshd -t sudo systemctl reload ssh ``` ## 4. Fermer les ports inutiles Pour un serveur web classique, seuls SSH, HTTP et HTTPS sont nécessaires : ```bash sudo ufw allow OpenSSH sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable sudo ufw status verbose ``` Applique les mêmes restrictions dans le pare-feu du fournisseur cloud. Un port publié par Docker peut contourner les règles UFW. Ne publie vers l'hôte que les ports du reverse proxy, vérifie aussi le pare-feu du fournisseur et utilise la chaîne Docker DOCKER-USER si tu dois filtrer le trafic des conteneurs. ## 5. Automatiser les correctifs de sécurité ```bash sudo apt install unattended-upgrades sudo dpkg-reconfigure -plow unattended-upgrades ``` `fail2ban` peut compléter cette base si le service SSH est exposé à Internet : ```bash sudo apt install fail2ban sudo systemctl enable --now fail2ban ``` ## Checklist du premier jour - [ ] système entièrement mis à jour et redémarré ; - [ ] connexion avec un compte non-root ; - [ ] clé Ed25519 testée dans une seconde session ; - [ ] connexion root et mot de passe SSH désactivés ; - [ ] configuration validée avec `sshd -t` ; - [ ] seuls les ports 22, 80 et 443 sont ouverts ; - [ ] mises à jour de sécurité automatiques activées ; - [ ] accès de secours du fournisseur testé ou documenté. ## Documentation officielle - [OpenSSH sur Ubuntu](https://documentation.ubuntu.com/server/how-to/security/openssh-server/) - [Pare-feu Ubuntu](https://documentation.ubuntu.com/server/how-to/security/firewalls/) - [Mises à jour automatiques](https://documentation.ubuntu.com/server/how-to/software/automatic-updates/)