1 line
9.0 KiB
JSON
1 line
9.0 KiB
JSON
{"uuid":"0bba1ad7-e4cb-49a6-9467-fcfac2e09a93","slug":"deuxiemes-pas-devops-durcir-et-fiabiliser-un-serveur-debian","title":"Deuxièmes pas DevOps : durcir et fiabiliser un serveur Debian","author":"cedric@abonnel.fr","published":true,"published_at":"2026-06-08 07:00","created_at":"2026-05-12 23:01:34","updated_at":"2026-05-12 23:29:17","revisions":[],"cover":"cover.jpg","files_meta":{"cover.jpg":{"author":"","source_url":""}},"external_links":[{"url":"https://varlog.a5l.fr/post/post-install","name":"Premiers pas DevOps : préparer un système Debian fraîchement installé","added_at":"2026-05-12 23:18:02","author":"Cédrix","meta":{"mime":"text/html","description":"Lorsqu'on vient de provisionner une machine Debian — que ce soit un conteneur LXC, une VM ou un serveur dédié — quelques étapes initiales sont incontourna…"}}],"seo_title":"","seo_description":"","og_image":"https://varlog.a5l.fr/file?uuid=0bba1ad7-e4cb-49a6-9467-fcfac2e09a93&name=cover.jpg","category":"informatique","content":"# Deuxièmes pas DevOps : durcir et fiabiliser un serveur Debian\n\nUne fois le système de base configuré (dépôts, mises à jour, `sudo`, identification — sujets traités dans l'article précédent), la machine est fonctionnelle mais encore vulnérable et un peu fragile pour un usage sérieux. Ce deuxième article s'attaque aux gestes qui transforment un serveur « qui marche » en un serveur sur lequel on peut raisonnablement faire tourner quelque chose : sécuriser l'accès SSH, mettre en place un pare-feu, automatiser les correctifs de sécurité et soigner quelques détails opérationnels.\n\n## Sécuriser l'accès SSH\n\nSSH est la porte d'entrée principale d'un serveur Linux. C'est aussi, statistiquement, la cible la plus attaquée : n'importe quelle IP publique reçoit en permanence des tentatives de connexion automatisées. Deux gestes simples changent radicalement la donne.\n\n### Passer à l'authentification par clé\n\nLes mots de passe, même longs, restent vulnérables aux attaques par force brute et au phishing. Une paire de clés cryptographiques est à la fois plus sûre et plus pratique au quotidien.\n\nCôté poste de travail, on génère une paire de clés modernes :\n\n```bash\nssh-keygen -t ed25519 -C \"cedrix@laptop\"\n```\n\nL'algorithme `ed25519` est aujourd'hui le choix par défaut recommandé : clés courtes, signatures rapides, sécurité solide. Le commentaire (`-C`) facilite l'identification de la clé quand on en gère plusieurs.\n\nOn copie ensuite la clé publique sur le serveur :\n\n```bash\nssh-copy-id utilisateur@serveur\n```\n\nCette commande dépose la clé publique dans `~/.ssh/authorized_keys` côté serveur avec les bonnes permissions. À partir de là, la connexion se fait sans saisir de mot de passe — il faut tester depuis une nouvelle session avant de passer à l'étape suivante, sous peine de risquer de se retrouver enfermé dehors.\n\n### Désactiver la connexion root et les mots de passe\n\nUne fois la connexion par clé validée, on durcit la configuration SSH. Le fichier à modifier est `/etc/ssh/sshd_config` :\n\n```bash\nsudo nano /etc/ssh/sshd_config\n```\n\nLes directives importantes à positionner (ou décommenter) sont :\n\n```\nPermitRootLogin no\nPasswordAuthentication no\nPubkeyAuthentication yes\n```\n\nLa première interdit toute connexion directe en `root` via SSH : on devra obligatoirement se connecter avec un utilisateur normal puis élever ses droits via `sudo`. La deuxième supprime complètement l'authentification par mot de passe, ne laissant plus que les clés. La troisième confirme explicitement que l'authentification par clé est active.\n\nOn recharge ensuite le service pour appliquer les changements :\n\n```bash\nsudo systemctl reload ssh\n```\n\nImportant : garder la session SSH actuelle ouverte et tester la nouvelle configuration depuis un autre terminal avant de fermer la première. En cas de problème, on peut encore corriger le tir.\n\nPour aller un cran plus loin, changer le port SSH par défaut (22) vers un port moins évident réduit considérablement le bruit dans les logs. Ce n'est pas de la sécurité au sens strict (un scan le retrouvera), mais c'est un filtre efficace contre les attaques automatisées.\n\n## Mettre en place un pare-feu\n\nPar défaut, Debian n'a aucun pare-feu actif. Tout port ouvert par un service installé sera donc directement exposé. Deux outils standards existent : `nftables` (le successeur officiel d'`iptables`, bas niveau et puissant) et `ufw` (une surcouche pensée pour la simplicité). Pour démarrer, `ufw` est le bon compromis.\n\n```bash\nsudo apt install ufw\n```\n\nLa logique consiste à tout bloquer en entrée par défaut, puis à n'ouvrir explicitement que ce qui doit l'être :\n\n```bash\nsudo ufw default deny incoming\nsudo ufw default allow outgoing\nsudo ufw allow ssh\nsudo ufw enable\n```\n\nSi SSH écoute sur un port non standard, remplacer `ufw allow ssh` par `ufw allow 2222/tcp` (ou le port choisi). Oublier cette étape avant un `ufw enable` est un grand classique du verrouillage involontaire.\n\nPour les services web, on ouvrira typiquement les ports 80 et 443 :\n\n```bash\nsudo ufw allow 80/tcp\nsudo ufw allow 443/tcp\n```\n\nL'état du pare-feu se vérifie avec :\n\n```bash\nsudo ufw status verbose\n```\n\nSur une architecture où la machine est derrière un reverse proxy (cas fréquent quand on expose plusieurs services sur un même domaine), seuls les ports utiles côté proxy doivent être ouverts au monde extérieur. Les services applicatifs eux-mêmes restent accessibles uniquement depuis le réseau interne.\n\n## Automatiser les correctifs de sécurité\n\nLes failles de sécurité ne préviennent pas, et personne n'a envie de lancer manuellement `apt upgrade` chaque matin sur dix machines. Le paquet `unattended-upgrades` applique automatiquement les mises à jour du dépôt `security`.\n\n```bash\nsudo apt install unattended-upgrades\nsudo dpkg-reconfigure --priority=low unattended-upgrades\n```\n\nLa configuration se trouve ensuite dans `/etc/apt/apt.conf.d/50unattended-upgrades`. Par défaut, seuls les correctifs de sécurité sont appliqués automatiquement, ce qui est généralement le bon compromis : on profite des patches critiques sans risquer qu'une mise à jour fonctionnelle introduise une régression sur un service en production.\n\nQuelques options qui méritent l'attention dans ce fichier :\n\n- `Unattended-Upgrade::Automatic-Reboot` : à régler sur `\"true\"` si l'on accepte les redémarrages automatiques après une mise à jour de noyau, ou `\"false\"` si l'on préfère les piloter à la main. La directive `Automatic-Reboot-Time` permet alors de choisir l'horaire.\n- `Unattended-Upgrade::Mail` : pour recevoir un rapport par mail des mises à jour appliquées, à condition d'avoir un MTA configuré sur la machine.\n\nLe bon réflexe consiste à vérifier de temps en temps les logs dans `/var/log/unattended-upgrades/` pour s'assurer que tout se déroule sans heurts.\n\n## Soigner les détails opérationnels\n\nQuelques outils complémentaires améliorent significativement le confort et la résilience d'un serveur.\n\n**Fail2ban** surveille les logs d'authentification et bannit temporairement les IP qui tentent trop de connexions échouées. Même avec SSH par clé uniquement, le service réduit considérablement le bruit dans les journaux :\n\n```bash\nsudo apt install fail2ban\n```\n\nLa configuration par défaut surveille déjà SSH ; elle peut être étendue à d'autres services (nginx, Postfix, etc.) via des fichiers dans `/etc/fail2ban/jail.d/`.\n\n**Logwatch** ou **journalctl** méritent qu'on s'y attarde. Sur une Debian récente, `journalctl` est l'outil central pour consulter les logs systemd :\n\n```bash\njournalctl -u ssh --since \"1 hour ago\"\njournalctl -p err --since today\n```\n\nPrendre l'habitude de jeter un œil aux logs régulièrement — ou de mettre en place une remontée centralisée si l'on gère plusieurs machines — change beaucoup de choses en exploitation.\n\n**Un swap raisonnable**, sur une VM ou un serveur dédié, évite que la machine ne devienne complètement injoignable en cas de pic de consommation mémoire. Sur un conteneur LXC en revanche, c'est généralement géré au niveau de l'hyperviseur.\n\n## Et après ?\n\nAvec ces réglages, le serveur est dans un état correct pour accueillir des services réels : la surface d'attaque est réduite, les correctifs s'appliquent tout seuls, et les logs racontent ce qui se passe. La suite logique est l'installation de la pile applicative proprement dite (serveur web, base de données, runtime) et la mise en place d'un reverse proxy pour exposer plusieurs services derrière un même point d'entrée.\n\nComme évoqué dans le premier article, le moment où l'on commence à enchaîner ces étapes sur plusieurs machines est exactement celui où il faut basculer vers de l'automatisation : un script shell bien rangé pour commencer, puis Ansible ou un équivalent quand le parc grossit. Une bonne pratique consiste à versionner ces scripts dans un dépôt Git dédié à l'infrastructure, au même titre que le code applicatif.","featured":false,"tags":[]} |