Imported Upstream version 1.10pre8b
This commit is contained in:
parent
8b6b3ca881
commit
b5012c41b3
9 changed files with 1172 additions and 964 deletions
|
@ -3,9 +3,6 @@ Directory contents:
|
|||
- lograte.sh [OPTIONS] <logfile>
|
||||
generates per minute stats for generic syslog files
|
||||
|
||||
- postfwd-rblcheck.pl <hostname or ip> [<hostname or ip> ...]
|
||||
queries a bunch of dnsbls for the given host(s)
|
||||
|
||||
- request.sample
|
||||
a sample policy delegation request. you may test your postfwd config with
|
||||
postfwd -f <configfile> request.sample
|
||||
|
|
|
@ -1,174 +0,0 @@
|
|||
#!/usr/bin/perl -T -w
|
||||
#
|
||||
# Tool to query a bunch of dnsbls. Usage:
|
||||
#
|
||||
# postfwd-rblcheck.pl <hostname or ip> [<hostname or ip> ...]
|
||||
#
|
||||
# by JPK
|
||||
|
||||
|
||||
use Net::DNS::Async;
|
||||
use strict;
|
||||
|
||||
# length of screen
|
||||
my $mylen = 79;
|
||||
|
||||
# RBLs (ip based)
|
||||
my @rbls = qw(
|
||||
query.bondedsender.org
|
||||
exemptions.ahbl.org
|
||||
spf.trusted-forwarder.org
|
||||
list.dnswl.org
|
||||
zz.countries.nerd.dk
|
||||
zen.spamhaus.org
|
||||
bl.spamcop.net
|
||||
list.dsbl.org
|
||||
multihop.dsbl.org
|
||||
unconfirmed.dsbl.org
|
||||
combined.njabl.org
|
||||
dnsbl.sorbs.net
|
||||
dnsbl.ahbl.org
|
||||
ix.dnsbl.manitu.net
|
||||
dnsbl-1.uceprotect.net
|
||||
dnsbl-2.uceprotect.net
|
||||
dnsbl-3.uceprotect.net
|
||||
ips.backscatterer.org
|
||||
sorbs.dnsbl.net.au
|
||||
korea.services.net
|
||||
blackholes.five-ten-sg.com
|
||||
cbl.anti-spam.org.cn
|
||||
cblplus.anti-spam.org.cn
|
||||
cblless.anti-spam.org.cn
|
||||
bogons.cymru.com
|
||||
dynamic.tqmrbl.com
|
||||
relays.tqmrbl.com
|
||||
clients.tqmrbl.com
|
||||
hostkarma.junkemailfilter.com
|
||||
);
|
||||
|
||||
# RHSBLs (domain based)
|
||||
my @rhsbls = qw(
|
||||
rhsbl.sorbs.net
|
||||
rhsbl.ahbl.org
|
||||
multi.surbl.org
|
||||
dsn.rfc-ignorant.org
|
||||
abuse.rfc-ignorant.org
|
||||
whois.rfc-ignorant.org
|
||||
bogusmx.rfc-ignorant.org
|
||||
blackhole.securitysage.com
|
||||
ex.dnsbl.org
|
||||
rddn.dnsbl.net.au
|
||||
block.rhs.mailpolice.com
|
||||
dynamic.rhs.mailpolice.com
|
||||
dnsbl.cyberlogic.net
|
||||
hostkarma.junkemailfilter.com
|
||||
);
|
||||
|
||||
# async dns object
|
||||
my $DNS = new Net::DNS::Async ( QueueSize => 100, Retries => 3, Timeout => 20 );
|
||||
our %RBLres = ();
|
||||
|
||||
# async dns callback method
|
||||
sub callback {
|
||||
my $myresponse = shift;
|
||||
my $query = ''; my $result = '';
|
||||
|
||||
# get query
|
||||
if ( defined $myresponse ) {
|
||||
foreach ($myresponse->question) {
|
||||
next unless (($_->qtype eq 'A') or ($_->qtype eq 'TXT'));
|
||||
$query = $_->qname;
|
||||
};
|
||||
|
||||
# get answer and fill result hash
|
||||
if ( defined $query ) {
|
||||
foreach ($myresponse->answer) {
|
||||
if ($_->type eq 'A') {
|
||||
$result = $_->address;
|
||||
$query ||= ''; $result ||= '';
|
||||
$RBLres{$query}{result} = $result;
|
||||
$RBLres{$query}{end} = time;
|
||||
} elsif ($_->type eq 'TXT') {
|
||||
$RBLres{$query}{text} = join(" ", $_->char_str_list());
|
||||
$RBLres{$query}{end} = time;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# main, parse argument list
|
||||
foreach (@ARGV) {
|
||||
my $query = $_;
|
||||
my $now = time;
|
||||
my @lookups = ();
|
||||
my $name = my $addr = my $res = 'unknown';
|
||||
my $rblcount = my $rhlcount = 0;
|
||||
|
||||
# clear result hash
|
||||
%RBLres = ();
|
||||
|
||||
# lookup hostname or ip address, remove localpart if email address
|
||||
if ($query =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) {
|
||||
$addr = $query;
|
||||
$name = $res
|
||||
if ( defined($res = gethostbyaddr (pack ('C4', (split /\./, $addr)), 2)) );
|
||||
} else {
|
||||
$name = ($query =~ /@([^@]+)$/) ? $1 : $query;
|
||||
$addr = ( join ".", (unpack ('C4', $res)) )
|
||||
if ( defined ($res = gethostbyname ($name.".")) );
|
||||
};
|
||||
|
||||
# header
|
||||
print "\n", "=" x $mylen, "\n";
|
||||
print "QUERY: ", $query, " NAME: ", $name, " ADDR: ", $addr, "\n";
|
||||
|
||||
# prepare rbl lookups
|
||||
unless ($addr eq 'unknown') {
|
||||
$addr = join ".", reverse split /\./, $addr;
|
||||
foreach my $rbl (@rbls) {
|
||||
$RBLres{$addr.".".$rbl}{query} = $rbl;
|
||||
$RBLres{$addr.".".$rbl}{type} = 'RBL';
|
||||
$RBLres{$addr.".".$rbl}{start} = time;
|
||||
push @lookups, $addr.".".$rbl;
|
||||
#print "query ", $RBLres{$addr.".".$rbl}{query}, " for ", $addr.".".$rbl, "\n";
|
||||
};
|
||||
};
|
||||
|
||||
# prepare rhsbl lookups
|
||||
unless ($name eq 'unknown') {
|
||||
foreach my $rhsbl (@rhsbls) {
|
||||
$RBLres{$name.".".$rhsbl}{query} = $rhsbl;
|
||||
$RBLres{$name.".".$rhsbl}{type} = 'RHSBL';
|
||||
$RBLres{$name.".".$rhsbl}{start} = time;
|
||||
push @lookups, $name.".".$rhsbl;
|
||||
#print "name ", $RBLres{$name.".".$rhsbl}{query}, " for ", $name.".".$rhsbl, "\n";
|
||||
};
|
||||
};
|
||||
|
||||
# perform lookups
|
||||
map { $DNS->add (\&callback, $_) } @lookups;
|
||||
map { $DNS->add (\&callback, $_, 'TXT') } @lookups;
|
||||
$DNS->await();
|
||||
|
||||
# evaluate results
|
||||
foreach $query (sort keys %RBLres) {
|
||||
if ($query and (defined $RBLres{$query}{result})) {
|
||||
print " ", "-" x ($mylen - 4), "\n";
|
||||
printf " listed on %s:%s, result: %s, time: %ds\n %s\n",
|
||||
$RBLres{$query}{type},
|
||||
$RBLres{$query}{query}, $RBLres{$query}{result},
|
||||
($RBLres{$query}{end} - $RBLres{$query}{start}),
|
||||
((defined $RBLres{$query}{text}) ? "\"".$RBLres{$query}{text}."\"" : '<undef>');
|
||||
$rblcount++ if $RBLres{$query}{type} eq 'RBL';
|
||||
$rhlcount++ if $RBLres{$query}{type} eq 'RHSBL';
|
||||
};
|
||||
};
|
||||
|
||||
# footer
|
||||
print " ", "-" x ($mylen - 4), "\n";
|
||||
printf "%d of %d RBLs, ", $rblcount, $#rbls if ($rblcount > 0);
|
||||
printf "%d of %d RHSBLs, ", $rhlcount, $#rhsbls if ($rhlcount > 0);
|
||||
printf "Finished after %d seconds\n", (time - $now);
|
||||
print "=" x $mylen, "\n\n";
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue