#!/usr/bin/perl
#
# Quick perl script to check spamhaus to see if we're blocked again, see https://rt.wilderness.org.au:444/rt/Ticket/Display.html?id=73259
#
# This script returns values consistent with the nagios return code specification at http://nagiosplug.sourceforge.net/developer-guidelines.html#AEN76
# 0 OK The plugin was able to check the service and it appeared to be functioning properly
# 1 Warning The plugin was able to check the service, but it appeared to be above some "warning" threshold or did not appear to be working properly
# 2 Critical The plugin detected that either the service was not running or it was above some "critical" threshold
# 3 Unknown Invalid command line arguments were supplied to the plugin or low-level failures internal to the plugin
# (such as unable to fork, or open a tcp socket) that prevent it from performing the specified operation. Higher-level errors
# (such as name resolution errors, socket timeouts, etc) are outside of the control of plugins and should generally NOT be reported as UNKNOWN states.
use strict;
my $our_external_ip = "xxx.xxx.xxx.xxx";
my $exit_value=3;
# run the wget command and save it's output to the $results variable.
my $results=`/usr/bin/wget --random-wait -U mozilla -O /tmp/spamcheck.dat -o /tmp/spamcheck.log http://www.spamhaus.org/query/ip/$our_external_ip && grep $our_external_ip /tmp/spamcheck.dat`;
chomp($results);
#print $results."\n";
# check to see if we score RED ie; we're on a blocklist
if ($results =~ m/red/) {
print "ALERT: Block found. Check http://www.spamhaus.org/query/ip/$our_external_ip\n";
$exit_value=2;
}
# if we got this far, we saw no RED. Check to see we at least get one GREEN.
elsif ($results =~ m/green/) {
print "OK; We got a green and no red.\n";
$exit_value=0;
}
# ALERT: We got no red AND no green; therefore there bust be some issue somewhere!
else {
print "ALERT: No valid return codes detected; page-load/dns/internet/scripting issue?\n";
$exit_value=3;
}
#print "\nPerl hopes it's returning a \$exit_value of $exit_value\n\n";
exit $exit_value;
note that /tmp/spamcheck.* will need to be globally writable.
That then results in a nice web gui telling us all isn't well (again). Happy with my work i told my boss who said "i don't like it, i want it to say OK", to which i replied, "i can do that ;)", and now you can too. Happy automation :)

No comments:
Post a Comment