Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
fail2ban [2025/01/15 07:33] – [Les principes ] serge.guerinet | fail2ban [2025/01/16 09:09] (Version actuelle) – [Fail2Ban] serge.guerinet | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Fail2Ban ====== | + | ====== Fail2Ban |
Un attaquant peut essayer en <wrap em> | Un attaquant peut essayer en <wrap em> | ||
- | Le serveur | + | Les services (Apache, SSH, FTP, etc) ou le code ne permettent pas de détecter cela. |
- | Il faut rajouter un utilitaire qui permet de détecter les comportements anormaux dans les accès aux services d’une machine : connexion trop fréquentes et en échec, connexions démultipliées dans un temps court, etc. | + | |
+ | Il faut rajouter un utilitaire qui permet de détecter les <wrap em>comportements anormaux</ | ||
+ | * connexion trop fréquentes et en échec, | ||
+ | * connexions démultipliées dans un temps court, | ||
+ | * connexions initiées puis abandonnées, | ||
+ | * connexions envoyant des éléments mal formés | ||
+ | * etc. | ||
C’est le rôle de l’outil Fail2ban : <wrap em>de l’échec (Fail) à (2) un bannissement (Ban)</ | C’est le rôle de l’outil Fail2ban : <wrap em>de l’échec (Fail) à (2) un bannissement (Ban)</ | ||
Ligne 45: | Ligne 51: | ||
* **filter.d** : on y crée ou adapte les fichiers définissant ce qui est recherché dans les journaux pour identifier un type de comportement inadapté | * **filter.d** : on y crée ou adapte les fichiers définissant ce qui est recherché dans les journaux pour identifier un type de comportement inadapté | ||
* **action.d** : dossier qui décrit les comportements (blocages d'IP, ajout de règles de filtrage, journalisation, | * **action.d** : dossier qui décrit les comportements (blocages d'IP, ajout de règles de filtrage, journalisation, | ||
+ | |||
+ | ===== Les principales commandes ===== | ||
+ | Gérer le service Fail2ban | ||
+ | <code lscript> | ||
+ | |||
+ | Connaître l' | ||
+ | <code lscript> | ||
+ | Exemple | ||
+ | <WRAP center round tip 90%> | ||
+ | <code lscript> | ||
+ | Status for the jail: sshd | ||
+ | |- Filter | ||
+ | | |- Currently failed: 0 | ||
+ | | |- Total failed: | ||
+ | | `- Journal matches: | ||
+ | `- Actions | ||
+ | |- Currently banned: 1 | ||
+ | |- Total banned: | ||
+ | `- Banned IP list: | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | Pour bloquer une IP pour un jail donné (sshd, apache, etc) | ||
+ | <code lscript> | ||
+ | |||
+ | Pour débloquer une IP bannie pour un jail donné (sshd, apache, etc) | ||
+ | <code lscript> | ||
+ | |||
+ | Voir les journaux d' | ||
+ | <code lscript> | ||
+ | |||
===== Exemple de démarche pour du brute force sur SSH ===== | ===== Exemple de démarche pour du brute force sur SSH ===== | ||
Ligne 67: | Ligne 105: | ||
# Nombre de tentatives autorisées avant bannissement (plus strict) | # Nombre de tentatives autorisées avant bannissement (plus strict) | ||
maxretry = 3 | maxretry = 3 | ||
- | # Période d' | + | # Période d' |
- | findtime = 30m | + | findtime = 3000 |
- | # Temps de bannissement en minutes (30 minutes) | + | # Temps de bannissement en minutes (20 minutes) |
- | bantime = 30m | + | bantime = 20m |
# Backend pour la gestion des journaux | # Backend pour la gestion des journaux | ||
backend = systemd | backend = systemd | ||
Ligne 76: | Ligne 114: | ||
Après modification du fichier, on redémarre le service : <code lscript> systemctl restart fail2ban </ | Après modification du fichier, on redémarre le service : <code lscript> systemctl restart fail2ban </ | ||
+ | |||
+ | Une tentative de connexion impossible générera des traces dans le journal, jusqu' | ||
+ | <code lscript> | ||
+ | distant@machine.sio.bts$ tail / | ||
+ | 2025-01-16 08: | ||
+ | 2025-01-16 08: | ||
+ | 2025-01-16 08: | ||
+ | 2025-01-16 08: | ||
+ | 2025-01-16 08: | ||
+ | 2025-01-16 08: | ||
+ | </ | ||
+ | |||
+ | après le temps prévu du bannissement, | ||
+ | <code lscript> | ||
+ | 2025-01-16 08: | ||
+ | </ | ||
===== Exemple de démarche pour du brute force sur une application Web ===== | ===== Exemple de démarche pour du brute force sur une application Web ===== |