Tutoriales y Manuales
Entradas Mensuales
-
▼
2024
(Total:
1090
)
- ► septiembre (Total: 50 )
-
▼
marzo
(Total:
123
)
- Encuentran puerta trasera en biblioteca XZ en Linu...
- Twitter ha perdido a casi el 25% de sus usuarios
- Los trucos para acelerar rápida y fácilmente tu Ra...
- MSI SPATIUM M580 FROZR, el SSD PCIe 5.0 con hasta ...
- Copilot de Microsoft se ejecutará de forma local e...
- Construyen la cámara más rápida del mundo: 156,3 b...
- Investigadores belgas han estado entrenando una IA...
- "Es como Amazon en esteroides": cómo funciona Temu...
- Robo de cuentas de Apple mediante bombardeo MFA y ...
- Android 15 permitirá compartir la señal de audio v...
- Samsung 990 EVO vs PRO: comparación y diferencias ...
- WhatsApp mejorará su editor de fotos con funciones...
- El trazado de rayos de próxima generación mejorará...
- Microsoft publica un parche de emergencia para los...
- Europa investiga a Apple, Amazon, Meta y Google po...
- China prohíbe el uso de CPU AMD e Intel en PC gube...
- Las operadoras Españolas aún no han recibido la or...
- Vulnerabilidad incorregible en los procesadores Ap...
- Desmantelan los servidores en Alemania del mercado...
- Continúan los anuncios falsos de Broncano y Sobera...
- MacOS 14.4 causa el caos, los programas se cierran...
- Detenidas ocho personas por almacenar y distribuir...
- Android 15 permitirá enviar y recibir SMS vía saté...
- Estados Unidos demanda a Apple por crear un monopo...
- Web del MIT encuentra la IA que necesites
- Vídeo de Nvidia es el primero donde la IA apunta d...
- Cinco detenidos por robar 3,5 millones de euros co...
- La basura electrónica crece más rápido de lo que p...
- Loop DoS: nuevo ataque de DDoS basado en UDP
- Un grave fallo de seguridad del gobierno francés e...
- Microsoft anuncia Office 2024
- Francia multa a Google con 250 millones de euros p...
- Microsoft contrata a Mustafa Suleyman, cofundador ...
- Elon Musk reconoce tomar ketamina para salir de un...
- La inteligencia artificial superará a los humanos ...
- Descubren cómo romper la seguridad de ChatGPT para...
- Tesla pierde ya 600.000 millones en bolsa y sus pr...
- Confirman la condena del informático que dejó una ...
- Hackean a jugadores profesionales de ‘Apex Legends’
- YouTube avisará si un video realista fue creado co...
- NVIDIA presenta Blackwell GB200, su nuevo “superch...
- Llegan los filtros de belleza de Google Meet a su ...
- Sony PlasyStation PS5 Pro
- Historia de las tarjetas gráficas: los inicios de ...
- Detenidos el padre y el novio de una menor por gra...
- Vulnerabilidad de Kubernetes que permite la adquis...
- VLC supera los 5.000 millones de descargas entre e...
- Microsoft trabaja en una función para que escribas...
- Fluorescentes y luces de mala calidad pueden bajar...
- En España los ilustradores exigen a las editoriale...
- Asus Zenfone 11 Ultra
- WebTunnel Bridge, nueva herramienta de Tor contra ...
- Historia del nacimiento de Kazaa después del éxito...
- WPA3: el protocolo de seguridad más seguro para tu...
- Google tiene un agente de IA que aprende a jugar a...
- Cómo compartir archivos confidenciales por interne...
- En España un joven de Murcia robó 40 millones de m...
- Speedometer 3 es la nueva versión del benchmark má...
- OpenAI presenta Sora, la IA que crea vídeos ultrar...
- El Parlamento Europeo aprueba la Ley de inteligenc...
- Denuncian estafas para vender criptomonedas que us...
- ChatGPT, Claude 3 o Gemini Ultra: ¿cuál es la mejo...
- El móvil más barato de Xiaomi llega a España: Redm...
- Más de 12 millones de claves y secretos filtrados ...
- Taringa dice adiós tras 20 años de historia
- Airbnb prohíbe las cámaras de seguridad en interiores
- Bobby Kotick (Activision) quiere comprar TikTok co...
- Distrobox crea imágenes y ejecuta en contenedores ...
- Un informante de Boeing que señaló fallos de segur...
- Elon Musk va a por ChatGPT: su chatbot Grok será d...
- Mejores sistemas operativos para dispositivos NAS
- Actualizaciones en Windows 11 sin reiniciar
- Olivia Casta, la modelo que no existe
- Las ciberestafas ya son el segundo delito más denu...
- Donald Trump se opone al bloqueo de TikTok en EE. UU.
- Aumenta el uso de malware en ficheros PDF
- Microsoft confirma que está bajo el ataque de un g...
- Firefly llega a Adobe Express para Android e iOS
- Ciberdelincuentes aprovechan vulnerabilidades 0-da...
- Fallece Akira Toriyama, creador de series míticas ...
- Alguien se enfadó tanto con que el emulador de Swi...
- Nothing entra en la gama media con el Phone 2A, di...
- Actualizaciones críticas para VMware ESXi, Worksta...
- Microsoft y OpenAI publican una investigación conj...
- Filtrados millones de códigos de verificación de G...
- Un ingeniero de Microsoft advierte que la intelige...
- Haiper, la alternativa gratuita a Sora que mete mi...
- HBO Max prohibirá "enérgicamente" compartir cuentas
- OpenAI tacha de hipócrita a Elon Musk: quería el c...
- Apple trabaja en un MacBook plegable de 20 pulgada...
- Apple cancela la cuenta de desarrollador de Epic G...
- AntiSPAM con SpamAssassin
- En España será ilegal fotocopiar el DNI (Documento...
- Worldcoin ya es ilegal en España: la AEPD bloquea ...
- Vulnerabilidades en los paquetes de software de có...
- La Casa Blanca pidió a la industria que dejara de ...
- Windows 11 abandona el subsistema de apps para And...
- suyu: Yuzu resurge de sus cenizas en otra app sin ...
- Truco para mejorar el rendimiento del Explorador ...
- Claude 3: la nueva IA capaz de superar a GPT-4 y G...
-
►
2023
(Total:
710
)
- ► septiembre (Total: 65 )
-
►
2022
(Total:
967
)
- ► septiembre (Total: 72 )
-
►
2021
(Total:
730
)
- ► septiembre (Total: 56 )
-
►
2020
(Total:
212
)
- ► septiembre (Total: 21 )
-
►
2019
(Total:
102
)
- ► septiembre (Total: 14 )
-
►
2017
(Total:
231
)
- ► septiembre (Total: 16 )
-
►
2016
(Total:
266
)
- ► septiembre (Total: 38 )
-
►
2015
(Total:
445
)
- ► septiembre (Total: 47 )
-
►
2014
(Total:
185
)
- ► septiembre (Total: 18 )
-
►
2013
(Total:
100
)
- ► septiembre (Total: 3 )
-
►
2011
(Total:
7
)
- ► septiembre (Total: 1 )
Blogroll
Etiquetas
Entradas populares
-
Después de ver qué es una vCPU y la diferencia entre núcleos (cores) e hilos en los procesadores, pasamos a explicar toda la nomenclatura d...
-
iperf3 es la última versión del popular programa iperf para medir el ancho de banda entre dos o más equipos en red local o Internet . Es...
-
A finales del mes de agosto hablábamos de que los legisladores estadounidense habían solicitado la investigación de TP-Link . Y así, ya ten...
AntiSPAM con SpamAssassin
El filtro antispam SpamAssassin identifica los mensajes spam de entre los emails enviados a buzones de correo. SpamAssassin es compatible con Postfix, Sendmail, Dovecot y con Panales de control como cPanel, Plesk, etc. Spamassassin es bastante bueno detectando correo basura, pero vamos a configurarlo para hacerlo el mejor.
Primero, vamos a describir lo que vamos a hacer:
- Instalar spamassassin, y configurarlo para comprobar si cada mensaje entrante es spam. Los mensajes estarán marcados, tanto en sus cabeceras como en el asunto del mensaje.
- Hacer que spamassassin pueda utilizar varias configuraciones: de usuario, de dominio, o global, en ese orden, así un usuario podrá cambiar algunas propiedades sin afectar a los demás.
- SpamAssassin puede utilizar filtros bayesianos, o lo que es lo mismo, aprende a detectar qué es spam y qué no, por lo que periodicamente vamos a recorrer las bandejas de correo basura de nuestros usuarios para marcar los mensajes sospechosos. Eso sí, cada usuario tendrá sus datos de forma única.
- Instalar sieve y configurar scripts para hacer que el correo basura se mueva automáticamente a la carpeta destinada para tal fin.
Vamos a almacenar los datos de spamassassin (configuración y datos del filtro bayesiano) en nuestra base de datos MySQL. Podríamos usar también postgreSQL o SQLite, pero ya que tenemos una MySQL, vamos a aprovecharla.
Primero, instalaremos los programas necesarios (spamassassin, sieve y algunos motones antispam en línea, podemos quitarlos si queremos, pero agilizarán el proceso):
$ sudo apt-get install spamassassin mailutils razor pyzor
Ahora, vamos a mirar los ficheros de configuración, empezando por /etc/default/spamassassin (no escribiremos el fichero completo, sólo las líneas que debemos cambiar):
# Change to one to enable spamd
ENABLED=1
OPTIONS="--create-prefs --max-children 5 --helper-home-dir -q -x -u mail"
NICE="--nicelevel 10"
Con esto, activamos el demonio, definimos opciones de inicio y establecemos la prioridad a 10 haciendo que el proceso se ejecute con baja prioridad y así no entorpezca otras tareas (si vemos que en nuestro servidor va demasiado lento podemos poner un número menor o comentar la línea)
Ahora /etc/spamassassin/local.cf
rewrite_header Subject *****SPAM*****
lock_method flock
required_score 5.0
use_bayes 1
bayes_auto_learn 1
bayes_ignore_header X-Bogosity
bayes_ignore_header X-Spam-Flag
bayes_ignore_header X-Spam-Status
skip_rbl_checks 0
pyzor_options --homedir /var/spool/pyzor
use_razor2 1
razor_timeout 5
use_pyzor 1
pyzor_timeout 5
report_contact administrator@email.ext
Casi todo ha sido quitar comentarios de líneas, excepto las seis últimas:
- rewrite_header Subject *****SPAM*****: Definimos el asunto del mensaje marcado como correo basura, escribiendo *****SPAM***** al principio.
- lock_method flock : Establecemos la manera de bloquear ficheros o peticiones de base de datos, para ello usaremos flock (pero si estamos utilizando nfs es recomendable utilizar nfssafe)
- required_score : Puntuación mínima para marcar un mensaje como SPAM.
- use_bayes 1 : Usa el filtro bayesiano. Conoce nuevas formas de spam con información estadística de correos que sabemos seguro que son basura.
- bayes_auto_learn 1 : Hace que el filtro antispam aprenda automáticamente de los mensajes
- bayes_ignore_header : El filtro bayesiano toma atajos cuando ciertas cabeceras aparecen en el correo, pero en ocasiones los mensajes nos llegan de fuera con estas cabeceras (por ejemplo en listas de correo), y no podemos confiar en ellas porque nos confundirían.
- pyzor-options : Opciones del motor pyzor
- skip_rbl_checks 0 : No se salta los tests RBL. Estos tests vienen de Realtime Blackhole List (o Realtime BlackLists) desde Internet. Son bases de datos que almacenan IPs y nombres de dominio que han sido reportadas como fuentes de correo basura. Nos ahorrará tiempo y CPU.
- use_razor2 / use_pyzor : Usa otras bases de datos online
- razor/pyzor_timeout : Timeout for para esas bases de datos
- report_contact : Presenta el e-mail del administrador en los mensajes recibidos como SPAM, para futuros comentarios de los usuarios.
Ahora configuramos pyzor:
$ sudo mkdir /var/spool/pyzor
$ sudo pyzor --homedir /var/spool/pyzor discover
$ sudo chown -R mail:mail /var/spool/pyzor
$ sudo chmod -R +x /var/spool/pyzor
En este punto podemos hacer una pequeña prueba del sistema, para ello reiniciamos (o iniciamos por primera vez) el servicio spamassassin y «enviamos» mensajes de prueba a spamc (cliente spamassassin), a ver si todo va bien:
$ sudo service spamassassin restart
$ cat /usr/share/doc/spamc/sample-spam.txt | spamc
Veremos algunas cabeceras nuevas en el resultado
Subject: *****SPAM***** Test spam mail (GTUBE)Ahora vamos a integrar todo esto con postfix, por lo que editaremos /etc/postfix/master.cf para hacer que el correo pase por nuestro filtro:
Date: Wed, 23 Jul 2003 23:30:00 +0200
Message-Id: <GTUBE1.1010101@example.net>
X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on cloud
X-Spam-Flag: YES
X-Spam-Level: **************************************************
X-Spam-Status: Yes, score=1000.0 required=5.0 tests=GTUBE,NO_RECEIVED,
NO_RELAYS autolearn=no version=3.3.2
smtp inet n - n - - smtpd
-o content_filter=spamfilter:dummy
spamfilter unix - n n - - pipe
flags=Rq user=mail argv=/usr/local/bin/spamfilter.sh -f ${sender} -- ${recipient}
#smtp inet n - n - - smtpd
Debemos comentar la línea existente de smtp, y escribir la nueva, con esto haremos que el mensaje pase a través del filtro spamfilter.sh (que crearemos más adelante) y tras ello, entregaremos el mensaje.
Creamos entonces /usr/local/bin/spamfilter.sh y ponemos lo siguiente (en el futuro modificaremos los contenidos de este archivo para incluir más opciones):
#!/bin/bash
/usr/bin/spamc | /usr/sbin/sendmail -i "$@"
exit $?
Damos a spamfilter.sh permiso de ejecución
$ sudo chown mail:mail spamfilter.sh
$ sudo chmod +x spamfilter.sh
Ahora tenemos la misma configuración para todos los usuarios y no irá mal, pero los usuarios no tendrán nada que hacer si reciben falsos positivos o negativos. Además, en este punto, los usuarios tendrán que crear sus propios filtros redirigir (o eliminar) los mensajes etiquetados como
*****SPAM*****
Sólo queda reiniciar el servidor postfix y probar el envío de un mensaje desde nuestro cliente de correo favorito. Si ves que no llega como spam, al menos visualiza el código fuente y asegúrate de que las cabeceras X-Spam estén ahí, eso será que funciona:
$ sudo service postfix restart
Mejorar la detección de spam con SpamAssassin
- Comprobación del encabezado y el cuerpo del correo electrónico con el servidor SMTP Postfix
Postfix proporciona 4 sencillos parámetros de comprobación de contenido.
- header_checks
- mime_header_checks
- nested_header_checks
- body_checks
/etc/spamassassin/local.cf
# These values can be overridden by editing ~/.spamassassin/user_prefs.cf
# (see spamassassin(1) for details)
#auto_learn 1
bayes_auto_learn 1
bayes_auto_learn 1
# These should be safe assumptions and allow for simple visual sifting
# without risking lost emails.
required_hits 5
report_safe 0
rewrite_header Subject [SPAM]
score MISSING_FROM 5.0
score MISSING_DATE 5.0
score MISSING_HEADERS 3.0
score PDS_FROM_2_EMAILS 3.0
score EMPTY_MESSAGE 4.0
score FREEMAIL_DISPTO 2.0
score FREEMAIL_FORGED_REPLYTO 3.5
score FORGED_GMAIL_RCVD 2.5
score DKIM_ADSP_NXDOMAIN 5.0
header FROM_SAME_AS_TO ALL=~/\nFrom: ([^\n]+)\nTo: \1/sm
describe FROM_SAME_AS_TO From address is the same as To address.
score FROM_SAME_AS_TO 2.0
header EMPTY_RETURN_PATH ALL =~ /<>/i
describe EMPTY_RETURN_PATH empty address in the Return Path header.
score EMPTY_RETURN_PATH 3.0
header CUSTOM_DMARC_FAIL Authentication-Results =~ /dmarc=fail/
describe CUSTOM_DMARC_FAIL This email failed DMARC check
score CUSTOM_DMARC_FAIL 3.0
body SUBSCRIPTION_SPAM /(unsubscribe|u n s u b s c r i b e|Un-subscribe)/i
describe SUBSCRIPTION_SPAM I didn't subscribe to your spam.
score SUBSCRIPTION_SPAM 3.0
header LIST_UNSUBSCRIBE ALL =~ /List-Unsubscribe/i
describe LIST_UNSUBSCRIBE I didn't join your mailing list.
score LIST_UNSUBSCRIBE 2.0
header MAILJET_IMPOSTER From =~ /mailjet/i
describe MAILJET_IMPOSTER I don't have a mailjet account for this email address.
score MAILJET_IMPOSTER 2.5
score FROM_DOMAIN_NOVOWEL 4.0
score HTML_IMAGE_RATIO_02 4.0
header __RCVD_IN_ZEN eval:check_rbl('zen', 'zen.spamhaus.org.')
describe __RCVD_IN_ZEN Received via a relay in Spamhaus Zen
tflags RCVD_IN_ZENSPAMHAUS net
score RCVD_IN_SBL 5.0
#header MISSING_HEADERS eval:check_for_missing_to_header()
#describe MISSING_HEADERS Missing To: header
header CUSTOM_LOOKUP_1 eval:check_rbl('all.s5h.net','all.s5h.net.')
describe CUSTOM_LOOKUP_1 Entries listed in all.s5h.net RBL
score CUSTOM_LOOKUP_1 0.5
header CUSTOM_LOOKUP_2 eval:check_rbl('b.barracudacentral.org','b.barracudacentral.org.')
describe CUSTOM_LOOKUP_2 Entries listed in b.barracudacentral.org RBL
score CUSTOM_LOOKUP_2 0.5
header CUSTOM_LOOKUP_3 eval:check_rbl('blackholes.five-ten-sg.com','blackholes.five-ten-sg.com.')
describe CUSTOM_LOOKUP_3 Entries listed in blackholes.five-ten-sg.com RBL
score CUSTOM_LOOKUP_3 0.5
header CUSTOM_LOOKUP_4 eval:check_rbl('blacklist.woody.ch','blacklist.woody.ch.')
describe CUSTOM_LOOKUP_4 Entries listed in blacklist.woody.ch RBL
score CUSTOM_LOOKUP_4 0.5
header CUSTOM_LOOKUP_5 eval:check_rbl('bl.drmx.org','bl.drmx.org.')
describe CUSTOM_LOOKUP_5 Entries listed in bl.drmx.org RBL
score CUSTOM_LOOKUP_5 0.5
header CUSTOM_LOOKUP_6 eval:check_rbl('bl.mailspike.net','bl.mailspike.net.')
describe CUSTOM_LOOKUP_6 Entries listed in bl.mailspike.net RBL
score CUSTOM_LOOKUP_6 0.5
header CUSTOM_LOOKUP_7 eval:check_rbl('bl.spamcop.net','bl.spamcop.net.')
describe CUSTOM_LOOKUP_7 Entries listed in bl.spamcop.net RBL
score CUSTOM_LOOKUP_7 0.5
header CUSTOM_LOOKUP_8 eval:check_rbl('bl.spamcop.net','bl.spamcop.net.')
describe CUSTOM_LOOKUP_8 Entries listed in bl.spamcop.net RBL
score CUSTOM_LOOKUP_8 0.5
header CUSTOM_LOOKUP_9 eval:check_rbl('bl.spameatingmonkey.net','bl.spameatingmonkey.net.')
describe CUSTOM_LOOKUP_9 Entries listed in bl.spameatingmonkey.net RBL
score CUSTOM_LOOKUP_9 0.5
header CUSTOM_LOOKUP_10 eval:check_rbl('bogons.cymru.com','bogons.cymru.com.')
describe CUSTOM_LOOKUP_10 Entries listed in bogons.cymru.com RBL
score CUSTOM_LOOKUP_10 0.5
header CUSTOM_LOOKUP_11 eval:check_rbl('bsb.empty.us','bsb.empty.us.')
describe CUSTOM_LOOKUP_11 Entries listed in bsb.empty.us RBL
score CUSTOM_LOOKUP_11 0.5
header CUSTOM_LOOKUP_12 eval:check_rbl('cbl.abuseat.org','cbl.abuseat.org.')
describe CUSTOM_LOOKUP_12 Entries listed in cbl.abuseat.org RBL
score CUSTOM_LOOKUP_12 0.5
header CUSTOM_LOOKUP_13 eval:check_rbl('cdl.anti-spam.org.cn','cdl.anti-spam.org.cn.')
describe CUSTOM_LOOKUP_13 Entries listed in cdl.anti-spam.org.cn RBL
score CUSTOM_LOOKUP_13 0.5
header CUSTOM_LOOKUP_14 eval:check_rbl('combined.abuse.ch','combined.abuse.ch.')
describe CUSTOM_LOOKUP_14 Entries listed in combined.abuse.ch RBL
score CUSTOM_LOOKUP_14 0.5
header CUSTOM_LOOKUP_15 eval:check_rbl('db.wpbl.info','db.wpbl.info.')
describe CUSTOM_LOOKUP_15 Entries listed in db.wpbl.info RBL
score CUSTOM_LOOKUP_15 0.5
header CUSTOM_LOOKUP_16 eval:check_rbl('dnsbl-1.uceprotect.net','dnsbl-1.uceprotect.net.')
describe CUSTOM_LOOKUP_16 Entries listed in dnsbl-1.uceprotect.net RBL
score CUSTOM_LOOKUP_16 0.5
header CUSTOM_LOOKUP_17 eval:check_rbl('dnsbl-2.uceprotect.net','dnsbl-2.uceprotect.net.')
describe CUSTOM_LOOKUP_17 Entries listed in dnsbl-2.uceprotect.net RBL
score CUSTOM_LOOKUP_17 0.5
header CUSTOM_LOOKUP_18 eval:check_rbl('dnsbl-3.uceprotect.net','dnsbl-3.uceprotect.net.')
describe CUSTOM_LOOKUP_18 Entries listed in dnsbl-3.uceprotect.net RBL
score CUSTOM_LOOKUP_18 0.5
header CUSTOM_LOOKUP_19 eval:check_rbl('dnsbl.anticaptcha.net','dnsbl.anticaptcha.net.')
describe CUSTOM_LOOKUP_19 Entries listed in dnsbl.anticaptcha.net RBL
score CUSTOM_LOOKUP_19 0.5
header CUSTOM_LOOKUP_20 eval:check_rbl('dnsbl.calivent.com.pe','dnsbl.calivent.com.pe.')
describe CUSTOM_LOOKUP_20 Entries listed in dnsbl.calivent.com.pe RBL
score CUSTOM_LOOKUP_20 0.5
header CUSTOM_LOOKUP_21 eval:check_rbl('dnsbl.cobion.com','dnsbl.cobion.com.')
describe CUSTOM_LOOKUP_21 Entries listed in dnsbl.cobion.com RBL
score CUSTOM_LOOKUP_21 0.5
header CUSTOM_LOOKUP_22 eval:check_rbl('dnsbl.cyberlogic.net','dnsbl.cyberlogic.net.')
describe CUSTOM_LOOKUP_22 Entries listed in dnsbl.cyberlogic.net RBL
score CUSTOM_LOOKUP_22 0.5
header CUSTOM_LOOKUP_23 eval:check_rbl('dnsbl.dronebl.org','dnsbl.dronebl.org.')
describe CUSTOM_LOOKUP_23 Entries listed in dnsbl.dronebl.org RBL
score CUSTOM_LOOKUP_23 0.5
header CUSTOM_LOOKUP_24 eval:check_rbl('dnsbl.inps.de','dnsbl.inps.de.')
describe CUSTOM_LOOKUP_24 Entries listed in dnsbl.inps.de RBL
score CUSTOM_LOOKUP_24 0.5
header CUSTOM_LOOKUP_25 eval:check_rbl('dnsbl.kempt.net','dnsbl.kempt.net.')
describe CUSTOM_LOOKUP_25 Entries listed in dnsbl.kempt.net RBL
score CUSTOM_LOOKUP_25 0.5
header CUSTOM_LOOKUP_26 eval:check_rbl('dnsbl.rv-soft.info','dnsbl.rv-soft.info.')
describe CUSTOM_LOOKUP_26 Entries listed in dnsbl.rv-soft.info RBL
score CUSTOM_LOOKUP_26 0.5
header CUSTOM_LOOKUP_27 eval:check_rbl('dnsbl.sorbs.net','dnsbl.sorbs.net.')
describe CUSTOM_LOOKUP_27 Entries listed in dnsbl.sorbs.net RBL
score CUSTOM_LOOKUP_27 0.5
#header CUSTOM_LOOKUP_28 eval:check_rbl('dnsbl.spfbl.net','dnsbl.spfbl.net.')
#describe CUSTOM_LOOKUP_28 Entries listed in dnsbl.spfbl.net RBL
#score CUSTOM_LOOKUP_28 0.5
header CUSTOM_LOOKUP_29 eval:check_rbl('dnsrbl.org','dnsrbl.org.')
describe CUSTOM_LOOKUP_29 Entries listed in dnsrbl.org RBL
score CUSTOM_LOOKUP_29 0.5
header CUSTOM_LOOKUP_30 eval:check_rbl('drone.abuse.ch','drone.abuse.ch.')
describe CUSTOM_LOOKUP_30 Entries listed in drone.abuse.ch RBL
score CUSTOM_LOOKUP_30 0.5
header CUSTOM_LOOKUP_31 eval:check_rbl('drone.abuse.ch','drone.abuse.ch.')
describe CUSTOM_LOOKUP_31 Entries listed in drone.abuse.ch RBL
score CUSTOM_LOOKUP_31 0.5
header CUSTOM_LOOKUP_32 eval:check_rbl('duinv.aupads.org','duinv.aupads.org.')
describe CUSTOM_LOOKUP_32 Entries listed in duinv.aupads.org RBL
score CUSTOM_LOOKUP_32 0.5
header CUSTOM_LOOKUP_33 eval:check_rbl('dul.dnsbl.sorbs.net','dul.dnsbl.sorbs.net.')
describe CUSTOM_LOOKUP_33 Entries listed in dul.dnsbl.sorbs.net RBL
score CUSTOM_LOOKUP_33 0.5
header CUSTOM_LOOKUP_34 eval:check_rbl('dyna.spamrats.com','dyna.spamrats.com.')
describe CUSTOM_LOOKUP_34 Entries listed in dyna.spamrats.com RBL
score CUSTOM_LOOKUP_34 0.5
header CUSTOM_LOOKUP_35 eval:check_rbl('dynip.rothen.com','dynip.rothen.com.')
describe CUSTOM_LOOKUP_35 Entries listed in dynip.rothen.com RBL
score CUSTOM_LOOKUP_35 0.5
header CUSTOM_LOOKUP_36 eval:check_rbl('exitnodes.tor.dnsbl.sectoor.de','exitnodes.tor.dnsbl.sectoor.de.')
describe CUSTOM_LOOKUP_36 Entries listed in exitnodes.tor.dnsbl.sectoor.de RBL
score CUSTOM_LOOKUP_36 0.5
header CUSTOM_LOOKUP_37 eval:check_rbl('http.dnsbl.sorbs.net','http.dnsbl.sorbs.net.')
describe CUSTOM_LOOKUP_37 Entries listed in http.dnsbl.sorbs.net RBL
score CUSTOM_LOOKUP_37 0.5
header CUSTOM_LOOKUP_38 eval:check_rbl('ips.backscatterer.org','ips.backscatterer.org.')
describe CUSTOM_LOOKUP_38 Entries listed in ips.backscatterer.org RBL
score CUSTOM_LOOKUP_38 0.5
header CUSTOM_LOOKUP_39 eval:check_rbl('ix.dnsbl.manitu.net','ix.dnsbl.manitu.net.')
describe CUSTOM_LOOKUP_39 Entries listed in ix.dnsbl.manitu.net RBL
score CUSTOM_LOOKUP_39 0.5
header CUSTOM_LOOKUP_40 eval:check_rbl('korea.services.net','korea.services.net.')
describe CUSTOM_LOOKUP_40 Entries listed in korea.services.net RBL
score CUSTOM_LOOKUP_40 0.5
header CUSTOM_LOOKUP_41 eval:check_rbl('mail-abuse.blacklist.jippg.org','mail-abuse.blacklist.jippg.org.')
describe CUSTOM_LOOKUP_41 Entries listed in mail-abuse.blacklist.jippg.org RBL
score CUSTOM_LOOKUP_41 0.5
header CUSTOM_LOOKUP_42 eval:check_rbl('misc.dnsbl.sorbs.net','misc.dnsbl.sorbs.net.')
describe CUSTOM_LOOKUP_42 Entries listed in misc.dnsbl.sorbs.net RBL
score CUSTOM_LOOKUP_42 0.5
header CUSTOM_LOOKUP_43 eval:check_rbl('noptr.spamrats.com','noptr.spamrats.com.')
describe CUSTOM_LOOKUP_43 Entries listed in noptr.spamrats.com RBL
score CUSTOM_LOOKUP_43 0.5
header CUSTOM_LOOKUP_44 eval:check_rbl('orvedb.aupads.org','orvedb.aupads.org.')
describe CUSTOM_LOOKUP_44 Entries listed in orvedb.aupads.org RBL
score CUSTOM_LOOKUP_44 0.5
#header CUSTOM_LOOKUP_45 eval:check_rbl('pbl.spamhaus.org','pbl.spamhaus.org.')
#describe CUSTOM_LOOKUP_45 Entries listed in pbl.spamhaus.org RBL
#score CUSTOM_LOOKUP_45 0.5
header CUSTOM_LOOKUP_46 eval:check_rbl('proxy.bl.gweep.ca','proxy.bl.gweep.ca.')
describe CUSTOM_LOOKUP_46 Entries listed in proxy.bl.gweep.ca RBL
score CUSTOM_LOOKUP_46 0.5
header CUSTOM_LOOKUP_47 eval:check_rbl('psbl.surriel.com','psbl.surriel.com.')
describe CUSTOM_LOOKUP_47 Entries listed in psbl.surriel.com RBL
score CUSTOM_LOOKUP_47 0.5
header CUSTOM_LOOKUP_48 eval:check_rbl('rbl.abuse.ro','rbl.abuse.ro.')
describe CUSTOM_LOOKUP_48 Entries listed in rbl.abuse.ro RBL
score CUSTOM_LOOKUP_48 0.5
header CUSTOM_LOOKUP_49 eval:check_rbl('rbl.interserver.net','rbl.interserver.net.')
describe CUSTOM_LOOKUP_49 Entries listed in rbl.interserver.net RBL
score CUSTOM_LOOKUP_49 0.5
header CUSTOM_LOOKUP_50 eval:check_rbl('recent.spam.dnsbl.sorbs.net','recent.spam.dnsbl.sorbs.net.')
describe CUSTOM_LOOKUP_50 Entries listed in recent.spam.dnsbl.sorbs.net RBL
score CUSTOM_LOOKUP_50 0.5
header CUSTOM_LOOKUP_51 eval:check_rbl('relays.bl.gweep.ca','relays.bl.gweep.ca.')
describe CUSTOM_LOOKUP_51 Entries listed in relays.bl.gweep.ca RBL
score CUSTOM_LOOKUP_51 0.5
header CUSTOM_LOOKUP_52 eval:check_rbl('relays.nether.net','relays.nether.net.')
describe CUSTOM_LOOKUP_52 Entries listed in relays.nether.net RBL
score CUSTOM_LOOKUP_52 0.5
header CUSTOM_LOOKUP_53 eval:check_rbl('sbl.spamhaus.org','sbl.spamhaus.org.')
describe CUSTOM_LOOKUP_53 Entries listed in sbl.spamhaus.org RBL
score CUSTOM_LOOKUP_53 0.5
header CUSTOM_LOOKUP_54 eval:check_rbl('sbl-xbl.spamhaus.org','sbl-xbl.spamhaus.org.')
describe CUSTOM_LOOKUP_54 Entries listed in sbl-xbl.spamhaus.org RBL
score CUSTOM_LOOKUP_54 0.5
header CUSTOM_LOOKUP_55 eval:check_rbl('short.rbl.jp','short.rbl.jp.')
describe CUSTOM_LOOKUP_55 Entries listed in short.rbl.jp RBL
score CUSTOM_LOOKUP_55 0.5
header CUSTOM_LOOKUP_56 eval:check_rbl('singular.ttk.pte.hu','singular.ttk.pte.hu.')
describe CUSTOM_LOOKUP_56 Entries listed in singular.ttk.pte.hu RBL
score CUSTOM_LOOKUP_56 0.5
header CUSTOM_LOOKUP_57 eval:check_rbl('smtp.dnsbl.sorbs.net','smtp.dnsbl.sorbs.net.')
describe CUSTOM_LOOKUP_57 Entries listed in smtp.dnsbl.sorbs.net RBL
score CUSTOM_LOOKUP_57 0.5
header CUSTOM_LOOKUP_58 eval:check_rbl('socks.dnsbl.sorbs.net','socks.dnsbl.sorbs.net.')
describe CUSTOM_LOOKUP_58 Entries listed in socks.dnsbl.sorbs.net RBL
score CUSTOM_LOOKUP_58 0.5
header CUSTOM_LOOKUP_59 eval:check_rbl('spam.abuse.ch','spam.abuse.ch.')
describe CUSTOM_LOOKUP_59 Entries listed in spam.abuse.ch RBL
score CUSTOM_LOOKUP_59 0.5
header CUSTOM_LOOKUP_60 eval:check_rbl('spambot.bls.digibase.ca','spambot.bls.digibase.ca.')
describe CUSTOM_LOOKUP_60 Entries listed in spambot.bls.digibase.ca RBL
score CUSTOM_LOOKUP_60 0.5
header CUSTOM_LOOKUP_61 eval:check_rbl('spam.dnsbl.anonmails.de','spam.dnsbl.anonmails.de.')
describe CUSTOM_LOOKUP_61 Entries listed in spam.dnsbl.anonmails.de RBL
score CUSTOM_LOOKUP_61 0.5
header CUSTOM_LOOKUP_62 eval:check_rbl('spam.dnsbl.sorbs.net','spam.dnsbl.sorbs.net.')
describe CUSTOM_LOOKUP_62 Entries listed in spam.dnsbl.sorbs.net RBL
score CUSTOM_LOOKUP_62 0.5
header CUSTOM_LOOKUP_63 eval:check_rbl('spamguard.leadmon.net','spamguard.leadmon.net.')
describe CUSTOM_LOOKUP_63 Entries listed in spamguard.leadmon.net RBL
score CUSTOM_LOOKUP_63 0.5
header CUSTOM_LOOKUP_64 eval:check_rbl('spamrbl.imp.ch','spamrbl.imp.ch.')
describe CUSTOM_LOOKUP_64 Entries listed in spamrbl.imp.ch RBL
score CUSTOM_LOOKUP_64 0.5
header CUSTOM_LOOKUP_65 eval:check_rbl('spamsources.fabel.dk','spamsources.fabel.dk.')
describe CUSTOM_LOOKUP_65 Entries listed in spamsources.fabel.dk RBL
score CUSTOM_LOOKUP_65 0.5
header CUSTOM_LOOKUP_66 eval:check_rbl('spam.spamrats.com','spam.spamrats.com.')
describe CUSTOM_LOOKUP_66 Entries listed in spam.spamrats.com RBL
score CUSTOM_LOOKUP_66 0.5
header CUSTOM_LOOKUP_67 eval:check_rbl('tor.dan.me.uk','tor.dan.me.uk.')
describe CUSTOM_LOOKUP_67 Entries listed in tor.dan.me.uk RBL
score CUSTOM_LOOKUP_67 0.5
header CUSTOM_LOOKUP_68 eval:check_rbl('truncate.gbudb.net','truncate.gbudb.net.')
describe CUSTOM_LOOKUP_68 Entries listed in truncate.gbudb.net RBL
score CUSTOM_LOOKUP_68 0.5
header CUSTOM_LOOKUP_69 eval:check_rbl('ubl.unsubscore.com','ubl.unsubscore.com.')
describe CUSTOM_LOOKUP_69 Entries listed in ubl.unsubscore.com RBL
score CUSTOM_LOOKUP_69 0.5
header CUSTOM_LOOKUP_70 eval:check_rbl('virbl.bit.nl','virbl.bit.nl.')
describe CUSTOM_LOOKUP_70 Entries listed in virbl.bit.nl RBL
score CUSTOM_LOOKUP_70 0.5
header CUSTOM_LOOKUP_71 eval:check_rbl('virus.rbl.jp','virus.rbl.jp.')
describe CUSTOM_LOOKUP_71 Entries listed in virus.rbl.jp RBL
score CUSTOM_LOOKUP_71 0.5
header CUSTOM_LOOKUP_72 eval:check_rbl('virus.rbl.jp','virus.rbl.jp.')
describe CUSTOM_LOOKUP_72 Entries listed in virus.rbl.jp RBL
score CUSTOM_LOOKUP_72 0.5
header CUSTOM_LOOKUP_73 eval:check_rbl('web.dnsbl.sorbs.net','web.dnsbl.sorbs.net.')
describe CUSTOM_LOOKUP_73 Entries listed in web.dnsbl.sorbs.net RBL
score CUSTOM_LOOKUP_73 0.5
header CUSTOM_LOOKUP_74 eval:check_rbl('xbl.spamhaus.org','xbl.spamhaus.org.')
describe CUSTOM_LOOKUP_74 Entries listed in xbl.spamhaus.org RBL
score CUSTOM_LOOKUP_74 0.5
header CUSTOM_LOOKUP_75 eval:check_rbl('zen.spamhaus.org','zen.spamhaus.org.')
describe CUSTOM_LOOKUP_75 Entries listed in zen.spamhaus.org RBL
score CUSTOM_LOOKUP_75 0.5
header CUSTOM_LOOKUP_76 eval:check_rbl('zombie.dnsbl.sorbs.net','zombie.dnsbl.sorbs.net.')
describe CUSTOM_LOOKUP_76 Entries listed in zombie.dnsbl.sorbs.net RBL
score CUSTOM_LOOKUP_76 0.5
# scoring BAYES
score BAYES_00 -5.0
score BAYES_05 -4.0
score BAYES_20 1.0
score BAYES_40 2.0
score BAYES_50 2.5
score BAYES_60 3.0
score BAYES_80 3.5
score BAYES_95 4.0
score BAYES_99 4.5
score BAYES_999 1.0
# scoring DNSBLs & DNSWLs
score RCVD_IN_BL_SPAMCOP_NET 2.0
score RCVD_IN_DNSWL_BLOCKED 0
score RCVD_IN_DNSWL_HI -6.0
score RCVD_IN_DNSWL_LOW -2.0
score RCVD_IN_DNSWL_MED -4.0
score RCVD_IN_DNSWL_NONE 0.5
score RCVD_IN_HOSTKARMA_BL 2.0
score RCVD_IN_HOSTKARMA_BR 0.5
score RCVD_IN_HOSTKARMA_W -5.0
score RCVD_IN_MSPIKE_BL 0.0
score RCVD_IN_MSPIKE_H2 -0.5
score RCVD_IN_MSPIKE_H3 -0.5
score RCVD_IN_MSPIKE_H4 -2.0
score RCVD_IN_MSPIKE_H5 -3.0
score RCVD_IN_MSPIKE_L3 0.5
score RCVD_IN_MSPIKE_L4 2.0
score RCVD_IN_MSPIKE_L5 3.0
score RCVD_IN_MSPIKE_WL 0.0
score RCVD_IN_MSPIKE_ZBI 2.0
score RCVD_IN_PBL 3.0
score RCVD_IN_SBL 3.0
score RCVD_IN_SBL_CSS 3.0
score RCVD_IN_SPAMRATS_DYNA 2.0
score RCVD_IN_SPAMRATS_NOPTR 2.0
score RCVD_IN_SPAMRATS_SPAM 3.0
score RCVD_IN_XBL 3.0
score RCVD_IN_ZEN_BLOCKED 0.0
score RCVD_IN_ZEN_BLOCKED_OPENDNS 0.0
# scoring URIBLs
score URIBL_ABUSE_SURBL 4.5
score URIBL_BLACK 4.5
score URIBL_CR_SURBL 3.5
score URIBL_CSS 2.0
score URIBL_CSS_A 2.0
score URIBL_DBL_ABUSE_BOTCC 3.0
score URIBL_DBL_ABUSE_MALW 3.0
score URIBL_DBL_ABUSE_PHISH 3.0
score URIBL_DBL_ABUSE_REDIR 1.0
score URIBL_DBL_ABUSE_SPAM 3.0
score URIBL_DBL_BLOCKED 0.0
score URIBL_DBL_BLOCKED_OPENDNS 0.0
score URIBL_DBL_BOTNETCC 3.0
score URIBL_DBL_ERROR 0.0
score URIBL_DBL_MALWARE 3.0
score URIBL_DBL_PHISH 3.0
score URIBL_DBL_SPAM 3.0
score URIBL_GREY 1.0
score URIBL_MW_SURBL 3.5
score URIBL_PH_SURBL 3.5
score URIBL_RED 0.5
score URIBL_RHS_DOB 2.0
score URIBL_SBL 3.0
score URIBL_SBL_A 3.0
score URIBL_ZEN_BLOCKED 0.0
score URIBL_ZEN_BLOCKED_OPENDNS 0.0
# scoring HEADER & MISSING
score HEADER_FROM_DIFFERENT_DOMAINS 0.5
score MISSING_DATE 3.0
score MISSING_FROM 1.5
score MISSING_HEADERS 2.0
score MISSING_SUBJECT 1.0
# additional scoring tweaks
score HELO_DYNAMIC_SPLIT_IP 3.0
score LOTS_OF_MONEY 0.5
score MPART_ALT_DIFF 0.5
score MPART_ALT_DIFF_COUNT 0.5
score RDNS_NONE 0.5
score T_FILL_THIS_FORM_SHORT 0.5
score UNPARSEABLE_RELAY 0.5
# add JunkEmailFilter HostKarma DNSBL & DNSWL
header __RCVD_IN_HOSTKARMA eval:check_rbl('HOSTKARMA-lastexternal','hostkarma.junkemailfilter.com.')
describe __RCVD_IN_HOSTKARMA Sender listed in JunkEmailFilter
tflags __RCVD_IN_HOSTKARMA net
header RCVD_IN_HOSTKARMA_W eval:check_rbl_sub('HOSTKARMA-lastexternal','127.0.0.1')
describe RCVD_IN_HOSTKARMA_W Sender listed in HOSTKARMA-WHITE
tflags RCVD_IN_HOSTKARMA_W net nice
header RCVD_IN_HOSTKARMA_BL eval:check_rbl_sub('HOSTKARMA-lastexternal','127.0.0.2')
describe RCVD_IN_HOSTKARMA_BL Sender listed in HOSTKARMA-BLACK
tflags RCVD_IN_HOSTKARMA_BL net
header RCVD_IN_HOSTKARMA_BR eval:check_rbl_sub('HOSTKARMA-lastexternal','127.0.0.4')
describe RCVD_IN_HOSTKARMA_BR Sender listed in HOSTKARMA-BROWN
tflags RCVD_IN_HOSTKARMA_BR net
# add Spamrats DNSBL
header __RCVD_IN_SPAMRATS eval:check_rbl('spamrats-lastexternal','all.spamrats.com.')
describe __RCVD_IN_SPAMRATS SPAMRATS: sender is listed in SpamRats
tflags __RCVD_IN_SPAMRATS net
reuse __RCVD_IN_SPAMRATS
header RCVD_IN_SPAMRATS_DYNA eval:check_rbl_sub('spamrats-lastexternal','127.0.0.36')
describe RCVD_IN_SPAMRATS_DYNA RATS-Dyna: sent directly from dynamic IP address
tflags RCVD_IN_SPAMRATS_DYNA net
reuse RCVD_IN_SPAMRATS_DYNA
header RCVD_IN_SPAMRATS_NOPTR eval:check_rbl_sub('spamrats-lastexternal','127.0.0.37')
describe RCVD_IN_SPAMRATS_NOPTR RATS-NoPtr: sender has no reverse DNS
tflags RCVD_IN_SPAMRATS_NOPTR net
reuse RCVD_IN_SPAMRATS_NOPTR
header RCVD_IN_SPAMRATS_SPAM eval:check_rbl_sub('spamrats-lastexternal','127.0.0.38')
describe RCVD_IN_SPAMRATS_SPAM RATS-Spam: sender is a spam source
tflags RCVD_IN_SPAMRATS_SPAM net
reuse RCVD_IN_SPAMRATS_SPAM
#--------------------------------------------------
# The only RBL I trust, UCEPROTECT1 (single IP, not IP-ranges or entire ISPs) http://uceprotect.net
#--------------------------------------------------
header RCVD_IN_UCEPROTECT1 eval:check_rbl_txt('uceprotect1', 'dnsbl-1.uceprotect.net')
describe RCVD_IN_UCEPROTECT1 Listed in dnsbl-1.uceprotect.net
tflags RCVD_IN_UCEPROTECT1 net
score RCVD_IN_UCEPROTECT1 1.8
#--------------------------------------------------
# top level domain matching, and no, not Russia or China; In 2022 I got the absolute most spam from .cz and .ua actually!
#--------------------------------------------------
header SPAMMY_TLD_IN_RCVD Received =~ /(\.net\.ae|\.net\.id|\.ro|\.cz|\.co\.ke|\.AC\.ZA|\.co\.in|\.com\.vn|\.vn|\.cc|\.ua|\.com\.br|\.gr|\.hr|\.dk|\.win|\.bid|\.tw|\.br|\.pk|\.top|\.club|\.date|\.stream|\.xyz|\.trade|\.icu|\.press|\.pro|\.pet|\.kim|\.red)\s/i
score SPAMMY_TLD_IN_RCVD 0.3
describe SPAMMY_TLD_IN_RCVD Spammy TLD used in Received line
header SPAMMY_TLD_IN_FROM From =~ /(\.net\.ae|\.net\.id|\.ro|\.co\.jp|\.co\.ke|\.AC\.ZA|\.co\.in|\.com\.vn|\.vn|\.cc|\.ua|\.com\.br|\.gr|\.hr|\.cz|\.win|\.bid|\.tw|\.br|\.pk|\.top|\.club|\.date|\.stream|\.xyz|\.trade|\.icu|\.press|\.pro|\.pet|\.kim|\.red)>$/i
score SPAMMY_TLD_IN_FROM 0.3
describe SPAMMY_TLD_IN_FROM Spammy TLD used in From line
header __HIGH_SPAMMY_TLD_RCVD Received =~ /\.(win|bid|top|club|date|stream|xyz|icu)\/.*/i
header __HIGH_SPAMMY_TLD_FROM From =~ /\.(win|bid|top|club|date|stream|xyz|icu)\/.*/i
uri __HIGH_SPAMMY_TLD_URI /\.(win|bid|top|club|date|stream|xyz)\/.+/i
meta HIGH_SPAMMY_TLD (__HIGH_SPAMMY_TLD_RCVD && __HIGH_SPAMMY_TLD_FROM && __HIGH_SPAMMY_TLD_URI)
score HIGH_SPAMMY_TLD 1.1
describe HIGH_SPAMMY_TLD HIGH spammy tld used in Received, From and link
#--------------------------------------------------
# Header matching
#--------------------------------------------------
header X_ORG_REAL_CAPITAL X-Organization =~ /RealCapitalMarkets\.com/i
score X_ORG_REAL_CAPITAL 3.0
#--------------------------------------------------
# Subject matching
#--------------------------------------------------
header __SUBJECT_NEIGHBOR Subject =~ /Neighbou?r/i
header __SUBJECT_NEXT_DOOR Subject =~ /next door/i
meta SUBJECT_NEIGHBOUR (__SUBJECT_NEIGHBOR || __SUBJECT_NEXT_DOOR)
score SUBJECT_NEIGHBOUR 0.3
header __SUBJECT_VIAGRA Subject =~ /viagra/i
header __SUBJECT_PILLS Subject =~ /pills/i
header __SUBJECT_HEALTH_SECRET Subject =~ /health secret/i
meta SUBJECT_HEALTH (__SUBJECT_VIAGRA || __SUBJECT_PILLS || __SUBJECT_HEALTH_SECRET)
score SUBJECT_HEALTH 0.4
describe SUBJECT_HEALTH health-related subject
header SUBJECT_DARLEHEN Subject =~ /Darlehen Angebot jetzt bewerben/i
score SUBJECT_DARLEHEN 0.2
header __FROM_DAVIS_WRIGHT From =~ /Davis Wright/i
header __SUBJECT_LEG_DARLEHEN Subject =~ /Legitimes Darlehen Angebot/i
meta DAVIS_WRIGHT_DARLEHEN (__FROM_DAVIS_WRIGHT && __SUBJECT_LEG_DARLEHEN)
score DAVIS_WRIGHT_DARLEHEN 1.0
header __FROM_KEVIN_PAGE From =~ /Kevin Page/i
meta KEVIN_PAGE_DARLEHEN (__FROM_KEVIN_PAGE && SUBJECT_DARLEHEN)
score KEVIN_PAGE_DARLEHEN 1.0
# "Domain Expiration SEO" spam
header __SUBJECT_EXP_SEO Subject =~ /Expiration SEO/i
header __FROM_EXP_SEO From =~ /(Domain Expiration SEO|Final Reminder)/i
meta EXPIRATION_SEO (__SUBJECT_EXP_SEO && __FROM_EXP_SEO)
score EXPIRATION_SEO 0.3
describe EXPIRATION_SEO Variation of Domain SEO spam
# "SEO issue" spam
header __SUBJECT_SEO_ISSUE Subject =~ /SEO Issue/i
body __BODY_SEO_ISSUE /\s+(Search Specialist|Hello Team)/i
meta SEO_ISSUE (__SUBJECT_SEO_ISSUE && __BODY_SEO_ISSUE)
score SEO_ISSUE 0.4
describe SEO_ISSUE Variation of Domain SEO spam
# Domain Alert
header __SUBJECT_DOMAIN_ALERT Subject =~ /This is your Final (Reminder|Notice)/i
header __FROM_DOMAIN_ALERT From =~ /(Internet Services|Domain Notice|directimpactdesigns.com)/i
body __BODY_DOMAIN_ALERT /\s+search engine registration/i
meta DOMAIN_ALERT (__SUBJECT_DOMAIN_ALERT && __FROM_DOMAIN_ALERT && __BODY_DOMAIN_ALERT)
score DOMAIN_ALERT 0.5
describe DOMAIN_ALERT Variations of search engine registration spam
header __FROM_BITCOIN_CODE From =~ /bestofmesh.com/i
uri __BITCOIN_CODE_LINK /track.bestofmesh.com.*/i
meta BITCOIN_CODE (__FROM_BITCOIN_CODE && __BITCOIN_CODE_LINK)
score BITCOIN_CODE 0.8
# customlogobuilders.press
header FROM_CUSTOMLOGOBUILDERS From =~ /customlogobuilders.press/i
score FROM_CUSTOMLOGOBUILDERS 1.0
#--------------------------------------------------
# Text matching
#--------------------------------------------------
header __SUBJECT_FUCK Subject =~ /f[ua5\&\%]ck/i
body __BODY_FUCK /\s+(fuck|sex|masturbate|anal)\s+/i
meta FUCKED_MAIL (__SUBJECT_FUCK || __BODY_FUCK )
score FUCKED_MAIL 0.5
describe FUCKED_MAIL Contains variations of 'fuck' in the subject and/or body
header __SUBJECT_FAX_RECEIVED Subject =~ /You have 1 new fax, document/i
header __SUBJECT_FAX_RECEIVED2 Subject =~ /You have received a new fax, document /i
meta FAX_RECEIVED ((__SUBJECT_FAX_RECEIVED || __SUBJECT_FAX_RECEIVED2) && __ZIP_ATTACHED)
score FAX_RECEIVED 1.2
body __BODY_VIAGRA /viagra/i
body __BODY_PILLS /pills/i
body __BODY_HEALTH_SECRET /health secret/i
meta BODY_HEALTH (__BODY_VIAGRA || __BODY_PILLS || __BODY_HEALTH_SECRET)
score BODY_HEALTH 0.2
describe BODY_HEALTH health-related body text
body __LEAKED_PWD1a /(I know )?[a-zA-Z0-9]{1,99} one of your pass./i
body __LEAKED_PWD1b /I (do )?know [a-zA-Z0-9]{1,99} one of your pass word./i
body __LEAKED_PWD2 /I actually (installed|placed) a (malware|software) on the (18+|xxx) (streaming|videos|video clips) \((porn|porno|sexually graphic)\)/i
meta LEAKED_PWD ((__LEAKED_PWD1a || __LEAKED_PWD1b) && __LEAKED_PWD2)
score LEAKED_PWD 2.0
#--------------------------------------------------
# Some very persistent spammers
#--------------------------------------------------
header FROM_MUNGAI From =~ /MUNGAI KIHANYA TRAINING/i
score FROM_MUNGAI 2.0
header FROM_KINETIC From =~ /KINETIC (ENTERPRISES|TECHNOLOGIEZ)/i
score FROM_KINETIC 1.0
header FROM_KINETIC2 From =~ /\*\s*KINETIC/i
score FROM_KINETIC2 1.0
meta KINETIC_SCREAMING (FROM_KINETIC2 && SUBJ_ALL_CAPS)
score KINETIC_SCREAMING 2.0
ifplugin Mail::SpamAssassin::Plugin::AskDNS
askdns DNSWL_DWL_HI _DKIMDOMAIN_.dwl.dnswl.org A /^127\.\d+\.\d+\.3/
tflags DNSWL_DWL_HI nice net
describe DNSWL_DWL_HI dwl.dnswl.org high trust
score DNSWL_DWL_HI -4
askdns DNSWL_DWL_MED _DKIMDOMAIN_.dwl.dnswl.org A /^127\.\d+\.\d+\.2/
tflags DNSWL_DWL_MED nice net
describe DNSWL_DWL_MED dwl.dnswl.org medium trust
score DNSWL_DWL_MED -2
askdns DNSWL_DWL_LOW _DKIMDOMAIN_.dwl.dnswl.org A /^127\.\d+\.\d+\.1/
tflags DNSWL_DWL_LOW nice net
describe DNSWL_DWL_LOW dwl.dnswl.org low trust
score DNSWL_DWL_LOW -1
askdns DNSWL_DWL_NONE _DKIMDOMAIN_.dwl.dnswl.org A /^127\.\d+\.\d+\.0/
tflags DNSWL_DWL_NONE nice net
describe DNSWL_DWL_NONE dwl.dnswl.org listed, but no particular trust information available
score DNSWL_DWL_NONE -0.2
endif # Mail::SpamAssassin::Plugin::AskDNS
Comienza el entrenamiento
SpamAssassin utiliza un clasificador Bayesiano para tratar de identificar el spam.
En teoría de la probabilidad y minería de datos, un clasificador Bayesiano ingenuo es un clasificador probabilístico fundamentado en el teorema de Bayes y algunas hipótesis simplificadoras adicionales. Es a causa de estas simplificaciones, que se suelen resumir en la hipótesis de independencia entre las variables predictoras, que recibe el apelativo de ingenuo.
Éste clasificador lo que hace es recolectar tokens, que son palabras o secuencias de caracteres que son comunes a los correos no deseados (spam) o los correos legítimos (ham). La pregunta ahora es ¿a partir de qué datos va a determinar si es spam o ham?. La respuesta: nuestros correos.
Hay varias maneras de que SpamAssassin
aprenda, las más comunes son
- Aprendizaje sin supervisión con reglas de SA (
auto-learning
). El clasificador aprende de las propias reglas internas de filtrado. - Supervisado. El clasificador aprende de mails previamente clasificados por el usuario como spam y ham.
La ventaja del entrenamiento sin supervisión es que (lógicamente) no
requiere trabajo extra del usuario. Por otro lado, la tasa de éxito de
detección de spam/ham puede ser menor que el supervisado. Entonces lo
mejor es iniciar el entrenamiento con mails que ya hayamos marcado como
spam y luego con la cantidad de datos suficientes pasemos al modelo de auto-learning
.
Paso 1: Recolección de muestras
Nosotros utilizamos Thunderbird para realizar este trabajo preliminar. La estrategia es tener una carpeta llamada SPAM
, en una de las cuentas, con todos los mails que manualmente marcamos como spam para entrenar al propio clasificador Bayesiano de Thunderbird y luego utilizar esas muestras para entrenar a SpamAssassin
.
Para activar el filtro de Thunderbird hay que ir a Menú > Opciones > Configuración de cuenta y activar las opciones:
- Activar control adaptativos de correo no deseado para esta cuenta.
- Confiar en las cabeceras de correo no deseado enviadas por SpamAssassin. ⚠️ IMPORTANTE.
- Mover nuevos mensajes de correo no deseado a:, seleccionar Otra y luego seleccionar la carpeta
SPAM
.
En nuestro caso, en los puestos que tienen varias cuentas configuradas, movemos todos los correos de spam a una única carpeta SPAM
de una sola cuenta de correo. De esta manera es más fácil tener todos
los correos no deseados en un solo lugar. Una vez que esté todo
configurado y los correos clasificados procedemos al entrenamiento de SpamAssassin
.
Paso 2: Pasando conocimiento con sa-learn
El comando sa-learn
nos permite ingresar la data recolectada al clasificador Bayesiano de SpamAssassin
.
Es recomendable tener una buena cantidad de correos clasificados para
iniciar el entrenamiento. Nosotros comenzamos con una muestra de 2000
correos no deseados y 8000 legítimos. Entonces, para empezar el
entrenamiento de spam:
sa-learn --spam /home/USER/mail/DOMINIO/CUENTA/.Spam/
Ahora sólo falta enseñarle cuales son los patrones de correos legítimos. Para ello se utiliza el comando
sa-learn --ham /home/USER/mail/DOMINIO/CUENTA/.CARPETA/
Si hay varias (muy probablemente) carpetas/cuentas de que queremos
utilizar como muestra, podemos utilizar un archivo con la lista de
directorios. Una manera para generarla puede ser:
ls -d /home/USER/mail/DOMINIO/CUENTA/.?* >> ~/HAM
Tendríamos que editar el archivo para quitar las carpetas ..
y las que contengan spam y finalmente podemos volver a entrenar el clasificador con:
sa-learn --ham -f ~/HAM
Paso 3: Puesta en marcha
Una vez realizado el entrenamiento, verificamos que SA haya aprendido con el comando:
sa-learn --dump magic
Los datos más importantes son
0.000 0 1027 0 non-token data: nspam
0.000 0 6010 0 non-token data: nham
nspam
es la cantidad de tokens identificados como spam y nham
la cantidad para ham.
Para activar el filtrado hay que editar el archivo /etc/mail/spamassassin/local.cf
y agregar las líneas
use_bayes 1
bayes_auto_learn 1
use_bayes 1
indica que tiene que usar el clasificador Bayesiano.use_bayes_auto_learn 1
indica que tiene que usar el auto aprendizaje.
Finalmente reiniciar el servicio y verificar que todo está bien
Fuentes:
https://gaspar.totaki.com/es/antispam-con-spamassassin/
https://logico.ar/blog/2019/06/1/mejorar-la-deteccion-de-spam-con-spamassassin
0 comentarios :
Publicar un comentario
Los comentarios pueden ser revisados en cualquier momento por los moderadores.
Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.
Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.