Como descobrir que o servidor SMTP está em retransmissão aberta?

1

Eu usei nmap para testes de segurança de rede. Descobriu que o servidor SMTP estava em retransmissão aberta. Aqui está a saída:

nmap --script smtp-open-relay testwww.confidesk.com
PORT     STATE  SERVICE
25/tcp   open   smtp
|_smtp-open-relay: Server is an open relay (16/16 tests)

Não consigo reproduzir este problema. Como posso reproduzi-lo sozinho sem scanner?

    
por Andrei Botalov 10.02.2012 / 11:20

5 respostas

2

Como juwi tem em sua resposta, basta fazer uma conexão de rede para tcp / 25 do servidor em questão. Você pode usar telnet para isso, ou netcat.

Veja um exemplo de uma transação SMTP:

link

Um relé é fechado se falhar após você tentar enviar um RCPT que o servidor não está configurado para aceitar. Um relé é aberto se aceitar qualquer domínio que você especificar em uma linha RCPT.

Eu não sei o que o nmap scan está fazendo para determinar se você tem um retransmissor aberto. Uma coisa a ter em mente é que o seu servidor SMTP pode estar configurado para aceitar todo o tráfego do IP que você está testando, então, sim, ele está aberto, mas não para o resto do mundo, então isso pode ser OK. Você deve executar o teste de uma caixa remota para ter certeza.

    
por 10.02.2012 / 11:40
2

Procedimento da Microsoft para detectar relés abertos - comandos telnet manuais, muito para postar aqui. link

Teste automatizado link No entanto, quando eu usei isso com o Microsoft IIS6, os testes com o endereço de e-mail estão cercados de marcas de voz ( Por exemplo, o método 7 RCPT TO: < "[email protected]" >) parece falhar, mas na verdade não é enviado. Se você se encontrar nessa situação, você pode querer investigar melhor as configurações e, na verdade, verificar se elas não estão acabando em algum lugar que você não deseja. 178.209.36.55 navega através de todos estes testes.

Uma vez que você está feliz, você não está executando um revezamento aberto, o próximo passo é garantir que você não está retrocedendo. Backscatter é quando um terceiro envia um email para um endereço não entregue com um cabeçalho do remetente falsificado, para que um NDR seja enviado ao remetente aparente (falsificado).

Isso geralmente ocorre como resultado de um servidor configurado para retransmitir mensagens para um domínio inteiro sem uma lista de usuários válidos. Assim, ele aceitará o e-mail inicialmente e não poderá retransmiti-lo para um servidor com uma lista de usuários válidos.

Teste simples - vou ligar para o seu endereço de e-mail pessoal externo [email protected] e seu domínio é domain.com

ehlo hotmail.com
mail de [email protected]
rcpt para: [email protected]
data

assunto: assunto
texto
.

Em seguida, verifique a conta [email protected] (provavelmente na pasta de lixo eletrônico) de um NDR de algo como [email protected].

    
por 10.02.2012 / 16:51
1

Este é o código que eu tinha na minha pasta de script. Não me lembro onde consegui. Créditos ao autor original:

#!/usr/bin/perl -w
#Script to check for Open Relay EMAIL Servers on port 25
#Author: Felipe Ferreira  fel.h2o(at)gmail Date: 18/02/2009
#ref. http://www.perlmonks.org/index.pl?node_id=718552
#TODO: 
#1. Should get from a list of IPs, should report any Open servers to a .txt file
#smtp->code() and message() are the responses of the server!

use Net::SMTP;
my $host;
my $filename = "servers.txt";

#open .txt file with all servers names or IPs
#open($filehandle, "<" . $filename);
open FILE, "<servers.txt" or die $!;
while (my $host = <FILE>) {
    print "Testing: $host";
    my $smtp = Net::SMTP->new($host, 
        Hello => "admin", 
        Timeout => 3,
        Debug => 0);
    if (!$smtp) {       print STDOUT "No connection to $host \n";

    }
    else {
    $smtp->mail('[email protected]');
    $smtp->to('[email protected]')
       or 
       print "SERVIDOR OK: $host RCPT TO: ", $smtp->code(), " ", $smtp->message();
    if ($smtp->code() eq "250" ) {
       print "SERVIDOR CRITICAL: $host Tiene problema de OPEN RELAY!!!";
    }
#   $smtp->quit;    
    }
} #Next host
close FILE;
    
por 10.02.2012 / 11:25
1

Você pode apenas fazer o login manualmente usando o telnet na porta 25.

Então você diz HELO e tente MAIL FROM: <mailadress> em seguida RCPT TO: <mailaddress> Nesse ponto, ele deve informar que rejeitou o endereço porque negou o acesso se não for um retransmissor aberto. Se estiver aberto, fará o que você acabou de dizer - envie um e-mail.

    
por 10.02.2012 / 11:29
0

Enquanto as respostas aqui apontam na direção certa, gostaria de adicionar um aviso de isenção:

Um servidor de e-mail que será retransmitido não é necessariamente um retransmissor aberto. Se eu tiver um aplicativo em execução em um servidor que precise enviar e-mail e configurar meu servidor de e-mail para permitir que o servidor de aplicativos retransmita o endereço IP do servidor em uma lista de "permissão para retransmissão" em meu servidor de e-mail, ou se eu configurar meu aplicativo para autenticar em meu servidor de e-mail e configurar meu servidor de e-mail para permitir a retransmissão autenticada, que não é um retransmissor aberto. É simplesmente um relé (autenticado ou permitido com base no endereço IP, etc.).

Um retransmissor aberto é um servidor de e-mail que permite a qualquer usuário, sistema etc. passar por ele.

Portanto, basta estabelecer uma conexão telnet com a porta 25 do servidor de e-mail e enviar e-mail para um domínio para o qual o servidor não tem autoridade não é uma indicação de que o servidor de e-mail seja um retransmissor aberto, sem saber mais sobre como o servidor está configurado.

    
por 10.02.2012 / 12:49

Tags