TL;DR
¿Cómo puedo engañar a mi propio sendmail haciéndole creer que un correo electrónico proviene de una dirección IP particular, de modo que rechace el mensaje debido a una coincidencia DNSBL?
Detalles:
Ejecuto mi propio servidor de correo y la mayor parte del spam está bloqueado por las listas negras de DNS (DNSBL) que agregué a /etc/mail/sendmail.mc de esta manera:
dnl FEATURE(`dnsbl',`dnsbl.sorbs.net',`"554 Rejected " $&{client_addr} " found in dnsbl.sorbs.net"')dnl
dnl FEATURE(`dnsbl',`b.barracudacentral.org',`"554 Rejected " $&{client_addr} " found in b.barracudacentral.org"')dnl
Hoy llegó algo de spam (pasó todas las pruebas) y después de verificarCaja de herramientas MXyInformación DNSBLPude ver que agregar uno de varios DNSBL habría bloqueado este spam en particular.
Entonces, agregué otro DNSBL y ahora quiero probarlo volviendo a enviar este correo electrónico a Sendmail, pero ahí radica el problema: no vendrá de la dirección IP correcta y el DNSBL no lo verá como malo.
Este es el comando que normalmente habría usado:
formail -s /usr/sbin/sendmail -oi -t < testmail.mbox
Antes de intentar reinventar una rueda, pensé en preguntar aquí primero. Posibles ideas:
- ¿Existe una opción CLI para enviar correo para falsificar la IP de origen?
- ¿Quizás crear un archivo de mensajes en cola y ponerlo directamente en la cola?
- ¿Quizás configurar otra dirección IP en mi máquina y enviármela a mí mismo?
- ¿Un túnel OpenVPN o SSH sería una solución rápida?
- Posiblemente se podría cargar una biblioteca compartida para interceptar llamadas al sistema, al estiloLibFakeTime?
- Dtrace parece potente, ¿puede alterar llamadas de getsockopt(2) como esta?
¡Gracias!
Respuesta1
Después de pensarlo, la solución terminó siendo trivial:
ssh my-mail-server
# Add 1.2.3.4 as an alias (eth1:0) to interface eth1:
sudo ifconfig eth1:0 1.2.3.4 netmask 255.255.255.255
# Use 1.2.3.4 as the source ip, connect to port 25 on the local host:
nc -s 1.2.3.4 0.0.0.0 25
HELO 1.2.3.4
MAIL FROM: [email protected]
RCPT TO: [email protected]
DATA
Subject: is this really from 1.2.3.4?
Test from 1.2.3.4
.
QUIT
^C
# Deleting 1.2.3.4 from eth1:
sudo ifconfig eth1:0 0.0.0.0
Voilà, el encabezado resultante:
Return-Path: <[email protected]>
Received: from 1.2.3.4 ([1.2.3.4] (may be forged))
by earth.com (8.15.2/8.15.2) with SMTP id 1731SlYY013775
for <[email protected]>; Mon, 2 Aug 2021 18:29:14 -0700
Authentication-Results:the-force.com; dkim=permerror (bad message/signature format)
Date: Mon, 2 Aug 2021 18:28:47 -0700
From: <[email protected]>
Message-Id: <[email protected]>
Subject: Test subject
También reveló que la dirección IP no estaba siendo bloqueada (¿DNSBL no funciona?), por lo que, en ese sentido, la prueba fue un éxito. :-/
Actualización: ¡Oh! Las líneas en sendmail.mc deberían ser así:
FEATURE(`dnsbl',`dnsbl.sorbs.net',`"554 Rejected " $&{client_addr} " found in dnsbl.sorbs.net"')dnl
FEATURE(`dnsbl',`b.barracudacentral.org',`"554 Rejected " $&{client_addr} " found in b.barracudacentral.org"')dnl
En otras palabras, el 'dnl' en el frente comentaba todas las líneas DNSBL. :-(
Aaaa yestePor eso hacemos pruebas, señoras y señores.