sasl-script-php
This commit is contained in:
55
notes/serveur/_files/fail2ban/home/cedrix/ban-ip-sasl.php
Normal file
55
notes/serveur/_files/fail2ban/home/cedrix/ban-ip-sasl.php
Normal 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";
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user