j2c.org  » Informatique  » Linux  » Mail, affichez les tentatives de spam

Postfix, affichez les tentatives de spam

Objectif

Cette page a pour but, de vous montrer comment réaliser une page de rapport automatique de tentative de spam. à l'image de spam.j2c-s2c.com

Prérequis

Vous devez avoir un serveur de mail postfix opérationnel, non open-relay, et protégé contre le spam via des dispositifs de destruction avant livraison.(RBL, règles strict dans votre serveur)

Vous devez connaitre, le php, et le sh

Apache, sur la machine doit être capable de faire de l'url rewriting.

Coté serveur de mail

Nous devons lire les logs, et en extraire l'info sans la relire 2 fois... nous choissons d'utiliser logtail et de faire tourner le script 1 fois par jour

Installation de logtail

aptitude install logtail

Le script

#!/bin/sh
DEST='/home/www/spam/reports'

/usr/sbin/logtail -o $DEST/offset.log /var/log/mail.log | awk '$7 ~ /reject/ && $11 !~ /450/ {print $2 "-" $1 "-" $3 " " $10 $27}' > $DEST/$(/bin/date +%Y%m%d).log

Je récupère un certains nombre de champs, sur des entrées comportant le mot "reject", qui ne sont pas des erreurs temporaires (= 450).

Ce programme, génère un fichier du genre :

10-Jan-09:05:39 unknown[121.20.70.198]:from=<tickerp2@sonnenplatz.com>
10-Jan-09:08:39 unknown[121.63.24.126]:from=<steamerzy6@projectile-ltd.com>
10-Jan-09:31:34 unknown[88.253.26.174]:from=<jason@fmunch.com>
10-Jan-09:48:24 unknown[123.55.179.91]:from=<vibratoz@3dplant.com>
10-Jan-10:20:15 unknown[91.185.11.150]:from=<dwvitranim@vitrani.com>
10-Jan-10:20:30 unknown[91.185.11.150]:from=<jnakbmvb@studiogid.ru>
10-Jan-10:20:46 unknown[91.185.11.150]:from=<david@travpunkten.com>
10-Jan-10:24:01 118-165-77-16.dynamic.hinet.net[118.165.77.16]:from=<bd5gk921j@yahoo.com>
10-Jan-11:25:22 200-161-186-21.dsl.telesp.net.br[200.161.186.21]:from=<marcel@j2c-s2c.com>
10-Jan-11:30:33 118-165-72-115.dynamic.hinet.net[118.165.72.115]:from=<bd5gk921j@yahoo.com>
10-Jan-12:18:27 118-166-218-113.dynamic.hinet.net[118.166.218.113]:from=<ttc585ttc585@yahoo.com.tw>
10-Jan-14:16:29 118-167-130-6.dynamic.hinet.net[118.167.130.6]:from=<support@microsoft.com>
10-Jan-21:16:24 118-168-115-186.dynamic.hinet.net[118.168.115.186]:from=<ttc585ttc585@yahoo.com.tw;>
10-Jan-21:30:09 ks361263.kimsufi.com[91.121.167.141]:from=<beetell@unitead2.com>
10-Jan-23:37:44 cbl-sd-65-249.aster.com.do[190.0.65.249]:from=<cgathiru@nse.co.ke>

DEST permet d'indiquer le répertoire où seront stockés les rapports

Il me reste plus qu'à le rajouter dans une crontab (de root)

# crontab -e

50 23 * * * /opt/mail/check-spam.sh

il faut s'assurer que le check-spam.sh est bien executable

Coté Serveur Web

La mainpage

Comme nous avons un fichier généré par jour, il est inconcevable de devoir regénérer tous les jours la page pour ajouter le fichier, utilisons le php pour le faire à notre place ;)

Voici un extrait de la mainpage (index.php)


<h2>Rapports journaliers de mon site g</h2> <ul> <?php $handle=opendir('reports'); rewinddir(); $i = 0; while ($file = readdir($handle)) { if ($file != "." && $file != "..") { next; } if (is_dir($file) == false) { $file2=basename($file, '.log'); $table[] = $file2; } } closedir($handle); sort($table); foreach ($table as $file) { if (preg_match('/^(\d{4})(\d{2})(\d{2})$/', $file, $result)) { $day = $result[3]; $month = $result[2]; $year = $result[1]; $date_string = "$day/$month/$year"; } echo "<li><a href=\"spam$file.php\">Tentatives du ".$date_string."</a></li>\n"; } ?> </ul>

Ensuite, nous devons générer le rapport : (spam.php)


<?php $file_date = $_GET['date']; if (preg_match('/^(\d{4})(\d{2})(\d{2})$/', $file_date, $result)) { $day = $result[3]; $month = $result[2]; $year = $result[1]; $file = $result[0]; $date_string = "$day/$month/$year"; $path = ''; } ?> <html> <head> <-- les entêtes --> <?php echo "<title>Tentatives de spam le $date_string </title>"; ?> </head> <body> <h1>Rapport de tentatives de spams sur mes serveurs le <?php echo "$date_string"; ?></h1> <a href="/">Revenir à la liste des rapports</a><br /><br /> <table> <tr> <th>Heure</th> <th>Nom de Domaine</th> <th>Adresse IP</th> <th>Adresse E-mail spoofée</th> </tr> <?php $fichier="$_SERVER[DOCUMENT_ROOT]/reports$path/$file.log"; $tabfich=file($fichier); for( $i = 0 ; $i < count($tabfich) ; $i++ ) { if (preg_match('/(.+)-(.+)\s{1}(.+)\[(.+)\]:\s*from=\<(.+)\>$/', $tabfich[$i], $result)) { if ( ereg("exemple\.com$",$result[5], $coin)) { $result[5] = "fuckU@attack.j2c-s2c.com"; // funny mail } echo " <tr>\n"; echo " <td align='right'>$result[2]</td>\n"; echo " <td>$result[3]</td>\n"; echo " <td align='right'>$result[4]</td>\n"; echo " <td align='center'><a href=\"mailto:$result[5]\">$result[5]</a></td>\n"; echo " </tr>\n"; } } ?> </table> </body> </html>

Si on veut afficher la liste des fichiers du plus récent au plus ancien, il faut remplacer "sort" par "rsort".

Config d'APACHE

Une fois ceci terminé, il ne nous reste plus qu'à configurer apache avec le mod-rewrite

Dans le virtualhost responsable de la gestion de ses pages, il suffit de rajouter ces lignes.

RewriteEngine On RewriteCond %{REQUEST_FILENAME} /spam(\d{8}).php
RewriteRule (.*) /spam.php?date=%1 [L]

Il ne vous reste plus qu'à redémarrer le serveur apache

apache2ctl restart

 

Il y a 2 commentaires.

pencil Afficher les commentaires - pencil Ajouter un commentaire

.: Dernière mise à jour le 12/10/2010.

Conception et design Jérôme CROCHET © 2000 - 2012 · j2c.org · Tous droits réservés.

Votre IP : 38.107.179.210 () · Page générée en 0,0262 s.

Toute diffusion, même partielle de ce document, doit être soumise à une autorisation écrite préalable de son auteur.

miam