Además de las formas estándar (verificación de encabezados, clientes rotos, filtros de spam, etc.) para detectar spammers, y dependiendo de qué tan estricta sea su configuración, puede intentar limitar sus correos electrónicos a dominios completamente calificados e ignorar cualquier "Desconocido" Fuentes (eso es lo que hago).
Personalmente, creo que todos los correos electrónicos deben enviarse desde los servidores de correo y no directamente desde los clientes. Sin embargo, en el mundo real, eso no siempre sucede.
Además, puede probar si la dirección IP del dominio del servidor (no del dominio de la dirección) coincide con la dirección que recibe el servidor (búsqueda de IP inversa). Puede probar si dicho servidor es un servidor de correo o no verificando los puertos y los registros MX.
Si los correos de spam provienen de servidores de correo auténticos, puede indicar que es un caso de retransmisión abierta. Si no, podemos asumir que es una red de bots.
Estas son algunas de las restricciones que uso en Postfix (para dar una idea):
smtpd_helo_restrictions =
reject_invalid_helo_hostname,
smtpd_client_restrictions =
reject_unauth_pipelining
reject_unknown_reverse_client_hostname
smtpd_sender_restrictions =
reject_non_fqdn_sender,
reject_unknown_sender_domain,
smtpd_recipient_restrictions =
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_unauth_destination,
reject_unverified_recipient,
reject_rbl_client ...,
Por ejemplo, este es un registro que rechaza una fuente desconocida:
NOQUEUE: reject: RCPT from unknown[***.***.***.235]: 450 4.7.1 Client host rejected: cannot find your reverse hostname, [***.***.***.235]; from=<ret_2016@*******.com> to=<*****@******.com> proto=ESMTP helo=<www.*******.com>
Actualización: explicación ampliada (responder al comentario)
@ user10012: su pregunta es cómo verificar si el spam se origina desde botnets, por lo que una forma es: ¿cómo sabe que un correo proviene de un servidor SMTP? (entonces podrías tratar el resto como botnets, si quieres ser estricto).
Explicación 1:
puede probar si la IP del dominio del servidor (no el dominio de la dirección)
la dirección coincide con la que recibe el servidor (búsqueda de IP inversa).
De los registros:
postfix/smtpd[21173]: 929DB18E7E8D8: client=mail-pa0-f66.google.com[209.85.220.66]
En este caso, viene de algún SMTP de google. Si ejecuta host 209.85.220.66
, devolverá mail-pa0-f66.google.com.
. Cual es correcta. Esos deberían funcionar si el servidor de correo está configurado correctamente. Si alguien envía directamente desde una computadora, el resultado de host ***.***.***.235
será: not found: 3(NXDOMAIN)
o mostrará un dominio diferente al enviado.
Explicación 2:
Puede probar si dicho servidor es un servidor de correo o no, marcando el
puertos y los registros MX.
Este solo puede funcionar para servidores "pequeños", por ejemplo:
host -t mx example.com
devolverá algo como: example.com mail is handled by 10 mail.example.com
. En ese caso, puede verificar si mail.example.com corresponde a la IP recibida. Puedes probar el puerto con: nmap -p 25,465 mail.example.com
. Si responden "abierto", confirma que es un servidor de correo.
Dije que funciona con servidores "pequeños" porque las empresas medianas y grandes usan diferentes servidores para recibir y diferentes para enviar. También tienen un grupo de servidores que manejan el correo, lo que hace que las pruebas anteriores sean poco prácticas o imposibles. Por ejemplo, host -t google.com
devolverá: google.com mail is handled by 10 aspmx.l.google.com.
(de 10 a 50). Ninguno de esa lista incluye el que vimos antes: mail-pa0-f66.google.com
(esos son el conjunto de 'receptores'). Ahora, si verifica los puertos con nmap ese servidor (mail-pa0 ...), no tendrá ningún puerto abierto (lo que significa que es solo un remitente).
Solo como nota al margen, si un correo proviene de un servidor SMTP que no significa que fue enviado por un humano. Puede ser enviado por un bot también. Solo le ayuda a identificar qué correos electrónicos provienen de los servidores de correo. Muchos de los SPAM se envían directamente desde computadoras infectadas, y ese método ayuda a limpiarlos. Si un servidor SMTP está comprometido o está configurado con las malas intenciones de entregar SPAM, este método fallará. Necesitará otras formas de bloquearlo (como una lista negra: RBL).
En mi experiencia personal, puede filtrar el 90% o más de su SPAM utilizando un servicio RBL (hay algunos de uso gratuito si su servidor tiene poco tráfico: bl.spamcop.net , zen.spamhaus.org , etc).