Statistiques Simscan
Un article de Wiki SOS-ADMIN.
Ce guide vous est proposé par www.elginux.com
Nous appellerons ce script :
SimScanStat-1.0.2-beta
Sommaire |
[modifier]
Pré-requis
Ce petit script bash permettant d'obtenir des statisques pour simscan nécessite de patcher simscan, de plus il vous faudra avoir metalog comme gestionnaire de log
[modifier]
Patch Simscan
Code : simscan.path
--- /home/src/simscan-1.2/simscan.c 2006-05-21 02:29:43.000000000 +0200
+++ /home/src/simscan-1.2.bak/simscan.c 2006-05-26 08:14:43.000000000 +0200
@@ -33,6 +33,7 @@
#include <string.h>
#include <ctype.h>
#include <errno.h>
+#include <syslog.h>
#include "config.h"
#include "cdb/cdb.h"
#ifdef ENABLE_REGEX
@@ -1873,23 +1873,37 @@
{
int i;
float reqhits;
gettimeofday(&stop,(struct timezone *) 0);
utime=SECS(stop)-SECS(start);
+/* openlog */
+openlog("simscan",LOG_PID,LOG_MAIL);
+
if ( spam == 1 ) {
if ( PerDomainHits == 1 ) reqhits = PDHits;
else reqhits = ReqHits;
fprintf(stderr, "simscan:[%d]:%s (%.2f/%.2f):%3.4fs:%s:%s:%s:%s",
getppid(), state, SpamHits,reqhits, utime, subject,
getenv("TCPREMOTEIP"), MailFrom, RcptTo[0]);
+ syslog(LOG_WARNING,"simscan:[%d]:%s (%.2f/%.2f):%3.4fs:%s:%s:%s:%s",
+ getppid(), state, SpamHits,reqhits, utime, subject,
+ getenv("TCPREMOTEIP"), MailFrom, RcptTo[0]);
} else {
fprintf(stderr, "simscan:[%d]:%s:%3.4fs:%s:%s:%s:%s",
getppid(),state,utime,subject,getenv("TCPREMOTEIP"),MailFrom,RcptTo[0]);
+ syslog(LOG_WARNING,"simscan:[%d]:%s:%3.4fs:%s:%s:%s:%s",
+ getppid(),state,utime,subject,getenv("TCPREMOTEIP"),MailFrom,RcptTo[0]);
}
for(i=1;i<MaxRcptTo;++i) {
fprintf(stderr, ",%s", RcptTo[i]);
}
fprintf(stderr, "\n");
+
+closelog();
+
}
[modifier]
Metalog
Fichier : /etc/metalog/metalog.conf
Simscan : regex = "simscan:" logdir = "/var/log/simscan" command = "/usr/local/sbin/simscan_log.sh"
le script /usr/local/sbin/simscan_log.sh
cat "/usr/local/sbin/simscan_log.sh" #!/bin/bash echo $3|tai64n>>/var/log/simscan/simscan.log
Maintenant nous avons un fichier /var/log/simscan/simscan.log contenant toutes les informations dont nous avons besoin et que nous allons analyser
[modifier]
Le script d'analyse simscan_stat.sh
Code : simscan_stat.sh
#!/bin/bash
#
# Ce script est sous licence opensource
# Merci de ne pas supprimer les mentions ci-dessous
# Nom : SimScanStat
# Version : 1.0.2-beta
# Editeur : Elgi
# Email : laurent AT elginux DOT com
# Site : http://www.elginux.com
opt=0
while [ -n "$1" ]
do
case $1 in
-s)
let opt+=1; shift 1;;
-v)
let opt+=2; shift 1;;
-d)
let opt+=4; shift 1;;
-dom)
if [[ -n "$2" ]]
then
dom=$2;
shift 2;
else
shift 1;
fi
;;
*)
echo "Option inconnue"
break;;
esac
done
if [[ $opt == 0 && -z "$dom" ]]
then
echo "Usage : simscan_stat.sh [option]"
echo ""
echo "Option :"
echo "-s => statistique sucinct du serveur"
echo "-v => statistique des virus du serveur"
echo "-d => statistique par domaine"
echo "-dom [domain.tld] => statistique de domain.tld"
exit 1
fi
log=/var/log/simscan/simscan.log
function etat_email {
if [[ $2 != 0 ]]
then
echo "Nombre d'email $1 : "$2" => "$(echo "scale=2; ($2*100)/$3" | bc)"%"
fi
}
if [[ $opt != 0 ]]
then
ttotal=0
for sec in `cat $log | awk -F ":" '{print $4}' | cut -d 's' -f1`;
do
ttotal=$( echo "scale=4; $ttotal+$sec" | bc );
done;
nbr=`cat $log | wc -l`
moy=$( echo "scale=4; $ttotal/$nbr" | bc )
clean=0
relayclient=0
spam=0
virus=0
passthru=0
for etat in `cat $log | awk -F ":" '{print $3}' | awk '{print $1}'`;
do
case "$etat" in
"CLEAN" )
let clean+=1;;
"RELAYCLIENT" )
let relayclient+=1;;
"SPAM" )
let spam+=1;;
"VIRUS" )
let virus+=1;;
"PASSTHRU" )
let passthru+=1;;
esac
done;
fi
if [[ $opt == 1 || $opt == 3 || $opt == 5 || $opt == 7 ]]
then
echo "Nombre d'email : "$nbr
echo "Temps total d'analyse : "$ttotal" secondes"
echo "Temps moyen d'analyse par email : "$moy" secondes"
etat_email CLEAN $clean $nbr
etat_email RELAYCLIENT $relayclient $nbr
etat_email SPAM $spam $nbr
etat_email VIRUS $virus $nbr
etat_email PASSTHRU $passthru $nbr
fi
if [[ $opt == 2 || $opt == 3 || $opt == 6 || $opt == 7 ]]
then
echo ""
echo "Liste, nombre et pourcentage de virus :"
virus_name=`cat $log | grep "VIRUS" | awk -F ":" '{print $5}' | sort | uniq`
for name in $virus_name;
do
nbr_virus=`cat $log | grep "$name" | wc -l`
pourcent_virus=$(echo "scale=2; ($nbr_virus*100)/$virus" | bc)
echo $name" => "$nbr_virus" => "$pourcent_virus"%";
done;
fi
if [[ $opt == 4 || $opt == 5 || $opt == 6 || $opt == 7 ]]
then
for domain in `cat /var/qmail/control/virtualdomains | awk -F ":" '{print $1}' | sort`;
do
echo ""
echo $domain
nbr_domain=`cat $log | awk -F ":" '{print $8}' | grep "$domain" | wc -l`
echo "Nombre d'email : "$nbr_domain
clean=0
relayclient=0
spam=0
virus=0
passthru=0
for etat in `cat $log | awk -F ":" '{print $3":"$8}' | grep "$domain" | awk '{print $1}'`;
do
case "$etat" in
"CLEAN" )
let clean+=1;;
"RELAYCLIENT" )
let relayclient+=1;;
"SPAM" )
let spam+=1;;
"VIRUS" )
let virus+=1;;
"PASSTHRU" )
let passthru+=1;;
esac
done
etat_email CLEAN $clean $nbr_domain
etat_email RELAYCLIENT $relayclient $nbr_domain
etat_email SPAM $spam $nbr_domain
etat_email VIRUS $virus $nbr_domain
etat_email PASSTHRU $passthru $nbr_domain
done;
fi
if [[ -n $dom ]]
then
echo ""
echo $dom
nbr_domain=`cat $log | awk -F ":" '{print $8}' | grep "$dom" | wc -l`
echo "Nombre d'email : "$nbr_domain
clean=0
relayclient=0
spam=0
virus=0
passthru=0
for etat in `cat $log | awk -F ":" '{print $3":"$8}' | grep "$dom" | awk '{print $1}'`;
do
case "$etat" in
"CLEAN" )
let clean+=1;;
"RELAYCLIENT" )
let relayclient+=1;;
"SPAM" )
let spam+=1;;
"VIRUS" )
let virus+=1;;
"PASSTHRU" )
let passthru+=1;;
esac
done
etat_email CLEAN $clean $nbr_domain
etat_email RELAYCLIENT $relayclient $nbr_domain
etat_email SPAM $spam $nbr_domain
etat_email VIRUS $virus $nbr_domain
etat_email PASSTHRU $passthru $nbr_domain
fi
[modifier]
Exemple d'utilisation
# sh simscan_stat.sh Usage : simscan_stat.sh [option] Option : -s => statistique sucinct du serveur -v => statistique des virus du serveur -d => statistique par domaine -dom [domain.tld] => statistique de domain.tld
# sh simscan_stat.sh -s Nombre d'email : 3578 Temps total d'analyse : 33369.2575 secondes Temps moyen d'analyse par email : 9.3262 secondes Nombre d'email CLEAN : 250 => 6.98% Nombre d'email RELAYCLIENT : 496 => 13.86% Nombre d'email SPAM : 2740 => 76.57% Nombre d'email VIRUS : 92 => 2.57%
# sh simscan_stat.sh -v Liste, nombre et pourcentage de virus : HTML.Phishing.Bank-345 => 2 => 2.17% Worm.Mydoom.M => 6 => 6.52% Worm.Nyxem.E => 1 => 1.08% Worm.SomeFool.Gen-1 => 2 => 2.17% Worm.SomeFool.Gen-2 => 1 => 1.08% Worm.SomeFool.Z => 1 => 1.08% Worm.Zafi.D => 79 => 85.86%
# sh simscan_stat.sh -s -v -dom mon_domaine.tld Nombre d'email : 7530 Temps total d'analyse : 62103.9705 secondes Temps moyen d'analyse par email : 8.2475 secondes Nombre d'email CLEAN : 531 => 7.05% Nombre d'email RELAYCLIENT : 1210 => 16.06% Nombre d'email SPAM : 5109 => 67.84% Nombre d'email VIRUS : 680 => 9.03% Liste, nombre et pourcentage de virus : HTML.Phishing.Bank-345 => 4 => .58% Worm.Mydoom.M => 8 => 1.17% Worm.Nyxem.E => 1 => .14% Worm.SomeFool.AM => 1 => .14% Worm.SomeFool.Gen-1 => 2 => .29% Worm.SomeFool.Gen-2 => 2 => .29% Worm.SomeFool.Z => 1 => .14% Worm.Zafi.D => 661 => 97.20% mon_domaine.tld Nombre d'email : 5002 Nombre d'email CLEAN : 222 => 4.43% Nombre d'email SPAM : 4765 => 95.26% Nombre d'email VIRUS : 2 => .03%

