Hi,
What is the difference between running clamav-milter with
--headers --noreject [EMAIL PROTECTED]
?!
On Mon, 2005-06-20 at 10:51 +0100, Dave Wells wrote:
> Hi,
>
> I have written a perl script called Analyze that will run through
> sendmail's log files and pull out information regarding Infected mails
> captured by ClamAV. I wrote this script as we needed greater visibilty
> of what ClamAV was dropping and I couldn't find anything that would give
> me the info I required.
>
> By default it will run through the /var/log/maillog and print the full
> message headers for each infected mail and then print a summary of the
> Virus detected.
>
> It has other options including the ability to:
>
> 1. Display Top Email Sender addresses
> 2. Display Top Relay Servers sending Infected mails
> 3. Display only Virus Summary
> 4. Can be pointed at any logfile you desire
> 5. Can search through logfile for specific Msg ID and show
> headers of that mail.
>
> I have included source code below.
>
> Please be gentle as I am relatively new to PERL scripting, but any
> enhancements or fixes you can recommend will be greatly appreciated.
>
> If anyone finds this script useful please let me know ).
>
> David Wells
>
>
> ------------------Analyze-----------------------------------------------
> ------
> #!/usr/bin/perl
> # Analyze by D J Wells
> #
> # 16/06/05
> #
> #
> # This script processes Sendmail log files and prints the full message
> headers
> # from infected mails identified by ClamAV in a Human Readable format.
> It then
> # attempts to catalogue# each diffrent type of Virus and print out a
> summary
> # of viruses encountered.
> # Mangle the variables above the warning to your liking, but it would be
>
> # adviseable not to venture past the warning unless you know a # bit of
> perl and are comfortable doing so. # # # CHANGELOG # # 17/06/05 0.1.1
> Added New Disply functions for Virus Count to display in Decending order
>
> # 17/06/05 0.1.2 Added ability to search for specific msgid in any
> logfile and print headers # 17/06/05 0.1.3 Added help functionality #
> 17/06/05 0.1.4 Added --viruscount functionality # 17/06/05 0.1.5 Added
> total to --viruscount functionality # 20/06/05 0.1.6 Added --from
> functionality (Had to add the Email::Address pkg to pull the email
> address from the string)
> # 20/06/05 0.1.7 Added --relay functionality
> #
> #
> use strict;
> use Email::Address;
>
> my $ver = "v0.1.7";
> our $logfile = "/var/log/maillog";
> my $searchstring = "Infected";
>
> print " Argument 1: $ARGV[0]\n";
> print " Argument 2: $ARGV[1]\n";
>
> ########################################################################
> # DO NOT MUCK AROUND BELOW THIS POINT UNLESS YOU KNOW WHAT YOU'RE DOING
> ########################################################################
>
> my $counter = 0 ;
> my @log;
> my @infected;
> my %virus = ();
> my $infected;
> our $msgid;
> our $msgid_set = 0 ;
> my $infectedinst;
> my $key;
> my $viruscount;
> our $total;
> our $from_set = 0;
> our $relay_set = 0;
> my $addr_spec = $Email::Address::addr_spec;
> our %email_addresses;
> our %relay;
> #print "email_address_regexp: $addr_spec\n";
>
> if( ($ARGV[0] =~ /--logfile=(.*)/i or $ARGV[1] =~ /--logfile=(.*)/i) ) {
> $logfile = "$1";
> print "User Input: Logfile = $logfile \n";
> }
>
> if( ($ARGV[0] =~ /--msgid=(.*)/i or $ARGV[1] =~ /--msgid=(.*)/i) ) {
> $msgid = $1;
> $msgid_set = "1";
> print "User Input: msgid = $msgid \n";
> }
>
> if( ($ARGV[0] =~ /--viruscount/i or $ARGV[1] =~ /--viruscount/i) ) {
> $viruscount = "1";
> }
>
> if( ($ARGV[0] =~ /--from/i or $ARGV[1] =~ /--from/i) )
> {
> $from_set = "1";
> }
>
> if( ($ARGV[0] =~ /--relay/i or $ARGV[1] =~ /--relay/i) )
> {
> $relay_set = "1";
> }
>
> if( ($ARGV[0] =~ /--help/i or $ARGV[1] =~ /--help/i) )
> {
> print "------Analyze $ver by D Wells------------\n";
> print "\tHelp Menu\n";
> print "\t--from* #Don't print message headers just
> print summary of email addresses used to send infected mail\n";
> print "\t--relay* #Don't print message headers just
> print summary of hosts used to send infected mails\n";
> print "\t--viruscount* #Don't print message headers just
> print summary of viruses encountered\n";
> print "\t--msgid=<msgid>* #look up specific message headers
> for certain msgid\n";
> print "\t--logfile=<logfile> #point analyze to diffrent logfile
> Default:/var/log/maillog\n";
> print "\t--help #print this help menu\n";
> print "\n";
> print "\tNOTE: Options with a * are mutually exclusive and
> cannot be run together on same command line.\n";
> exit;
> }
>
> print " Log: $logfile\n";
>
> open ("LOG", "<$logfile") || die ( "$!");
> while( <LOG> )
> {
> chomp();
> push( @log, $_ );
> if($msgid_set == 0)
> {
> if( $_ =~ /$searchstring/ )
> {
> push( @infected, $_ );
> } #endif
> } #endif
> } #endwhile
> print "Import finished\n";
> close ( "LOG" );
>
> if($msgid_set == 1)
> {
> print " Infected Message: $msgid\n ";
> print
> "-----------------------------------------------------------------------
> -------------------\n";
> foreach( @log )
> {
> chomp();
> #print "msgid2 = $msgid";
> if( $_ =~ /$msgid/ )
> {
> print "$_\n";
> } #endif
> } #endforeach
> exit
> } #endif
>
> if( $viruscount == 1 )
> {
> foreach(@infected)
> {
> if( /Infected\swith\s(.*)/ )
> {
> $virus{$1}++;
> } #endif
> }#endforeach
>
> print "\n\n\t ---- Virus Count ---- \n";
> $counter = 1;
> $total = 0;
> foreach $key (sort hashValueDescendingNum (keys(%virus)))
> {
> print "\t$counter:\t$virus{$key} \t\t$key\n";
> $total += $virus{$key};
> $counter++;
> }#endforeach
> print "\tTotal:\t$total \n";
> exit
> }#endif
>
> if( $from_set == 1 )
> {
> foreach( @infected )
> {
> #print "infected: $_ \n";
> my $infectedinst = $_;
> if ( $infectedinst =~
> /^\w*\s\d*\s\d\d:\d\d:\d\d\s\w*\s\w*\[\d*\]:\s(\w*)/ )
> {
> our $msgid = $1;
> #print "msgid = $msgid\n";
> } #endif
> $counter++;
> foreach( @log )
> {
> chomp();
> if( $_ =~ /$msgid/ )
> {
> #print "variable = $_\n";
> if ( $_ =~
> /^\w*\s\d*\s\d\d:\d\d:\d\d\s\w*\s\w*\[\d*\]:\s\w*:\sfrom..($addr_spec)/)
> {
> #our $from = $1;
> #print "from = $from\n";
> $email_addresses{$1}++;
> } #endif
> } #endif
> } #endforeach
> } #endforeach
> print "\n\n\t ---- Email Addresses Count ---- \n";
> $counter = 1;
> foreach $key (sort hashValueDescendingEmailAddress
> (keys(%email_addresses)))
> {
> print "\t$counter:\t$email_addresses{$key}
> \t\t$key\n";
> $counter++;
> }#endforeach
> exit
> }#endif
>
> if( $relay_set == 1 )
> {
> foreach( @infected )
> {
> #print "infected: $_ \n";
> my $infectedinst = $_;
> if ( $infectedinst =~
> /^\w*\s\d*\s\d\d:\d\d:\d\d\s\w*\s\w*\[\d*\]:\s(\w*)/ )
> {
> our $msgid = $1;
> #print "msgid = $msgid\n";
> } #endif
> $counter++;
> foreach( @log )
> {
> chomp();
> if( $_ =~ /$msgid/ )
> {
> #print "variable = $_\n";
> if ( $_ =~ /relay=(.*?\s)/)
> {
> #our $relay = $1;
> #print "relay = $relay\n";
> $relay{$1}++;
> } #endif
> } #endif
> } #endforeach
> } #endforeach
> print "\n\n\t ---- Relay Host Count ---- \n";
> $counter = 1;
> foreach $key (sort hashValueDescendingRelay (keys(%relay)))
> {
> print "\t$counter:\t$relay{$key} \t\t$key\n";
> $counter++;
> }#endforeach
> exit
> }#endif
>
>
> foreach( @infected )
> {
> #print "infected: $_ \n";
> my $infectedinst = $_;
> if ( $infectedinst =~
> /^\w*\s\d*\s\d\d:\d\d:\d\d\s\w*\s\w*\[\d*\]:\s(\w*)/ )
> {
> our $msgid = $1;
> } #endif
> $counter++;
> print " Infected Message No: $counter\n ";
> print
> "-----------------------------------------------------------------------
> -------------------\n";
> foreach( @log )
> {
> chomp();
> if( $_ =~ /$msgid/ )
> {
> print "$_\n";
> } #endif
> } #endforeach
> if( $infectedinst =~ /Infected\swith\s(.*)/ )
> {
> $virus{$1}++;
> } #endif
> print "\n";
> } #endforeach
>
> print "\n\n\t ---- Virus Count ---- \n";
> $counter = 1;
> $total = 0;
> foreach $key (sort hashValueDescendingNum (keys(%virus)))
> {
> print "\t$counter:\t$virus{$key} \t\t$key\n";
> $total += $virus{$key};
> $counter++;
> }#endforeach
> print "\tTotal:\t$total \n";
>
>
> #for my $virus1 ( sort keys %virus )
> #{
> # $counter++;
> # print "\t $counter: \t $virus1: \t\t\t\t $virus{$virus1} \n";
> #} #endfor
>
>
> #----------------------------------------------------------------------#
> # FUNCTION: hashValueAscendingNum #
> # #
> # PURPOSE: Help sort a hash by the hash 'value', not the 'key'. #
> # Values are returned in ascending numeric order (lowest #
> # to highest). #
> #----------------------------------------------------------------------#
>
> sub hashValueAscendingNum {
> $virus{$a} <=> $virus{$b};
> }
>
>
> #----------------------------------------------------------------------#
> # FUNCTION: hashValueDescendingNum #
> # #
> # PURPOSE: Help sort a hash by the hash 'value', not the 'key'. #
> # Values are returned in descending numeric order #
> # (highest to lowest). #
> #----------------------------------------------------------------------#
>
> sub hashValueDescendingNum {
> $virus{$b} <=> $virus{$a};
> }
> #----------------------------------------------------------------------#
> # FUNCTION: hashValueDescendingEmailAddress #
> # #
> # PURPOSE: Help sort a hash by the hash 'value', not the 'key'. #
> # Values are returned in descending numeric order #
> # (highest to lowest). #
> #----------------------------------------------------------------------#
>
> sub hashValueDescendingEmailAddress {
> $email_addresses{$b} <=> $email_addresses{$a};
> }
>
> #----------------------------------------------------------------------#
> # FUNCTION: hashValueDescendingRelay #
> # #
> # PURPOSE: Help sort a hash by the hash 'value', not the 'key'. #
> # Values are returned in descending numeric order #
> # (highest to lowest). #
> #----------------------------------------------------------------------#
>
> sub hashValueDescendingRelay {
> $relay{$b} <=> $relay{$a};
>
>
> ______________________________________________________________________
> This email has been scanned by the MessageLabs Email Security System.
> For more information please visit http://www.messagelabs.com/email
> ______________________________________________________________________
> _______________________________________________
> http://lurker.clamav.net/list/clamav-users.html
--
IMAGINATION IS MORE IMPORTANT THAN KNOWLEDGE.
Albert Einstein.
"You know, it's at times like this when I'm trapped in a Vogon
airlock with a man from Betelgeuse and about to die of asphyxiation in
deep space that I really wish I'd listened to what my mother told me
when I was young!"
"Why, what did she tell you?"
"I don't know, I didn't listen."
-- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
110 105 122 97 114 32 97 98 101 100
[EMAIL PROTECTED]
http://www.srcget.com
Cellular : 972-54-204-6789
_______________________________________________
http://lurker.clamav.net/list/clamav-users.html