я использовал 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 вашего почтового сервера и отправка электронной почты в домен, для которого сервер не является авторитетным, не является железным указанием на то, является ли почтовый сервер открытым ретранслятором, без дополнительных сведений о том, как сервер настроен.