sasl-script-php
This commit is contained in:
parent
c45f3a0357
commit
86c9b9dbf7
|
@ -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";
|
||||||
|
|
||||||
|
?>
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue