Назад | Перейти на главную страницу

Как узнать, что SMTP-сервер находится в открытом реле?

я использовал nmap для тестирования сетевой безопасности. Было обнаружено, что сервер SMTP находится в режиме открытой ретрансляции. Вот результат:

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)

Я не могу воспроизвести эту проблему. Как мне самому воспроизвести его без сканера?

Процедура Microsoft для обнаружения открытых реле - ручные команды telnet, слишком много, чтобы публиковать здесь. http://support.microsoft.com/kb/324958

Автоматический тест http://www.mailradar.com/openrelay/ Однако, когда я использовал это с Microsoft IIS6, тесты с адресом электронной почты, окруженным речевыми метками (например, метод 7 RCPT TO: <"relaytest@mailradar.com">), кажутся неудачными, но фактически не отправляются. Если вы окажетесь в такой ситуации, возможно, вы захотите провести дальнейшее исследование настроек и убедиться, что они не попадают туда, куда вы не хотите. 178.209.36.55, однако, проходит все эти испытания.

Как только вы будете довольны, что не используете открытое реле, следующий шаг - убедиться, что вы не рассеялись обратно. Обратное рассеяние - это когда третья сторона отправляет электронное письмо на недоставленный адрес с поддельным заголовком отправителя, поэтому отчет о недоставке отправляется очевидному отправителю (поддельный).

Часто это происходит из-за того, что сервер настроен на ретрансляцию почты для всего домена без списка допустимых пользователей, поэтому он сначала принимает электронную почту, а затем не сможет ретранслировать ее на сервер со списком допустимых пользователей.

Простой тест - я собираюсь позвонить на ваш внешний личный адрес электронной почты me@hotmail.com и ваш домен - domain.com.

ehlo hotmail.com
почта от me@hotmail.com
rcpt на: invaliduser@domain.com
данные
тема: тема
текст
.

Затем проверьте учетную запись me@hotmail.com (возможно, в папке нежелательной почты) на предмет отчета о недоставке от чего-то вроде postmaster@domain.com.

Как сказал Джуви в своем ответе, просто установите сетевое соединение с tcp / 25 рассматриваемого сервера. Для этого вы можете использовать telnet или netcat.

Вот пример SMTP-транзакции:

http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol#SMTP_transport_example

Реле закрывается, если происходит сбой после попытки отправить RCPT, который сервер не настроен для приема. Ретранслятор открыт, если он принимает любой домен, указанный в строке RCPT.

Я не знаю, что делает сканирование nmap, чтобы определить, есть ли у вас открытое реле. Следует иметь в виду, что ваш SMTP-сервер может быть настроен на прием всего трафика с тестируемого IP-адреса, так что да, он открыт, но не для остального мира, так что это может быть нормально. Для уверенности следует запустить тест с удаленного компьютера.

Это код, который у меня был в папке со сценариями. Не могу вспомнить, где я это взял. Кредиты оригинальному автору:

#!/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('relayfromtest@testing.com');
    $smtp->to('relaytotest@local.com')
       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;

Вы можете просто войти в систему вручную, используя telnet на порту 25.

Тогда вы говорите HELO и попробуйте MAIL FROM: <mailadress> следующий RCPT TO: <mailaddress> В этот момент он должен сказать вам, что отклонил адрес, потому что отказал в доступе, если это не открытый ретранслятор. Если он открыт, он сделает то, что вы ему только что сказали - отправьте электронное письмо.

Хотя ответы здесь указывают в правильном направлении, я хотел бы добавить отказ от ответственности:

Сервер электронной почты, который будет ретранслировать, не обязательно является открытым ретранслятором. Если у меня есть приложение, работающее на сервере, которому нужно отправлять электронную почту, и я настраиваю свой почтовый сервер, чтобы позволить этому серверу приложений ретранслировать через него, помещая IP-адрес сервера в список «разрешенных для ретрансляции» на моем почтовом сервере, или если я настраиваю свое приложение для аутентификации на моем почтовом сервере, и я настраиваю свой почтовый сервер на разрешающую ретрансляцию с аутентификацией, это не открытый ретранслятор. Это просто реле (аутентифицированное или разрешенное на основе IP-адреса и т. Д.).

Открытый ретранслятор - это почтовый сервер, который позволяет любому пользователю, системе и т. Д. Ретранслировать через него.

Таким образом, простое соединение telnet с портом 25 вашего почтового сервера и отправка электронной почты в домен, для которого сервер не является авторитетным, не является железным указанием на то, является ли почтовый сервер открытым ретранслятором, без дополнительных сведений о том, как сервер настроен.