#!/usr/bin/perl # Downloaded from exchange.nagios.org # URL: http://exchange.nagios.org/directory/Plugins/Anti-2DVirus/Amavis/check_amavis/details # # Maintained later on by Elan Ruusamäe # http://cvs.pld-linux.org/packages/nagios-plugin-check_amavis/ # v1.1, 2011-12-22 use Getopt::Long; use MIME::Entity; use Net::SMTP; my $server = ''; my $port = 10024; my $from = ''; my $to = ''; my $debug = 0; my $help = 0; my %STATES = ( "OK" => 0, "WARNING" => 1, "CRITICAL" => 2, "UNKNOWN" => 3, "DEPENDENT" => 4, ); $result = GetOptions ( "server|s=s" => \$server, "port|p=s" => \$port, "from|f=s" => \$from, "debug|d" => \$debug, "to|t=s" => \$to, "help|h" => \$help, ); if ( $help ) { &usage ; } if (!$server || !$from) { print "ERROR: Please specify --server, --from\n"; exit $STATES{UNKNOWN}; } if (!$to) { $to = $from; } my $EICAR = <<'EOF'; X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H* EOF my $top = MIME::Entity->build( Type => "multipart/mixed", From => $from, To => $to, Subject => "EICAR test", Data => "This is a test", ); $top->attach( Data => $EICAR, Type => "application/x-msdos-program", Encoding => "base64", ); my $smtp = new Net::SMTP( $server, Port => $port, Debug => $debug, ); if (!$smtp) { print "\n[ Error ]: amavisd-new server unreachable\n Restarting Server now..\n"; # - Restart Server # - system("/sbin/reboot -f"); exit $STATES{CRITICAL}; } $smtp->mail($from); $smtp->to($to); $smtp->data(); $smtp->datasend($top->stringify); $smtp->dataend(); my $result = $smtp->message(); $smtp->close(); if ($result =~/2.7.[01] Ok, discarded/) { #print "\n$result\n"; exit $STATES{OK}; } else { print "[ Warning ]: Respond of amavisd-new service is not as expected !\n"; print " amavisd-new returned:\n $result\n\n"; print "\n\nRestart Service amavisd-new now..\n"; # - Restart Service amavisd-new # - system("/etc/init.d/amavis", "stop"); sleep 2; system("/etc/init.d/amavis", "start"); exit $STATES{CRITICAL}; } # # - usage # sub usage { my $prog = $0; $prog =~ s#.*/([^/]+)$#$1# ; print < [-h] [-d] [-f from-address] [-t to-address] [-s server] [-p port-number] -d. --debug Makes output verbose -f EMAIL, --from EMAIL From address -h, --help Prints this helpmessage. -p PORT, --port PORT Serverport, wher AmaVis is listening. Defaults to "10024", if not given -s SERVER, --server SEVER Server, where AmaVis is running. Defaults to "127.0.0.1", if not given -t EMAIL, --to EMAIL Recipient of the Email. Defaults to the value given by --from option Example: $prog -f postmaster\@mx.warenform.de -t do-not-reply\@mx.warenform.de -s 127.0.0.1 -p 10024 ENDE exit 1 ; }