diff --git a/notes/serveur/_files/sshd-security/etc/fail2ban/filter.d/postfix-sasl.conf b/notes/serveur/_files/fail2ban/etc/fail2ban/filter.d/postfix-sasl.conf similarity index 100% rename from notes/serveur/_files/sshd-security/etc/fail2ban/filter.d/postfix-sasl.conf rename to notes/serveur/_files/fail2ban/etc/fail2ban/filter.d/postfix-sasl.conf diff --git a/notes/serveur/_files/sshd-security/etc/fail2ban/filter.d/sshd.conf b/notes/serveur/_files/fail2ban/etc/fail2ban/filter.d/sshd.conf similarity index 100% rename from notes/serveur/_files/sshd-security/etc/fail2ban/filter.d/sshd.conf rename to notes/serveur/_files/fail2ban/etc/fail2ban/filter.d/sshd.conf diff --git a/notes/serveur/_files/sshd-security/etc/fail2ban/jail.local b/notes/serveur/_files/fail2ban/etc/fail2ban/jail.local similarity index 100% rename from notes/serveur/_files/sshd-security/etc/fail2ban/jail.local rename to notes/serveur/_files/fail2ban/etc/fail2ban/jail.local diff --git a/notes/serveur/_files/fail2ban/home/cedrix/ban-ip-sasl.php b/notes/serveur/_files/fail2ban/home/cedrix/ban-ip-sasl.php new file mode 100644 index 0000000..3b13b7f --- /dev/null +++ b/notes/serveur/_files/fail2ban/home/cedrix/ban-ip-sasl.php @@ -0,0 +1,55 @@ +#!/usr/bin/env php + $tempLog"); + +// Lire le fichier temporaire et extraire les adresses IP +$logContent = file_get_contents($tempLog); +preg_match_all('/\[\K[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+(?=\])/', $logContent, $matches); + +// Supprimer les doublons +$ips = array_unique($matches[0]); + +// Obtenir la liste des IP déjà bannies +exec("sudo fail2ban-client status postfix-sasl", $output); +$bannedIps = []; +$bannedIpsFound = false; +foreach ($output as $line) { + if (strpos($line, 'Banned IP list:') !== false) { + $bannedIpsFound = true; + $bannedIps = array_merge($bannedIps, preg_split('/\s+/', trim($line))); + } elseif ($bannedIpsFound && trim($line) !== '') { + $bannedIps = array_merge($bannedIps, preg_split('/\s+/', trim($line))); + } +} + +// Écrire les adresses IP dans un fichier temporaire +file_put_contents($banList, implode("\n", $ips)); + +// Lire le fichier contenant les adresses IP et les bannir avec fail2ban-client +foreach ($ips as $ip) { + if (!in_array($ip, $bannedIps)) { + echo "Banning IP: $ip\n"; + exec("sudo fail2ban-client set postfix-sasl banip $ip"); + } +} + +// Nettoyer les fichiers temporaires +unlink($tempLog); +unlink($banList); + +echo "All matching IPs have been processed.\n"; + +echo "-- Fin d'exection de ".__FILE__."\n"; + +?> diff --git a/notes/serveur/fail2ban-postfix-sasl.md b/notes/serveur/fail2ban-postfix-sasl.md index 57852d7..71ee54d 100644 --- a/notes/serveur/fail2ban-postfix-sasl.md +++ b/notes/serveur/fail2ban-postfix-sasl.md @@ -4,7 +4,7 @@ Cédrix - 2024-07-24 ## Introduction -Le fichier [/etc/fail2ban/jail.local](_files/sshd-security/etc/fail2ban/jail.local) est un fichier de configuration pour [Fail2Ban](fail2ban.md) qui spécifie les "jails" à surveiller et les actions à entreprendre en cas de tentatives de connexion échouées ou malveillantes. Chaque jail est configurée pour surveiller un service particulier (comme SSH, Postfix, ou Pure-FTPd) en utilisant des fichiers de filtre définis dans des fichiers séparés, comme [/etc/fail2ban/filter.d/postfix-sasl.conf](_files/sshd-security/etc/fail2ban/filter.d/postfix-sasl.conf). +Le fichier [/etc/fail2ban/jail.local](_files/fail2ban/etc/fail2ban/jail.local) est un fichier de configuration pour [Fail2Ban](fail2ban.md) qui spécifie les "jails" à surveiller et les actions à entreprendre en cas de tentatives de connexion échouées ou malveillantes. Chaque jail est configurée pour surveiller un service particulier (comme SSH, Postfix, ou Pure-FTPd) en utilisant des fichiers de filtre définis dans des fichiers séparés, comme [/etc/fail2ban/filter.d/postfix-sasl.conf](_files/fail2ban/etc/fail2ban/filter.d/postfix-sasl.conf). Pour renforcer la sécurité de nos services, nous allons configuré Fail2Ban pour surveiller et bloquer les tentatives de connexion malveillantes. @@ -36,6 +36,52 @@ Les expressions régulières suivantes sont définies : +## Automatisation de l'ajout d'adresses IP malveillantes + +Comment automatiser l'ajout des adresses IP suspectes détectées dans les journaux de Postfix SASL à Fail2Ban, en utilisant un script PHP ? L'objectif est de renforcer la sécurité de votre serveur de messagerie en bloquant automatiquement les adresses IP qui tentent des connexions malveillantes et qui seraient passées à travers les mailles du filet. + +Le script [ban_ip_sasl.php](_files/fail2ban/home/cedrix/ban-ip-sasl.php) est écrit en PHP et utilise Fail2Ban pour analyser les journaux de Postfix SASL, extraire les adresses IP malveillantes et les ajouter à la liste de bannissement. + +### Revue de Code : Script PHP pour Automatiser le Bannissement des Adresses IP avec Fail2Ban + +Ce script PHP vise à automatiser l'ajout d'adresses IP suspectes détectées dans les journaux de Postfix SASL à la liste de bannissement de Fail2Ban. Voici une revue de code détaillée, mettant en évidence les points forts, les aspects à améliorer et les suggestions pour une meilleure pratique. + +#### Points Forts + +1. **Automatisation Efficace** : Le script permet d'automatiser le processus de surveillance des journaux et de bannissement des IPs, réduisant ainsi la charge administrative. +2. **Utilisation des Outils Existants** : Le script utilise `fail2ban-regex` et `fail2ban-client`, tirant parti des outils Fail2Ban pour extraire et gérer les adresses IP. +3. **Gestion des Fichiers Temporaires** : La création et la suppression de fichiers temporaires permettent de traiter les données sans laisser de traces inutiles sur le système. +4. **Vérification des IPs Déjà Bannies** : Avant de bannir une adresse IP, le script vérifie si elle est déjà bannie, évitant ainsi des opérations redondantes. + +#### Aspects à Améliorer + +1. **Utilisation de `exec` et `shell_exec`** : L'utilisation de ces fonctions peut poser des risques de sécurité si les entrées ne sont pas correctement échappées. Bien que ce script soit destiné à un usage interne, il est crucial de minimiser les risques d'injection de commandes. +2. **Gestion des Erreurs** : Le script ne gère pas les erreurs potentielles de manière exhaustive. Par exemple, si `fail2ban-regex` ou `fail2ban-client` échoue, le script ne le détecte pas et continue son exécution. +3. **Permissions** : L'exécution de commandes avec `sudo` nécessite que le script soit exécuté avec les privilèges appropriés. Une meilleure approche pourrait être d'exécuter le script en tant qu'utilisateur root directement, ou de configurer `sudo` pour permettre des commandes spécifiques sans mot de passe. +4. **Validation des Entrées et des Sorties** : Avant d'exécuter les commandes, valider les chemins des fichiers et les entrées pour s'assurer qu'ils sont sûrs et existent. +5. **Gestion des Erreurs** : Implémentez une gestion des erreurs robustes en vérifiant les codes de retour des commandes et en ajoutant des messages d'erreur appropriés. +6. **Logging** : Ajouter des logs pour suivre les actions du script, ce qui facilite le débogage et la surveillance des opérations. +7. **Sécurisation des Commandes** : Utiliser des fonctions PHP pour échapper correctement les arguments de commande et minimiser les risques d'injection. +8. **Documentation** : Ajouter des commentaires détaillés et une documentation pour expliquer le fonctionnement du script et les prérequis nécessaires. + +#### Exemple d'Amélioration pour la Gestion des Erreurs + +Au lieu de : +```php +exec("sudo fail2ban-regex $logFile $filterFile --print-all-matched > $tempLog"); +``` + +Vous pouvez utiliser : +```php +$returnVar = 0; +$output = []; +exec("sudo fail2ban-regex " . escapeshellarg($logFile) . " " . escapeshellarg($filterFile) . " --print-all-matched > " . escapeshellarg($tempLog), $output, $returnVar); +if ($returnVar !== 0) { + echo "Erreur lors de l'exécution de fail2ban-regex.\n"; + exit(1); +} +``` + ## Vérifier la jail postfix-sasl (Fail2Ban) diff --git a/notes/serveur/fail2ban-sshd.md b/notes/serveur/fail2ban-sshd.md index ff06f3f..d020341 100644 --- a/notes/serveur/fail2ban-sshd.md +++ b/notes/serveur/fail2ban-sshd.md @@ -4,7 +4,7 @@ Cédrix - 2024-07-24 ## Introduction -Le fichier [/etc/fail2ban/jail.local](_files/sshd-security/etc/fail2ban/jail.local) est un fichier de configuration pour Fail2Ban qui spécifie les "jails" à surveiller et les actions à entreprendre en cas de tentatives de connexion échouées ou malveillantes. Chaque jail est configurée pour surveiller un service particulier (comme SSH, Postfix, ou Pure-FTPd) en utilisant des fichiers de filtre définis dans des fichiers séparés, comme [/etc/fail2ban/filter.d/sshd.conf](sshd-security/etc/fail2ban/filter.d/sshd.conf). +Le fichier [/etc/fail2ban/jail.local](_files/fail2ban/etc/fail2ban/jail.local) est un fichier de configuration pour Fail2Ban qui spécifie les "jails" à surveiller et les actions à entreprendre en cas de tentatives de connexion échouées ou malveillantes. Chaque jail est configurée pour surveiller un service particulier (comme SSH, Postfix, ou Pure-FTPd) en utilisant des fichiers de filtre définis dans des fichiers séparés, comme [/etc/fail2ban/filter.d/sshd.conf](_files/fail2ban/etc/fail2ban/filter.d/sshd.conf). Pour renforcer la sécurité de nos services, nous allons configuré Fail2Ban pour surveiller et bloquer les tentatives de connexion malveillantes.