76ada6f42d76b69bd07bdbd96c672474b2b67194
🛡️ Gestionnaire de Bannissements Fail2ban
Script Bash complet pour gérer facilement les bannissements Fail2ban avec interface interactive et mode ligne de commande.
📋 Table des matières
✨ Fonctionnalités
Mode Interactif
- 🎨 Interface colorée et intuitive
- 📊 Affichage en temps réel des IPs bannies
- 📈 Statistiques détaillées par jail
- 🔄 Actualisation automatique
- 🎯 Menu facile à naviguer
Mode Ligne de Commande
- ⚡ Actions rapides via arguments
- 🤖 Compatible avec scripts et cron
- 📝 Parfait pour l'automatisation
- 🔧 Intégration CI/CD
Opérations supportées
- ✅ Lister toutes les IPs bannies
- ✅ Lister les jails actives
- ✅ Débannir une IP spécifique
- ✅ Débannir toutes les IPs d'une jail
- ✅ Débannir toutes les IPs de toutes les jails
- ✅ Afficher les statistiques détaillées
- ✅ Consulter les logs récents
🔧 Prérequis
- OS: Debian, Ubuntu ou dérivés
- Privilèges: Root (sudo)
- Logiciels requis:
fail2baninstallé et actifbash4.0+systemctl
Vérification des prérequis
# Vérifier Fail2ban
sudo systemctl status fail2ban
# Vérifier la version de Bash
bash --version
📥 Installation
Méthode 1: Téléchargement direct
# Télécharger le script
wget https://raw.githubusercontent.com/votre-repo/fail2ban-manager.sh
# Rendre exécutable
chmod +x fail2ban-manager.sh
# Déplacer dans un répertoire du PATH (optionnel)
sudo mv fail2ban-manager.sh /usr/local/bin/fail2ban-manager
Méthode 2: Copie manuelle
# Créer le fichier
sudo nano /usr/local/bin/fail2ban-manager
# Coller le contenu du script
# Sauvegarder (Ctrl+O puis Ctrl+X)
# Rendre exécutable
sudo chmod +x /usr/local/bin/fail2ban-manager
Méthode 3: Git
# Cloner le dépôt
git clone https://github.com/votre-repo/fail2ban-manager.git
cd fail2ban-manager
# Installer
sudo cp fail2ban-manager.sh /usr/local/bin/fail2ban-manager
sudo chmod +x /usr/local/bin/fail2ban-manager
🚀 Utilisation
Mode Interactif
Lancez simplement le script sans arguments pour accéder au menu interactif :
sudo fail2ban-manager
Menu disponible:
1. Lister toutes les IPs bannies
2. Lister les jails actives
3. Débannir une IP spécifique
4. Débannir toutes les IPs d'une jail
5. Débannir TOUTES les IPs
6. Afficher les statistiques
7. Voir les logs récents
8. Actualiser
0. Quitter
Mode Ligne de Commande
Afficher l'aide
sudo fail2ban-manager --help
Options disponibles
| Option | Alias | Description | Exemple |
|---|---|---|---|
--list |
-l |
Liste toutes les IPs bannies | fail2ban-manager -l |
--jails |
-j |
Liste les jails actives | fail2ban-manager -j |
--unban <IP> |
-u |
Débannit une IP spécifique | fail2ban-manager -u 192.168.1.100 |
--unban-jail <jail> |
-U |
Débannit toutes les IPs d'une jail | fail2ban-manager -U sshd |
--unban-all |
-a |
Débannit TOUTES les IPs | fail2ban-manager -a |
--stats |
-s |
Affiche les statistiques | fail2ban-manager -s |
--logs [jail] [lignes] |
-L |
Affiche les logs | fail2ban-manager -L sshd 50 |
--interactive |
-i |
Mode interactif | fail2ban-manager -i |
--help |
-h |
Affiche l'aide | fail2ban-manager -h |
📚 Exemples
Exemple 1: Consultation rapide
# Voir toutes les IPs bannies
sudo fail2ban-manager --list
# Sortie:
# [IPs actuellement bannies]
#
# Jail: sshd
# • 192.168.1.100
# • 203.0.113.50
#
# Jail: nginx-http-auth
# • 198.51.100.25
#
# Total: 3 IP(s) bannie(s)
Exemple 2: Débannir une IP d'un faux positif
# Un collègue s'est trompé de mot de passe plusieurs fois
sudo fail2ban-manager --unban 192.168.1.150
# Sortie:
# [Débannissement de 192.168.1.150]
#
# → Débannissement de 192.168.1.150 dans la jail sshd...
# ✓ IP débannie de sshd
#
# ✓ IP 192.168.1.150 complètement débannie
Exemple 3: Maintenance après une attaque
# Après avoir bloqué l'attaque, nettoyer toutes les IPs bannies
sudo fail2ban-manager --unban-all
# Sortie:
# [Débannissement de TOUTES les IPs]
#
# Êtes-vous sûr? (oui/non): oui
#
# Jail: sshd
# → Débannissement de 192.168.1.100...
# → Débannissement de 203.0.113.50...
#
# ✓ Total: 15 IP(s) débannie(s)
Exemple 4: Surveillance des tentatives
# Afficher les statistiques
sudo fail2ban-manager --stats
# Sortie:
# [Statistiques Fail2ban]
#
# Jail Actuellement Total Tentatives
# ──────────────────── ───────────── ──────── ───────────
# sshd 5 127 23
# nginx-http-auth 2 45 8
# postfix-sasl 0 12 0
Exemple 5: Analyser les logs
# Voir les 30 dernières lignes des logs SSH
sudo fail2ban-manager --logs sshd 30
# Voir les logs d'une autre jail
sudo fail2ban-manager --logs nginx-http-auth 50
Exemple 6: Automatisation avec cron
# Débannir automatiquement toutes les IPs chaque nuit à 3h
# Ajouter dans crontab -e:
0 3 * * * /usr/local/bin/fail2ban-manager --unban-all <<< "oui" > /var/log/fail2ban-unban.log 2>&1
# Recevoir un rapport quotidien par email
0 8 * * * /usr/local/bin/fail2ban-manager --stats | mail -s "Rapport Fail2ban" admin@example.com
Exemple 7: Script de monitoring
#!/bin/bash
# Script de monitoring des bannissements
# Compter les IPs bannies
banned_count=$(sudo fail2ban-manager --list | grep "Total:" | awk '{print $2}')
# Alerter si plus de 10 IPs bannies
if [ "$banned_count" -gt 10 ]; then
echo "ALERTE: $banned_count IPs bannies!" | mail -s "Alerte Fail2ban" admin@example.com
fi
📸 Captures d'écran
Vue principale (mode interactif)
════════════════════════════════════════════════════════════════
Gestionnaire de Bannissements Fail2ban
════════════════════════════════════════════════════════════════
[Jails actives]
1. sshd - 3 IP(s) bannies (Total: 127)
2. nginx-http-auth - 2 IP(s) bannies (Total: 45)
3. postfix-sasl - 0 IP bannie (Total: 12)
[IPs actuellement bannies]
Jail: sshd
• 192.168.1.100
• 203.0.113.50
• 198.51.100.25
Jail: nginx-http-auth
• 192.0.2.10
• 192.0.2.11
Total: 5 IP(s) bannie(s)
[Menu]
1. Lister toutes les IPs bannies
2. Lister les jails actives
3. Débannir une IP spécifique
4. Débannir toutes les IPs d'une jail
5. Débannir TOUTES les IPs
6. Afficher les statistiques
7. Voir les logs récents
8. Actualiser
0. Quitter
Votre choix:
🔍 Dépannage
Problème: "Fail2ban n'est pas installé"
Solution:
# Debian/Ubuntu
sudo apt update
sudo apt install fail2ban
# Vérifier l'installation
sudo systemctl status fail2ban
Problème: "Fail2ban n'est pas actif"
Solution:
# Démarrer Fail2ban
sudo systemctl start fail2ban
# Activer au démarrage
sudo systemctl enable fail2ban
Problème: "Permission denied"
Solution:
# Le script nécessite les privilèges root
sudo fail2ban-manager --list
Problème: Les couleurs ne s'affichent pas
Solution:
# Vérifier que votre terminal supporte les couleurs
echo $TERM
# Si nécessaire, définir TERM
export TERM=xterm-256color
Problème: Jail non trouvée
Solution:
# Lister les jails disponibles
sudo fail2ban-manager --jails
# Vérifier la configuration Fail2ban
sudo fail2ban-client status
Problème: Impossible de débannir une IP
Solution:
# Vérifier que l'IP est bien bannie
sudo fail2ban-manager --list
# Débannir manuellement
sudo fail2ban-client set sshd unbanip 192.168.1.100
# Vérifier les logs
sudo tail -f /var/log/fail2ban.log
🔐 Sécurité
Bonnes pratiques
-
Toujours vérifier avant de débannir en masse
# D'abord lister sudo fail2ban-manager --list # Puis décider sudo fail2ban-manager --unban-all -
Conserver des logs
# Logger toutes les actions sudo fail2ban-manager --unban-all 2>&1 | tee -a /var/log/fail2ban-actions.log -
Limiter l'accès au script
# Permissions restrictives sudo chmod 700 /usr/local/bin/fail2ban-manager sudo chown root:root /usr/local/bin/fail2ban-manager -
Sauvegarder avant actions de masse
# Exporter la liste avant débannissement sudo fail2ban-manager --list > /root/banned-ips-backup-$(date +%Y%m%d).txt
📊 Intégration avec d'autres outils
Monitoring avec Prometheus
# Exporter les métriques
banned_total=$(sudo fail2ban-manager --list | grep "Total:" | awk '{print $2}')
echo "fail2ban_banned_ips $banned_total" > /var/lib/node_exporter/textfile/fail2ban.prom
Alertes avec Slack/Discord
#!/bin/bash
# Script d'alerte
WEBHOOK_URL="https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
banned=$(sudo fail2ban-manager --list)
curl -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"Rapport Fail2ban:\n\`\`\`$banned\`\`\`\"}" \
$WEBHOOK_URL
Dashboard avec Grafana
Combinez avec Elasticsearch et créez des visualisations des bannissements.
🛠️ Configuration avancée
Alias pratiques
Ajoutez dans ~/.bashrc ou ~/.zshrc:
# Alias Fail2ban
alias f2b='sudo fail2ban-manager'
alias f2b-list='sudo fail2ban-manager --list'
alias f2b-stats='sudo fail2ban-manager --stats'
alias f2b-unban='sudo fail2ban-manager --unban'
Fonction shell personnalisée
# Débannir rapidement une IP
unban() {
if [ -z "$1" ]; then
echo "Usage: unban <IP>"
return 1
fi
sudo fail2ban-manager --unban "$1"
}
# Utilisation: unban 192.168.1.100
🤝 Contribution
Les contributions sont les bienvenues !
Comment contribuer
- Fork le projet
- Créer une branche (
git checkout -b feature/amelioration) - Commit les changements (
git commit -am 'Ajout fonctionnalité') - Push vers la branche (
git push origin feature/amelioration) - Créer une Pull Request
Idées d'amélioration
- Export des données en JSON/CSV
- Intégration avec des bases de données de réputation IP
- Notifications par email/webhook
- Interface web
- Support d'autres systèmes de bannissement (iptables direct, nftables)
- Whitelist automatique d'IPs
📝 Changelog
v1.0 (2024-12-06)
- ✨ Version initiale
- ✅ Mode interactif
- ✅ Mode ligne de commande
- ✅ Support multi-jails
- ✅ Statistiques détaillées
- ✅ Consultation des logs
📄 Licence
Ce script est distribué sous licence MIT.
MIT License
Copyright (c) 2024
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
👤 Auteur
Script créé pour faciliter la gestion quotidienne de Fail2ban.
🔗 Liens utiles
⭐ Support
Si ce script vous a été utile, n'hésitez pas à :
- ⭐ Star le projet
- 🐛 Signaler des bugs
- 💡 Proposer des améliorations
- 📖 Améliorer la documentation
Made with ❤️ for sysadmins
Description
Languages
Shell
100%