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:17] – [Fail2Ban] 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)</ | ||
| - | ===== Préparation | + | ===== Installation |
| On doit d' | On doit d' | ||
| <code lscript> | <code lscript> | ||
| Ligne 20: | Ligne 26: | ||
| ===== Les principes ===== | ===== Les principes ===== | ||
| Fail2ban est un outil de détection d’intrusion | Fail2ban est un outil de détection d’intrusion | ||
| - | * Il explore les journaux d’activités (de la machine, d’un service, etc) pour y repérer des indications de comportement anormaux (par exemple une répétition de messages « connection refused » dans un temps déterminé). | + | * Il **explore les journaux d’activités** (de la machine, d’un service, etc) pour y repérer des indications de **comportement anormaux** (par exemple une répétition de messages « connection refused » dans un temps déterminé). |
| * il se base sur 3 types de fichiers : | * il se base sur 3 types de fichiers : | ||
| * <wrap em> | * <wrap em> | ||
| Ligne 30: | Ligne 36: | ||
| ==== Les dossiers et fichiers ==== | ==== Les dossiers et fichiers ==== | ||
| Fail2ban repose sur les éléments suivants : | Fail2ban repose sur les éléments suivants : | ||
| - | * Dossier de base (/ | + | * Dossier de base (**/ |
| - | * fail2ban.conf : définit les configurations de base de l' | + | |
| - | * jail.conf : paramètres par défaut des **// | + | |
| * **bantime** : défini la durée de bannissement **en secondes**, et les options (rallongement, | * **bantime** : défini la durée de bannissement **en secondes**, et les options (rallongement, | ||
| * ignoreself et ignoreip : machines qui ne doivent pas être bannies | * ignoreself et ignoreip : machines qui ne doivent pas être bannies | ||
| Ligne 41: | Ligne 47: | ||
| * les fichiers // | * les fichiers // | ||
| - | Pour configurer Fail2ban, la bonne pratique est de définir des fichiers spécifiques (nommés **//< | + | **Pour configurer Fail2ban, la bonne pratique** est de définir des **fichiers spécifiques** (nommés **//< |
| - | * jail.d : on y crée les configurations pour les services qu'on souhaite surveiller, soit dans des fichiers individuels, | + | |
| - | * 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, | + | |
| + | |||
| + | ===== 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 ===== | ||