sasl-script-php

This commit is contained in:
Cédric Abonnel 2024-07-24 02:13:39 +02:00
parent c45f3a0357
commit 86c9b9dbf7
6 changed files with 103 additions and 2 deletions

View File

@ -0,0 +1,55 @@
#!/usr/bin/env php
<?php
echo "-- Execution de ".__FILE__."\n";
// Créer des fichiers temporaires pour stocker les logs et les IPs
$tempLog = trim(shell_exec('mktemp /tmp/fail2ban_temp.XXXXXX.log'));
$banList = trim(shell_exec('mktemp /tmp/ban_ips.XXXXXX.txt'));
$logFile = "/var/log/mail.log";
$filterFile = "/etc/fail2ban/filter.d/postfix-sasl.conf";
// Utiliser fail2ban-regex pour analyser le fichier de log et extraire les adresses IP correspondantes
exec("sudo fail2ban-regex $logFile $filterFile --print-all-matched > $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";
?>

View File

@ -4,7 +4,7 @@ Cédrix - 2024-07-24
## Introduction ## 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. 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) ## Vérifier la jail postfix-sasl (Fail2Ban)

View File

@ -4,7 +4,7 @@ Cédrix - 2024-07-24
## Introduction ## 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. Pour renforcer la sécurité de nos services, nous allons configuré Fail2Ban pour surveiller et bloquer les tentatives de connexion malveillantes.