Guide pratique pour sécuriser un serveur Linux : Firewall, Fail2ban, SSH Publié le 20/11/2024 Temps de lecture : 10 min 17 vues <h4><strong>Introduction</strong></h4> <p>Sécuriser un serveur Linux est essentiel pour protéger vos données et garantir la stabilité de vos services. Ce guide vous explique pas à pas comment renforcer la sécurité de votre serveur en configurant un firewall, en protégeant l'accès SSH et en utilisant Fail2ban pour limiter les tentatives d'intrusion.</p> <hr> <h3><strong>1. Configurer un pare-feu avec UFW</strong></h3> <p>UFW (<em>Uncomplicated Firewall</em>) est un outil simple pour gérer les règles du pare-feu basées sur <code>iptables</code>.</p> <h4><strong>Installation d’UFW</strong></h4> <p>Si UFW n’est pas déjà installé, commencez par l’ajouter :</p> <pre><code>sudo apt update sudo apt install ufw </code></pre> <h4><strong>Activer UFW</strong></h4> <p>Avant de l’activer, assurez-vous de ne pas bloquer votre propre accès SSH :</p> <pre><code>sudo ufw allow ssh sudo ufw enable </code></pre> <h4><strong>Ajouter des règles</strong></h4> <ul> <li>Autoriser un service spécifique : <div> <div> </div> <div dir="ltr"><code>sudo ufw allow http sudo ufw allow https </code></div> </div> </li> <li>Bloquer une IP spécifique : <div> <div> </div> <div dir="ltr"><code>sudo ufw deny from 192.168.1.100 </code></div> </div> </li> </ul> <h4><strong>Vérifier le statut</strong></h4> <pre><code>sudo ufw status verbose </code></pre> <hr> <h3><strong>2. Renforcer la sécurité de SSH</strong></h3> <p>Par défaut, SSH est une cible privilégiée pour les attaques. Voici comment le sécuriser.</p> <h4><strong>Modifier le port par défaut</strong></h4> <p>Changer le port par défaut 22 diminue les risques d'attaques automatisées :</p> <ol> <li>Éditez le fichier de configuration : <div> <div> </div> <div dir="ltr"><code>sudo nano /etc/ssh/sshd_config </code></div> </div> </li> <li>Recherchez la ligne suivante et modifiez-la : <div> <div> </div> <div dir="ltr"><code>#Port 22 Port 2222 </code></div> </div> </li> <li>Redémarrez le service SSH : <div> <div> </div> <div dir="ltr"><code>sudo systemctl restart ssh </code></div> </div> </li> </ol> <h4><strong>Désactiver la connexion par root</strong></h4> <ol> <li>Toujours dans <code>/etc/ssh/sshd_config</code>, recherchez cette ligne : <div> <div> </div> <div dir="ltr"><code>PermitRootLogin yes </code></div> </div> </li> <li>Changez <code>yes</code> en <code>no</code> : <div> <div> </div> <div dir="ltr"><code>PermitRootLogin no </code></div> </div> </li> <li>Redémarrez SSH : <div> <div> </div> <div dir="ltr"><code>sudo systemctl restart ssh </code></div> </div> </li> </ol> <h4><strong>Configurer l’authentification par clé</strong></h4> <ol> <li> <p><strong>Générer une paire de clés SSH</strong> (sur votre machine locale) :</p> <div> <div> </div> <div dir="ltr"><code>ssh-keygen -t rsa -b 4096 </code></div> </div> <p>Sauvegardez les clés dans <code>~/.ssh/id_rsa</code>.</p> </li> <li> <p><strong>Copier la clé publique sur le serveur</strong> :</p> <div> <div> </div> <div dir="ltr"><code>ssh-copy-id user@ip_du_serveur </code></div> </div> </li> <li> <p>Désactiver l’authentification par mot de passe dans <code>/etc/ssh/sshd_config</code> :</p> <div> <div> </div> <div dir="ltr"><code>PasswordAuthentication no </code></div> </div> </li> <li> <p>Redémarrez SSH :</p> <div> <div> </div> <div dir="ltr"><code>sudo systemctl restart ssh </code></div> </div> </li> </ol> <hr> <h3><strong>3. Protéger le serveur avec Fail2ban</strong></h3> <p>Fail2ban surveille les fichiers de log pour détecter et bloquer les IP suspectes.</p> <h4><strong>Installation de Fail2ban</strong></h4> <pre><code>sudo apt update sudo apt install fail2ban </code></pre> <h4><strong>Configurer Fail2ban</strong></h4> <ol> <li> <p>Créez un fichier de configuration personnalisé :</p> <div> <div> </div> <div dir="ltr"><code>sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local </code></div> </div> </li> <li> <p>Modifiez le fichier <code>/etc/fail2ban/jail.local</code> :</p> <div> <div dir="ltr"><code>[DEFAULT] bantime = 3600 findtime = 600 maxretry = 5 [sshd] enabled = true port = 2222 logpath = /var/log/auth.log backend = systemd </code></div> </div> </li> <li> <p>Redémarrez Fail2ban :</p> <div> <div> </div> <div dir="ltr"><code>sudo systemctl restart fail2ban </code></div> </div> </li> </ol> <h4><strong>Vérifier le statut</strong></h4> <p>Pour voir les IP bloquées :</p> <pre><code>sudo fail2ban-client status sshd </code></pre> <hr> <h3><strong>4. Configurer les mises à jour automatiques</strong></h3> <p>Les mises à jour régulières sont essentielles pour protéger votre serveur contre les vulnérabilités connues.</p> <h4><strong>Configurer unattended-upgrades</strong></h4> <ol> <li>Installez le package : <div> <div> </div> <div dir="ltr"><code>sudo apt install unattended-upgrades </code></div> </div> </li> <li>Activez-le : <div> <div> </div> <div dir="ltr"><code>sudo dpkg-reconfigure --priority=low unattended-upgrades </code></div> </div> </li> </ol> <hr> <h3><strong>5. Désactiver les services inutiles</strong></h3> <p>Réduire les services actifs diminue les potentielles failles de sécurité. Utilisez <code>systemctl</code> pour identifier et désactiver les services inutiles :</p> <pre><code>sudo systemctl list-units --type=service sudo systemctl disable nom_du_service </code></pre> <hr> <h3><strong>Conclusion</strong></h3> <p>Avec ces configurations, votre serveur Linux sera significativement mieux protégé contre les menaces courantes. N'oubliez pas que la sécurité est un processus continu : surveillez vos logs, appliquez des mises à jour régulières et auditez régulièrement votre configuration.</p>