Archivo etiqueta spam
Creando un Script en PHP para chequear IPs en Listas negras (Blacklist)
Por admin - Firewall, Linux, PHP, Programación - Lunes, 14 septiembre 2009
Una lista negra (black list) es una lista donde se registran direcciones IPs que generan SPAM ya sea de forma voluntaria o involuntaria. Estas listas aunque las hay de pago suelen ser libres y cualquiera puede añadir una IP inocente de manera malintencionada por lo que también podemos solicitar ser removidos de ellas si hemos sido incluidos.
Tanto chequear diferentes tipos de webs con listas negras he decidido crear este pequeño Script en PHP que nos será de utilidad ya que comprueba una lista personalizada de Black List y nos devuelve el resultado en pantalla o a un email si se lo indicamos. Es totalmente personalizable y muy sencillo de modificar.
if ($_POST['ip']) { $ip = $_POST['ip']; }
function blacklist($ip) {
$dnsbl=array("b.barracudacentral.org"=>"",
"bl.deadbeef.com"=>"",
"bl.emailbasura.org"=>"",
"bl.spamcannibal.org"=>"",
"bl.spamcop.net"=>"Blacklist de Spamcop",
"blackholes.five-ten-sg.com"=>"",
"blacklist.woody.ch"=>"",
"bogons.cymru.com"=>"",
"cbl.abuseat.org"=>"Composite Blocking List)",
"cdl.anti-spam.org.cn"=>"",
"combined.abuse.ch"=>"",
"combined.rbl.msrbl.net"=>"",
"db.wpbl.info"=>"",
"dnsbl-1.uceprotect.net"=>"",
"dnsbl-2.uceprotect.net"=>"",
"dnsbl-3.uceprotect.net"=>"lista de pago",
"dnsbl.ahbl.org"=>"",
"dnsbl.cyberlogic.net"=>"",
"dnsbl.inps.de"=>"",
"dnsbl.njabl.org"=>"",
"dnsbl.sorbs.net"=>"rangos dinámicos",
"drone.abuse.ch"=>"",
"drone.abuse.ch"=>"",
"duinv.aupads.org"=>"",
"dul.dnsbl.sorbs.net"=>"rangos dinámicos",
"dul.ru"=>"",
"dyna.spamrats.com"=>"rangos dinámicos",
"dynip.rothen.com"=>"",
"fl.chickenboner.biz"=>"",
"http.dnsbl.sorbs.net"=>"",
"images.rbl.msrbl.net"=>"",
"ips.backscatterer.org"=>"",
"ix.dnsbl.manitu.net"=>"",
"korea.services.net"=>"Block Asian spam (Korea)",
"misc.dnsbl.sorbs.net"=>"",
"noptr.spamrats.com"=>"",
"ohps.dnsbl.net.au"=>"",
"omrs.dnsbl.net.au"=>"",
"orvedb.aupads.org"=>"",
"osps.dnsbl.net.au"=>"",
"osrs.dnsbl.net.au"=>"",
"owfs.dnsbl.net.au"=>"",
"owps.dnsbl.net.au"=>"",
"phishing.rbl.msrbl.net"=>"",
"probes.dnsbl.net.au"=>"",
"proxy.bl.gweep.ca"=>"",
"proxy.block.transip.nl"=>"",
"psbl.surriel.com"=>"Passive Spam Block List",
"rbl.interserver.net"=>"",
"rdts.dnsbl.net.au"=>"",
"relays.bl.gweep.ca"=>"",
"relays.bl.kundenserver.de"=>"",
"relays.nether.net"=>"",
"residential.block.transip.nl"=>"rangos dinámicos",
"ricn.dnsbl.net.au"=>"",
"rmst.dnsbl.net.au"=>"",
"short.rbl.jp"=>"",
"smtp.dnsbl.sorbs.net"=>"",
"socks.dnsbl.sorbs.net"=>"",
"spam.abuse.ch"=>"",
"spam.dnsbl.sorbs.net"=>"",
"spam.rbl.msrbl.net"=>"",
"spam.spamrats.com"=>"",
"spamlist.or.kr"=>"",
"spamrbl.imp.ch"=>"",
"t3direct.dnsbl.net.au"=>"",
"tor.ahbl.org"=>"",
"tor.dnsbl.sectoor.de"=>"",
"torserver.tor.dnsbl.sectoor.de"=>"",
"ubl.lashback.com"=>"Tracking Unsubscribe Abuse",
"ubl.unsubscore.com"=>"",
"virbl.bit.nl","virus.rbl.jp"=>"",
"virus.rbl.msrbl.net"=>"",
"web.dnsbl.sorbs.net"=>"",
"wormrbl.imp.ch"=>"",
"sbl.spamhaus.org"=>"Spamhaus Block List",
"xbl.spamhaus.org"=>"Spamhaus Exploits Block List",
"pbl.spamhaus.org"=>"Spamhaus Policy Block List",
"zen.spamhaus.org"=>"Spamhaus (Combinación Spamhaus)",
"zombie.dnsbl.sorbs.net"=>"",
"1.apews.org"=>"Anon. Postmasters Early Warning System",
"2.apews.org"=>"Anon. Postmasters Early Warning System",
"bulk.rhs.mailpolice.com"=>"domains",
"porn.rhs.mailpolice.com"=>"pornograf sites",
"fraud.rhs.mailpolice.com"=>"phising",
"block.rhs.mailpolice.com"=>"bulk y fraud",
"dynamic.rhs.mailpolice.com"=>"dinamicas",
"adv.rhs.mailpolice.com"=>"email marketing",
"webmail.rhs.mailpolice.com"=>"webmails services",
"adult.rhs.mailpolice.com"=>"adult sites, blogs etc",
"redir.rhs.mailpolice.com"=>"sites redirigidos");
if ($_POST['ip']) {
$parte=explode(".",$ip);
$rip=$parte[3].".".$parte[2].".".$parte[1].".".$parte[0];
foreach ($dnsbl as $key=>$value){
if (checkdnsrr($rip.".".$key . '.',"A")) { $lista[]=$key." - ".$value; }
}
echo "<ul>";
foreach ($lista as $server){
echo "<li>".$server."</li>";
$bl .= $server."\n";
}
echo "</ul>";
# ---------------------------------------------
# - enviamos un reporte a un email.
if ($_POST['report'] == "on") {
$email = "su@email";
$headers = "MIME-Version: 1.0\n";
$headers .= "Content-type: text/plain; charset=iso-8859-1\n";
$headers .= "From: $email \r\n";
$asunto = "Report Blacklist: $ip";
$txt = "La ip $ip esta listada en:\n\n".$bl;
mail($email, $asunto, $txt, $headers);
} # fin reporte
# ---------------------------------------------
} # fin if
} // fin funcion listas negras
if ($_POST['ip']) {
echo "Su IP: <strong>".getenv('REMOTE_ADDR')." </strong>esta en las siguientes listas negras:<p />";
echo blacklist($ip);
}
El formulario en HTML quedaría de la siguiente forma:
<form method="post"> <input name="ip" type="text" /> <input name="report" type="checkbox" /> Enviar reporte por email. <input type="submit" value="Comprobar" /> </form>
Para una demo del script:
http://www.artegrafico.net/laboratorio/php/blacklist.php
Shell Script para incluir/actualizar “drop.lasso” de Spamhaus usando iptables en Gentoo Linux
Este es un pequeño Shell Script para añadir y actualizar rangos de IPs de la lista drop.lasso de Spamhaus.org y que ha determinado como principales emisores de SPAM en Internet.
# declaramos las variables que vamos a usar.
IPTABLES="/sbin/iptables"
SPAM_URL_spamhaus="http://www.spamhaus.org/drop/drop.lasso"
SPAM_FILE_TMP="/home/backup/scripts/spamhaus.ips"
SPAM_TABLE_spamhaus="Spamhaus"
SPAM_IPS=$(cat $SPAM_FILE_TMP | grep -iE "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" | awk -F\; '{ print $1 }')
# borramos el fichero de ips anterior si existe.
rm -f $SPAM_FILE_TMP
# descargamos la ultima actualización realizada por spamhaus.org.
# -q no muestra ningún log de registro | -c para continuar la descarga si se cortara.
wget -qc $SPAM_URL_spamhaus -O $SPAM_FILE_TMP
# creamos las lista de ips.
$IPTABLES -n -L INPUT | grep -q "$SPAM_TABLE_spamhaus"
if [ $? -eq 0 ] ; then
# borramos todas las reglas que contiene la cadena spamhaus.
$IPTABLES -F $SPAM_TABLE_spamhaus
else
# crea una nueva cadena llamada spamhaus si no existe.
$IPTABLES -N $SPAM_TABLE_spamhaus
# añade la regla spamhaus para todo el tráfico entrante.
$IPTABLES -A INPUT -j $SPAM_TABLE_spamhaus
fi
# con RETURN salta el objetivo si existe.
$IPTABLES -A $SPAM_TABLE_spamhaus -j RETURN
# recorremos la lista de IPs para ir incluyéndolas una por una a iptables.
for IP in $SPAM_IPS
do
# inserta una nueva regla a la cadena con la opciones especificadas.
# -p all (bloquea el trafico recibido a través de los protocolos icmp, tcp, udp)
# -s ip (ip origen del paquete)
# -j DROP (elimina el paquete recibido)
$IPTABLES -I $SPAM_TABLE_spamhaus -p all -s $IP -j DROP
done
“El Shell Script ha sido probado correctamente en Gentoo y Fedora Core 5″
Como veis es bastante sencillo y probablemente mejorable … luego solo tendríamos que añadirlo a nuestro crontab para que se ejecute periódicamente.
Descargar el ejemplo.
Qmail+Procmail+SpamAssassin+Qmail-Scanner en Gentoo Linux
Basándome en la guías de OVH y otra documentación he creado esta pequeña ayuda para poder realizar de forma sencilla y amigable las modificaciones en nuestra Release 2 sobre Gentoo Linux. Lo primero de todo es instalar el procmail que es el programa que se encargará de filtrar todo el correo de entrada y que nos permitirá crear reglas y acciones para dicho filtrado. En Gentoo gracias al comando emerge es bastante sencillo.
emerge procmail
Una vez instalado tenemos que crear el fichero /etc/procmailrc si este no existiera. Este fichero es muy importante ya que contiene las configuraciones, reglas de filtrado y acciones a realizar al recibir los mensajes. Mi fichero procmailrc funcionando:
LOGFILE=/var/log/procmail.log VERBOSE=on DROPPRIVS=yes # spamassassin solo chequeará los mensajes menores de 250KB. :0fw: spamassassin.lock * < 256000 |/usr/bin/spamc -f # Aquí indicamos que debemos hacer con el SPAM. # Si descomentamos /dev/null serán eliminados. :0H: * ^X-Spam-Status: Yes #/dev/null # Una vez hecho esto direccionamos el correo a su buzón. :0w |/home/vpopmail/bin/vdelivermail '' bounce-no-mailbox
bien … ahora procedemos a crear nuestro fichero de log donde se guardarán los mensajes que han sido filtrados por procmail y le otorgamos permisos de escritura.
touch /var/log/procmail.log chmod 777 /var/log/procmail.log
una vez hecho esto procedemos a cambiar el fichero de configuracion .qmail-default de cada uno de los dominios en los que deseamos usar las reglas de filtrado e incluimos la siguiente linea:
vi /home/vpopmail/domains/dominio.com/.qmail-default | /var/qmail/bin/preline /usr/bin/procmail -pm /etc/procmailrc
La configuración del spamassassin la podemos localizar en:
/etc/mail/spamassassin/local.cf
He incluido la siguientes reglas para marcar los mensajes de SPAM:
# nos envia los mensajes marcados y su puntuación rewrite_header Subject *****SPAM*****(_SCORE_)** # nos envía el mensaje de SPAM como adjunto, # y un análisis de todas las puntuaciones que ha recibido. report_safe 1 # la puntuación mínima del mensaje para que sea tratado como SPAM. required_score 5.0
Ahora solo tenemos que reiniciar el Qmail y el spamassasin.
/etc/init.d/qmail restart /etc/init.d/spamd reload
He tenido que comprobar que el Qmail-Scanner está funcionando correctamente. Para ello me creo una redirección de mi dominio local o localhost que es a donde irán todos los correos escaneados por el Qmail-Scanner:
vi /home/vpopmail/domains/localhost/.qmail-default #incluir esta linea con su dirección de email. &nospam@micorreo.com
de esta manera también recibo los mensajes de aviso de virus, spam, etc que ha procesado el qmail scanner … Para monitorizar en tiempo real el log de mensajes que voy recibiendo solo debo usar el comando tail -f y esperar la recepción o envío de nuevos mensajes.
tail -f /var/log/qmail/current
Guías y otra documentación utilizada:
http://guias.ovh.es/Release2Procmail
http://www.freebsd.org/…/mail-procmail.html