Ce guide te présente quelques conseils et recommandations pour renforcer la sécurité de ton serveur Linux. Comme les serveurs doivent être accessibles depuis l’extérieur, il est fortement recommandé de mettre en place une protection de base contre les accès indésirables et de ne pas la négliger.
Note que ces instructions ne sont pas exhaustives. Tu trouveras des informations plus détaillées dans d’autres sections de la documentation ZAP (par ex. 2FA (SSH)).
Le moyen le plus simple de protéger ton serveur est toujours le même, quel que soit le serveur : utilise des mots de passe sécurisés, mets régulièrement tes services à jour et fais attention aux services que tu installes ainsi qu’aux guides que tu suis.
| Service | Port |
|---|---|
| SSH | 22 |
| FTP | 21 |
| 25 | |
| DNS | 53 |
| HTTP | 80 |
| HTTPS | 443 |
Les services comme SSH ou FTP utilisent toujours les mêmes ports par défaut (tu en trouveras quelques-uns dans le tableau ci-dessus). Si un attaquant externe tente de pirater ton service SSH par force brute, il doit d’abord savoir quel port est utilisé par SSH. Si tu ne modifies pas ces ports, les ports 22 et 21 sont souvent les premières cibles pour exécuter directement des commandes sur le serveur ou accéder à des fichiers par FTP.
Pour éviter cela, nous te recommandons de configurer des ports personnalisés pour les services standard. La section suivante t’explique comment procéder :
Le port que tu choisis doit être compris entre 1024 et 65535 et ne doit pas déjà être utilisé !
Avec cat /etc/services, tu peux afficher quelques ports par défaut et éviter d’en choisir un qui est déjà occupé.
Pour modifier le port SSH, tu dois ajuster le fichier de configuration. Il se trouve normalement dans /etc/ssh/sshd_config. Si ce n’est pas le cas, tu peux le rechercher avec la commande suivante :
find / -name "sshd_config" 2>/dev/null
Ouvre ensuite le fichier avec nano (en tant que root ou avec sudo).
sudo nano /etc/ssh/sshd_config
Ajoute le port de ton choix après Port. Si Port est commenté (par ex. #Port 22), supprime le « # » et remplace 22 par le port de ton choix. Enregistre le fichier (dans Nano avec Ctrl + o), puis ferme-le (Nano : Ctrl + x).
Tu dois maintenant redémarrer le service SSH pour que les modifications soient prises en compte.
# Unter Ubuntu/Debian/CentOS z.B.
sudo systemctl restart sshd
Si tu as installé un service FTP comme proFTPd, tu peux aussi modifier facilement son port dans le fichier de configuration. La procédure est similaire à celle de SSH.
Trouve le fichier de configuration proftpd.conf.
find / -name "proftpd.conf" 2>/dev/null
Le fichier se trouve normalement dans /etc/proftpd.conf (CentOS) ou /etc/proftpd/proftpd.conf (Ubuntu, Debian).
Ouvre le fichier avec nano, supprime le « # » devant port et indique le port de ton choix. Consulte les indications ci-dessus pour éviter de choisir un port invalide.
Utilise Ctrl + W pour lancer une recherche dans nano.
nano /etc/proftpd/proftpd.conf
Fail2Ban est un service qui bloque les adresses IP qui tentent de se connecter au serveur avec des intentions probablement malveillantes. Fail2Ban surveille les fichiers journaux à la recherche d’activités suspectes et protège ainsi ton système de manière relativement simple et efficace.
Après son installation, Fail2Ban inclut déjà des paramètres préconfigurés pour plusieurs services courants, notamment :
- apache
- lighttpd
- sshd
- qmail
- postfix
- Courier Mail Server Tu peux facilement ajouter d’autres services à l’aide d’une expression régulière (RegEx) et en indiquant le fichier journal souhaité.
/var/log/auth.log. Ce fichier contient toutes les tentatives de connexion SSH, qu’elles aient réussi ou échoué.
Voici l’entrée :
Dec 2 12:59:19 vps-zap515723-2 sshd[364126]: Failed password for root from 92.117.xxx.xxx port 52504 ssh2
Fail2Ban utilise ce fichier journal et surveille les échecs d’authentification. Comme le fichier journal contient directement l’adresse IP de l’attaquant, Fail2Ban peut bloquer cette adresse IP après plusieurs tentatives infructueuses.
Connecte-toi d’abord à ton serveur Linux. Si tu as besoin d’aide, suis notre guide Premier accès (SSH). Tu devrais exécuter les commandes en tant que root ou avec sudo.
sudo apt update && sudo apt upgrade -y
sudo apt install fail2ban
Après l’installation, tu peux vérifier le statut directement avec systemctl (utilise Ctrl+C pour quitter systemctl) :
systemctl status fail2ban.service
* fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor pres>
Active: active (running) since Sat 2023-12-02 13:10:33 UTC; 24s ago
Docs: man:fail2ban(1)
Process: 23988 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, statu>
Main PID: 23989 (fail2ban-server)
CPU: 409ms
CGroup: /system.slice/fail2ban.service
`-23989 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
Dec 02 13:10:33 vps-zap515723-1 systemd[1]: Starting Fail2Ban Service...
Dec 02 13:10:33 vps-zap515723-1 systemd[1]: Started Fail2Ban Service.
Dec 02 13:10:34 vps-zap515723-1 fail2ban-server[23989]: Server ready
Fail2Ban est maintenant installé, mais il n’est pas encore activé ni configuré. Consulte /etc/fail2ban : tu devrais y trouver les fichiers suivants :
action.d fail2ban.d jail.conf paths-arch.conf paths-debian.conf
fail2ban.conf filter.d jail.d paths-common.conf paths-opensuse.conf
Pour créer une « jail » active, tu dois créer un fichier nommé jail.local. Copie simplement le contenu de jail.conf dans le nouveau fichier et ouvre-le :
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Tu peux maintenant définir tous les paramètres dans le fichier jail.local, y compris les services à surveiller.
Consulte uniquement la section qui suit [Default]. La section Default contient les paramètres généraux.
Fais défiler un peu vers le bas jusqu’à trouver cette section, puis modifie-la, par exemple, comme suit :
| Attribut | Explication | Valeur |
|---|---|---|
| ignoreip | Adresses IP qui ne doivent pas être bloquées | 127.0.0.1/8 |
| ignorecommand | Sans objet. | |
| bantime | Durée pendant laquelle une adresse IP reste bloquée | 1h |
| findtime | Période pendant laquelle les échecs de connexion sont pris en compte | 10m |
| maxretry | Nombre d’échecs qui entraînent un blocage | 5 |
# kann mit Leerzeichen (und/oder Komma) getrennt definiert werden.
#ignoreip = 127.0.0.1/8 ::1
# ignorecommand = /path/to/command <ip>
ignorecommand =
# "bantime" ist die Anzahl der Sekunden, die ein Host gesperrt ist.
bantime = 1h
# Ein Host wird gesperrt, wenn er "maxretry" Fehler innerhalb der letzten "findtime"
# Sekunden erzeugt hat.
findtime = 10m
# "maxretry" ist die Anzahl der Fehler, bevor ein Host gesperrt wird.
maxretry = 5
Tu as terminé la configuration de base. Pour surveiller le service SSH, par exemple, fais défiler vers le bas jusqu’à la section [sshd]. Si tu as modifié ton port, indique-le sous port.
La section [sshd] devrait alors ressembler à ceci :
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
Comme tu peux le voir, tu peux aussi définir des paramètres spécifiques pour certains services (par exemple, maxretry, qui est inférieur à la valeur par défaut). Même si tu as déjà défini les paramètres généraux, tu peux remplacer la plupart d’entre eux individuellement pour chaque service. Si tu ne le fais pas, le paramètre général sera utilisé.
Il ne te reste plus qu’à redémarrer Fail2Ban pour lancer la surveillance.
sudo systemctl restart fail2ban.service
Si tu as accès à un VPN ou à un deuxième serveur, tu peux tester Fail2Ban en te bloquant toi-même. Avec un VPN ou un point d’accès mobile, tu devrais obtenir une autre adresse IP pour tester Fail2Ban.
Ne fais pas ce test depuis ton réseau habituel, car ta propre adresse IP pourrait être bloquée et tu pourrais perdre l’accès à ton serveur.
Essaie de te connecter à ton serveur en SSH (avec une autre adresse IP !) et saisis un mot de passe incorrect à chaque fois. Le résultat devrait ressembler à ceci :
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
root@185.223.29.xxx: Permission denied (publickey,password).
root@vps-zap515723-2:/var/log# ssh root@185.223.29.179
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
^C
root@vps-zap515723-2:/var/log# ssh root@185.223.29.xxx
ssh: connect to host 185.223.29.xxx port 22: Connection refused
Comme tu peux le constater, ton serveur protégé par Fail2Ban refuse maintenant la connexion (Connection refused au lieu de Permission denied).
Affiche maintenant le statut de Fail2Ban. Tu verras qu’une adresse IP a été bloquée.
fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 4
| |- Total failed: 8
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: xxx
Si tu veux débloquer l’adresse IP, tu peux utiliser la commande suivante : fail2ban-client set sshd unbanip {deine IP}.
Si tu constates un nombre inhabituellement élevé d’adresses IP bloquées, il est recommandé d’allonger la durée de blocage à chaque tentative infructueuse afin de réduire le nombre de tentatives de connexion possibles.
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
bantime = 1h
# Bantime sollte mit jeder Sperre dieser IP steigen
bantime.increment = true
# Skalierungsfaktor von 24 Stunden (1h,24h,48h,3d,4d....)
bantime.factor = 24
# Maximale Sperrzeit = 5 Wochen
bantime.maxtime = 5w
