lamp

Graylisting enabled

Published 31 May 08 01:45 PM | Frederick.Chapleau

Statistics

Based on Yenya's World script, I have modified it to match my own log

 

#!/usr/bin/perl -w
#
# Postgreystats - a simple and incorrect statistics package for Postgrey.
# Use at your own risk.
# Distributable under the terms of GNU General Public License, version 2.
# Written by Jan "Yenya" Kasprzak,
http://www.fi.muni.cz/~kas/, 2006-11-10
#
# Usage: postgreystats.pl /var/log/maillog
#
my %clients;

my ($delay_total, $delay_msgs);
my ($msgs_gray, $msgs_in);

my ($fromtime, $totime);

my $prev;

$msgs_in = 0;
$msgs_gray = 0;
$delay_total = 0;
$delay_msgs = 0;

while(<>) {
        $prev = $_;
        if (!defined $fromtime) {
                ($fromtime) = m{^(... .. ..:..:..)};
        }
        if (my ($client) = m{postfix/smtpd\S+: [0-9A-F]{10,12}: client=\S+\[(\d+\.\d+\.\d+\.\d+)\]}) {
                $clients{$client}->{in}++;

                $msgs_in++;
                next;
        }

        if (my ($client) = m{postfix/smtpd\S+: NOQUEUE: reject: RCPT from \S+\[(\d+\.\d+\.\d+\.\d+)\]:.* 450 .*seconds}i) {
                $clients{$client}->{grey}++;
                $msgs_gray++;
        }
}

($totime) = ($prev =~ m{^(... .. ..:..:..)});

print "\nGreylisting stats from $fromtime\n",
        "                  till $totime\n\n";

$msgs_in   -= $delay_msgs;
$msgs_gray -= $delay_msgs;
my $msgs_total = $msgs_gray + $msgs_in + $delay_msgs;

printf   "Messages\n"
        ."total:                %10d\n"
        ."accepted immediately: %10d (%5.1f%%)\n"
        ."blocked:              %10d (%5.1f%%)\n\n",
        $msgs_total,
        $msgs_in,    100*$msgs_in    / $msgs_total,
        $msgs_gray,  100*$msgs_gray  / $msgs_total;

my ($zero_in, $zero_grey, $grey_pos, $grey_neg);
my ($zero_in_msgs, $zero_grey_msgs, $grey_pos_msgs_in, $grey_pos_msgs_gr,
        $grey_neg_msgs_in, $grey_neg_msgs_gr);

$zero_in=0;
$zero_grey=0;
$grey_pos=0;
$grey_neg=0;
$zero_in_msgs=0;
$zero_grey_msgs=0;
$grey_pos_msgs_in=0;
$grey_pos_msgs_gr=0;
$grey_neg_msgs_in=0;
$grey_neg_msgs_gr=0;

for my $client (keys %clients) {
        my $in = $clients{$client}->{in}   || 0;
        my $gr = $clients{$client}->{grey} || 0;

        if ($in == 0) {
                $zero_in++;
                $zero_in_msgs+=$gr;
        } elsif ($gr == 0) {
                $zero_gr++;
                $zero_gr_msgs += $in;
        } elsif ($gr <= $in) {
                $grey_pos++;
                $grey_pos_msgs_in += $in;
                $grey_pos_msgs_gr += $gr;
        } else {
                $grey_neg++;
                $grey_neg_msgs_in += $in;
                $grey_neg_msgs_gr += $gr;
        }
}

my ($grey_pos_msgs, $grey_neg_msgs) = (
        $grey_pos_msgs_in - $grey_pos_msgs_gr,
        $grey_neg_msgs_gr - $grey_neg_msgs_in
);

printf   "SMTP servers:\n"
        ."                                   hosts   messages\n"
        ."No message accepted:          %10d %10d\n"
        ."No message graylisted:        %10d %10d\n"
        ."All accepted (maybe delayed): %10d %10d = %d-%d\n"
        ."More blocked than accepted:   %10d %10d = %d-%d\n\n",

        $zero_in, $zero_in_msgs,
        $zero_gr, $zero_gr_msgs,
        $grey_pos, $grey_pos_msgs_in-$grey_pos_msgs_gr, $grey_pos_msgs_in,
                $grey_pos_msgs_gr,
        $grey_neg, $grey_neg_msgs_gr-$grey_neg_msgs_in, $grey_neg_msgs_gr,
                $grey_neg_msgs_in;

 

-f.

Ref: 

PostGray Statistics

 http://www.fi.muni.cz/~kas/blog/index.cgi/computers/postgrey-statistics.html

Filed under:

Comments

No Comments

Leave a Comment

(required) 
(required) 
(optional)
(required) 

Protected by FormShield
Refresh
Listen
Please enter the characters shown on the image


Code: