Como todo mundo ya conoce y a vivido en carne propia el molesto spam y el día de hoy tuve otro encuentro cercano con un cliente listado en RBL's, decidí comenzar en la búsqueda de como automatizar la verificación de determinados servidores en las listas negras mas populares.
Me encontré con este script que si bien es de mi utilidad no llenaba todos los requisitos que necesitaba, así que le hice ciertas modificaciones para que se adaptará a mis necesidades.
#!/usr/bin/env bash
DEBUG="$1"
LOG="`mktemp`"
SRV="correo.prueba.org.co mail.example.com.co"
# RBL list from http://www.anti-abuse.org/multi-rbl-check/
RBL="bl.spamcop.net
cbl.abuseat.org
b.barracudacentral.org
dnsbl.sorbs.net
http.dnsbl.sorbs.net
dul.dnsbl.sorbs.net
misc.dnsbl.sorbs.net
smtp.dnsbl.sorbs.net
socks.dnsbl.sorbs.net
spam.dnsbl.sorbs.net
web.dnsbl.sorbs.net
zombie.dnsbl.sorbs.net
dnsbl-1.uceprotect.net
pbl.spamhaus.org
sbl.spamhaus.org
xbl.spamhaus.org
zen.spamhaus.org
bl.spamcannibal.org
psbl.surriel.com
ubl.unsubscore.com
dnsbl.njabl.org
combined.njabl.org
rbl.spamlab.com
dnsbl.ahbl.org
ircbl.ahbl.org
dyna.spamrats.com
noptr.spamrats.com
spam.spamrats.com
cbl.anti-spam.org.cn
cdl.anti-spam.org.cn
dnsbl.inps.de
drone.abuse.ch
httpbl.abuse.ch
dul.ru
korea.services.net
short.rbl.jp
virus.rbl.jp
spamrbl.imp.ch
wormrbl.imp.ch
virbl.bit.nl
rbl.suresupport.com
dsn.rfc-ignorant.org
ips.backscatterer.org
spamguard.leadmon.net
opm.tornevall.org
netblock.pedantic.org
multi.surbl.org
ix.dnsbl.manitu.net
tor.dan.me.uk
rbl.efnetrbl.org
relays.mail-abuse.org
blackholes.mail-abuse.org
rbl-plus.mail-abuse.org
dnsbl.dronebl.org
access.redhawk.org
db.wpbl.info
rbl.interserver.net
query.senderbase.org
bogons.cymru.com
csi.cloudmark.com"
for server in $SRV
do
lip=$(dig +short $server)
for ip in $lip
do
rip=$(echo $ip|awk -F"." '{for(i=NF;i>0;i--) printf i!=1?$i".":"%s",$i}')
echo $server $rip
for rbl in $RBL
do
if [ ! -z "$DEBUG" ]
then
echo "testing $server ($ip) against $rbl"
fi
result=$(dig +short $rip.$rbl)
if [ ! -z "$result" ]
then
echo "$server ($ip) esta en $rbl con codigo $result" >> $LOG
echo "$server ($ip) devolvió el siguiente mensaje $(dig +short -t txt $rip.$rbl)" >> $LOG
echo "" >> $LOG
fi
if [[ ! -z "$DEBUG" && -z "$result" ]]
then
echo "\`->negative"
fi
done
done
done
if [ ! -z "$(cat $LOG)" ] ; then
cat $LOG | mail -s "Spam en uno de nuestros clientes" admin@example.com.co
fi
rm $LOG
Las modificaciones mas relevantes fueron el hecho de que en caso que un nombre de los servidores a verificar tuviese mas de una ip estas también fuesen verificadas y el envío de la notificación a través de correo electrónico en caso de que encuentre algún servidor listado.
Eso es todo por el momento, agradezco los comentarios y mejoras que se le puedan hacer al script.