scripts/rblcheck.sh

370 lines
7.7 KiB
Bash
Raw Permalink Normal View History

2011-01-06 14:04:33 +01:00
#!/usr/bin/env bash
2011-01-06 14:21:38 +01:00
# Author: Oliver Ladner <oli@lugh.ch>
# License: LGPL
#
# Checks if given IP is listed on various DNSBL found on:
# - http://multirbl.valli.org/list/
# - http://mxtoolbox.com
# - http://www.anti-abuse.org
2011-01-06 14:04:33 +01:00
#
# Requires these commands: host, dig, awk, tr, dirname
# - We can't rely on host/dig return codes!
# Return codes:
# 0 = no listings
# 1 = listed in 1 RBL
# 10 = listed in 10 or more RBLs
2011-01-06 14:04:33 +01:00
# Define all DNSBL to test against
dnsbl=(
2013-02-12 14:56:24 +01:00
rbl.lugh.ch
0spam.fusionzero.com
0spam-killlist.fusionzero.com
combined.abuse.ch
2011-03-08 06:44:15 -08:00
drone.abuse.ch
spam.abuse.ch
httpbl.abuse.ch
2013-02-08 13:20:02 +01:00
uribl.zeustracker.abuse.ch
ipbl.zeustracker.abuse.ch
rbl.abuse.ro
uribl.abuse.ro
dnsbl.ahbl.org
ircbl.ahbl.org
rhsbl.ahbl.org
all.s5h.net
spam.dnsbl.anonmails.de
list.anonwhois.net
dnsbl.anticaptcha.net
orvedb.aupads.org
rsbl.aupads.org
l1.apews.org
l2.apews.org
aspews.ext.sorbs.net
ips.backscatterer.org
b.barracudacentral.org
bb.barracudacentral.org
list.bbfh.org
bbm.2ch.net
niku.2ch.net
bbx.2ch.net
all.ascc.dnsbl.bit.nl
all.v6.ascc.dnsbl.bit.nl
all.dnsbl.bit.nl
ipv6.all.dnsbl.bit.nl
bitonly.dnsbl.bit.nl
blacklist.netcore.co.in
rbl.blakjak.net
list.blogspambl.com
bsb.empty.us
bsb.spamlookup.net
query.bondedsender.org
plus.bondedsender.org
dnsbl.burnt-tech.com
blacklist.sci.kun.nl
whitelist.sci.kun.nl
dul.blackhole.cantv.net
hog.blackhole.cantv.net
cbl.anti-spam.org.cn
cblplus.anti-spam.org.cn
cblless.anti-spam.org.cn
cdl.anti-spam.org.cn
cml.anti-spam.org.cn
cbl.abuseat.org
bogons.cymru.com
v4.fullbogons.cymru.com
v6.fullbogons.cymru.com
origin.asn.cymru.com
origin6.asn.cymru.com
peer.asn.cymru.com
tor.dan.me.uk
torexit.dan.me.uk
ex.dnsbl.org
in.dnsbl.org
rbl.dns-servicios.com
dnsbl.ipocalypse.net
dnsbl.othello.ch
dnsbl.rv-soft.info
list.dnswl.org
vote.drbl.caravan.ru
vote.drbl.gremlin.ru
work.drbl.caravan.ru
work.drbl.gremlin.ru
dnsbl.dronebl.org
rbl.efnet.org
rbl.efnetrbl.org
tor.efnet.org
bl.emailbasura.org
fnrbl.fast.net
forbidden.icm.edu.pl
accredit.habeas.com
sa-accredit.habeas.com
hul.habeas.com
sohul.habeas.com
hostkarma.junkemailfilter.com
nobl.junkemailfilter.com
spamrbl.imp.ch
wormrbl.imp.ch
2011-01-06 14:04:33 +01:00
dnsbl.inps.de
2013-02-08 13:20:02 +01:00
dnswl.inps.de
any.dnsl.ipquery.org
backscat.dnsl.ipquery.org
netblock.dnsl.ipquery.org
relay.dnsl.ipquery.org
single.dnsl.ipquery.org
iadb.isipp.com
iadb2.isipp.com
iddb.isipp.com
wadb.isipp.com
mail-abuse.blacklist.jippg.org
dnsbl.justspam.org
dnsbl.kempt.net
spamlist.or.kr
admin.bl.kundenserver.de
schizo-bl.kundenserver.de
spamblock.kundenserver.de
worms-bl.kundenserver.de
spamguard.leadmon.net
dnsbl.madavi.de
bl.mailspike.net
rep.mailspike.net
wl.mailspike.net
z.mailspike.net
cidr.bl.mcafee.com
rbl.megarbl.net
combined.rbl.msrbl.net
images.rbl.msrbl.net
phishing.rbl.msrbl.net
spam.rbl.msrbl.net
virus.rbl.msrbl.net
web.rbl.msrbl.net
rbl.mw-internet.net
ix.dnsbl.manitu.net
wl.nszones.com
dyn.nszones.com
sbl.nszones.com
bl.nszones.com
ubl.nszones.com
rbl.orbitrbl.com
netblock.pedantic.org
spam.pedantic.org
pofon.foobar.hu
rbl.polarcomm.net
dnsbl.proxybl.org
psbl.surriel.com
whitelist.surriel.com
list.quorum.to
all.rbl.jp
dyndns.rbl.jp
short.rbl.jp
url.rbl.jp
virus.rbl.jp
rbl.schulte.org
access.redhawk.org
dnsbl.rizon.net
asn.routeviews.org
aspath.routeviews.org
dul.ru
dnsbl.rymsho.ru
rhsbl.rymsho.ru
tor.dnsbl.sectoor.de
query.senderbase.org
sa.senderbase.org
bl.score.senderscore.com
bl.shlink.org
dmm.shlink.org
dyn.shlink.org
rhsbl.shlink.org
rhswl.shlink.org
wl.shlink.org
2011-01-06 14:04:33 +01:00
dnsbl.sorbs.net
2013-02-08 13:20:02 +01:00
problems.dnsbl.sorbs.net
proxies.dnsbl.sorbs.net
relays.dnsbl.sorbs.net
safe.dnsbl.sorbs.net
nomail.rhsbl.sorbs.net
badconf.rhsbl.sorbs.net
dul.dnsbl.sorbs.net
2013-02-08 13:20:02 +01:00
zombie.dnsbl.sorbs.net
block.dnsbl.sorbs.net
escalations.dnsbl.sorbs.net
http.dnsbl.sorbs.net
misc.dnsbl.sorbs.net
smtp.dnsbl.sorbs.net
socks.dnsbl.sorbs.net
2013-02-08 13:20:02 +01:00
rhsbl.sorbs.net
spam.dnsbl.sorbs.net
2013-02-08 13:20:02 +01:00
recent.spam.dnsbl.sorbs.net
new.spam.dnsbl.sorbs.net
old.spam.dnsbl.sorbs.net
web.dnsbl.sorbs.net
2011-01-06 14:04:33 +01:00
korea.services.net
2013-02-08 13:20:02 +01:00
origin.asn.spameatingmonkey.net
backscatter.spameatingmonkey.net
badnets.spameatingmonkey.net
bl.spameatingmonkey.net
fresh.spameatingmonkey.net
fresh10.spameatingmonkey.net
fresh15.spameatingmonkey.net
netbl.spameatingmonkey.net
uribl.spameatingmonkey.net
urired.spameatingmonkey.net
bl.spamcannibal.org
dnsbl.spam-champuru.livedoor.com
bl.spamcop.net
dbl.spamhaus.org
pbl.spamhaus.org
sbl.spamhaus.org
sbl-xbl.spamhaus.org
swl.spamhaus.org
xbl.spamhaus.org
zen.spamhaus.org
feb.spamlab.com
rbl.spamlab.com
all.spamrats.com
dyna.spamrats.com
2011-01-06 14:04:33 +01:00
noptr.spamrats.com
spam.spamrats.com
2013-02-08 13:20:02 +01:00
spamsources.fabel.dk
dul.pacifier.net
bl.summersault.com
multi.surbl.org
xs.surbl.org
srn.surgate.net
dnsrbl.swinog.ch
uribl.swinog.ch
st.technovision.dk
dob.sibl.support-intelligence.net
opm.tornevall.org
spamtrap.trblspam.com
r.mail-abuse.com
q.mail-abuse.com
rbl2.triumf.ca
wbl.triumf.ca
truncate.gbudb.net
wl.trusted-forwarder.org
dnsbl-0.uceprotect.net
dnsbl-1.uceprotect.net
dnsbl-2.uceprotect.net
dnsbl-3.uceprotect.net
ubl.unsubscore.com
black.uribl.com
grey.uribl.com
red.uribl.com
white.uribl.com
free.v4bl.org
virbl.dnsbl.bit.nl
nlwhitelist.dnsbl.bit.nl
dnsbl.webequipped.com
ips.whitelisted.org
blacklist.woody.ch
uri.blacklist.woody.ch
db.wpbl.info
bl.blocklist.de
dnsbl.zapbl.net
rhsbl.zapbl.net
blackholes.five-ten-sg.com
relaytest.kundenserver.de
2011-01-06 14:04:33 +01:00
torserver.tor.dnsbl.sectoor.de
virbl.bit.nl
)
2011-01-06 14:04:33 +01:00
# No need to edit anything below this line
DNSBLCOUNT=${#dnsbl[*]}
if [ -z $1 ]; then
echo "Usage: $(basename $0) <ip-address> <fqdn>"
2011-01-06 14:04:33 +01:00
exit 1
fi
INPUT=$1
# If $INPUT is a DNS name, get IP
if [ $(echo $INPUT | grep -c '[a-z]') -gt 0 ]; then
INPUT=$(dig +short $INPUT | tail -1)
fi
LISTED=0
# Reverse an ip
function ip_reverse {
# FIXME dumb
INPUT=$(echo $INPUT | tr -s "." " ")
INPUT=$(echo $INPUT | awk '{for (i=NF;i>=1;i--) printf $i" "} END{print ""}')
OUTPUT=$(echo $INPUT | tr -s " " ".")
echo $OUTPUT
}
# Query the RBL
function check_rbl {
ARG=$1
if [ "$ARG" = "reachability" ]; then
RETURNED=$(host $a | grep -c NXDOMAIN)
if [ $RETURNED -gt 0 ]; then
echo "$a ($b) not reachable, thus ignored."
# Delete this entry from the array via id
unset dnsbl[$b]
fi
WHATSLEFT=${#dnsbl[@]}
fi
if [ "$ARG" = "node" ]; then
# dig lookup with reversed ip
QUERY=$(dig -t ANY +noauthority +noadditional +nostats $(ip_reverse).$i | grep -E -w '(status:|TXT|(A|CNAME))')
QUERY_END=$(echo $QUERY | awk '{ print $NF }')
case $QUERY in
*NXDOMAIN*)
#echo "Not in $i"
;;
#*127.0.0.2)
# echo "$(ip_reverse) LISTED in $i"
# ;;
# Almost all DNSBLs got a TXT record for listed IPs, we want these
*TXT*)
REASON_REMOTE=$(echo $QUERY | grep TXT | cut -d'"' -f2 | head -1)
echo "LISTED in $i ($REASON_REMOTE) "
LISTED=$(($LISTED+1))
;;
# For those DNSBLs with no TXT record, just indicate the listing
*)
echo "LISTED in $i (no reason provided)"
LISTED=$(($LISTED+1))
;;
esac
fi
}
echo -e "Mailserver:\t$INPUT ($(dig -t TXT +short +noauthority +noadditional +nostats $(ip_reverse).zz.countries.nerd.dk | grep '[a-z]' ))"
2011-01-06 14:04:33 +01:00
# dnsbl array counter
b=-1
# First check if the RBL is reachable
for a in "${dnsbl[@]}"; do
b=$(($b+1))
check_rbl reachability
done
echo -e "DNSBLs:\t\t$DNSBLCOUNT ($WHATSLEFT reachable)"
# Then query
for i in "${dnsbl[@]}"; do
check_rbl node
done
PERC=$(echo "scale=2; ($LISTED / $WHATSLEFT) * 100" | bc)
2011-01-06 14:04:33 +01:00
echo -e "Listings:\t$LISTED ($PERC %)"
# Set return code
if [ $LISTED -gt 0 ]; then
if [ $LISTED -eq 1 ]; then
exit 1
elif [ $LISTED -ge 10 ]; then
exit 10
fi
else
exit 0
2011-01-06 14:04:33 +01:00
fi