Ce guide contient quelques conseils et recommandations pour renforcer la sécurité de ton serveur Linux. Comme les serveurs (virtuels) 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 et que tu trouveras des informations plus détaillées dans d'autres sections de la documentation ZAP. (par exemple 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 (certains sont indiqués dans le tableau ci-dessus). Si un attaquant externe tente d'attaquer ton service SSH par force brute, il doit d'abord savoir quel port est utilisé pour SSH. Si tu ne configures pas ces ports autrement, les ports 22 et 21 sont généralement les ports ciblés pour exécuter directement des commandes sur le serveur ou accéder à des fichiers par FTP.
Pour éviter cela, nous te recommandons de définir des ports personnalisés pour les services par défaut. Tu découvriras comment procéder dans la section suivante :
Le port que tu choisis doit être compris entre 1024 et 65535 et ne doit pas déjà être utilisé !
Utilise cat /etc/services pour afficher quelques ports par défaut afin de ne pas en choisir un qui est déjà occupé.
Pour modifier le port SSH, tu dois modifier le fichier de configuration. Il se trouve généralement 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 maintenant 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é (c'est-à-dire #Port 22), supprime le « # » et remplace le 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 également modifier facilement son port en éditant le fichier de configuration. La procédure est similaire à celle du service SSH.
Recherche le fichier de configuration proftpd.conf
find / -name "proftpd.conf" 2>/dev/null
Le fichier se trouve généralement dans /etc/proftpd.conf (CentOS) ou /etc/proftpd/proftpd.conf (Ubuntu, Debian).
Ouvre le fichier avec nano, supprime le « # » devant port et saisis le port de ton choix après celui-ci. Consulte les remarques ci-dessus pour ne pas saisir un port non valide.
Utilise Ctrl + W pour effectuer une recherche dans nano.
nano /etc/proftpd/proftpd.conf
Fail2Ban est un service qui bloque les adresses IP tentant de se connecter à ton 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 façon relativement simple et efficace.
Après son installation, Fail2Ban inclut déjà des paramètres préconfigurés pour certains services couramment utilisés, notamment :
- apache
- lighttpd
- sshd
- qmail
- postfix
- Courier Mail Server Tu peux facilement ajouter d'autres services en indiquant une expression régulière (RegEx) et 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 son état directement avec systemctl : (appuie sur 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 actif ni configuré. Consulte /etc/fail2ban, où tu devrais 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. Il te suffit de copier le contenu de jail.conf dans le nouveau fichier et de l'ouvrir :
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.
Concentre-toi uniquement sur la partie après [Default]. La section par défaut sert à définir les paramètres généraux de base.
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 à ne pas bloquer | 127.0.0.1/8 |
| ignorecommand | Non pertinent. | |
| bantime | Durée pendant laquelle une adresse IP reste bloquée | 1h |
| findtime | Période durant laquelle les échecs de connexion sont comptabilisés | 10m |
| maxretry | Nombre d'échecs entraînant 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 von "findtime"
# Sekunden erzeugt hat.
findtime = 10m
# "maxretry" ist die Anzahl der Fehler, bevor ein Host gesperrt wird.
maxretry = 5
Tu as maintenant terminé la configuration de base. Pour surveiller le service SSH, par exemple, fais défiler vers le bas jusqu'à la balise [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 chaque service (ici, par exemple, maxretry, dont la valeur est inférieure au paramètre par défaut). Même si tu as défini des paramètres généraux auparavant, tu peux reconfigurer la plupart des paramètres séparément pour chaque service. Si tu ne le fais pas, les paramètres généraux seront utilisés.
Il ne te reste plus qu'à redémarrer Fail2Ban pour démarrer la surveillance.
sudo systemctl restart fail2ban.service
Si tu as accès à un VPN ou à un deuxième serveur, tu peux essayer de faire bloquer ta propre adresse IP par Fail2Ban pour vérifier que le service fonctionne. Avec un VPN ou un point d'accès mobile, tu devrais obtenir une autre adresse IP que tu pourras utiliser 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 en SSH à ton serveur (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 voir, la connexion à ton serveur protégé par Fail2Ban est maintenant refusée (Connection refused au lieu de Permission denied).
Affiche maintenant l'état de Fail2Ban. Tu peux voir 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'augmenter 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
