DR
Como posso enganar meu próprio sendmail fazendo-o pensar que um e-mail vem de um endereço IP específico, de modo que ele rejeite a mensagem devido a uma correspondência de DNSBL?
Detalhes:
Eu administro meu próprio servidor de e-mail e a maior parte do spam é bloqueada pelas listas negras de DNS (DNSBL) que adicionei ao /etc/mail/sendmail.mc assim:
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
Hoje chegou algum spam (passando em todos os testes), e depois de verificarCaixa de ferramentas MXeInformações DNSBLpude ver que adicionar uma das várias DNSBLs teria bloqueado esse spam específico.
Então, adicionei outro DNSBL e agora quero testá-lo reenviando este e-mail para o Sendmail, mas é aí que reside o problema: ele não virá do endereço IP correto e o DNSBL não o verá como ruim.
Aqui está o comando que eu normalmente teria usado:
formail -s /usr/sbin/sendmail -oi -t < testmail.mbox
Antes de tentar reinventar uma roda, pensei em perguntar aqui primeiro. Ideias possíveis:
- Existe uma opção CLI para sendmail para falsificar o IP de origem?
- Talvez crie um arquivo de mensagem na fila e coloque-o diretamente na fila?
- Talvez configurar outro endereço IP na minha máquina e enviar para mim mesmo com ele?
- Um túnel OpenVPN ou SSH seria uma solução rápida?
- Possivelmente, uma biblioteca compartilhada poderia ser carregada para interceptar chamadas do sistema, à laLibFakeTime?
- O Dtrace parece poderoso, ele pode alterar chamadas de getockopt(2) assim?
Obrigado!
Responder1
Depois de dormir sobre isso, a solução acabou sendo 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à, o cabeçalho 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
Também revelou que o endereço IP não estava sendo bloqueado (DNSBL não funciona?), então nesse sentido o teste foi um sucesso. :-/
Atualização: D'oh! As linhas em sendmail.mc deveriam ser assim:
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
Em outras palavras, o 'dnl' na frente comentava todas as linhas da DNSBL. :-(
Eaaaaesseé por isso que testamos, senhoras e senhores.