Отключить telnet для OpenSSL
Отсутствие шифрования в Telnet делает OpenSSL более безопасным вариантом подключения к удаленным системам.
Команда telnet — один из самых популярных инструментов устранения неполадок сети для всех, от системных администраторов до любителей сетевых технологий. На заре сетевых вычислений для подключения к удаленной системе использовался telnet. Вы можете использовать telnet для доступа к порту в удаленной системе, входа в систему и запуска команд на этом хосте.
Из-за отсутствия шифрования в telnet для этого задания он был заменен OpenSSL . Тем не менее, актуальность telnet сохранялась (а в некоторых случаях сохраняется и сегодня) как своего рода интеллектуальный ping
. Хотя команда ping
— отличный способ проверить работоспособность хоста, это все, на что она способна. Telnet, с другой стороны, не только подтверждает активный порт, но также может взаимодействовать со службой на этом порту. Несмотря на это, поскольку большинство современных сетевых служб зашифрованы, telnet может оказаться гораздо менее полезным в зависимости от того, чего вы пытаетесь достичь.
OpenSSL s_client
Для большинства задач, для которых раньше требовался telnet, теперь я использую команду OpenSSL s_client
. (Я использую Curl для некоторых задач, но это те случаи, когда я, вероятно, в любом случае не стал бы использовать telnet.) Большинство людей знают OpenSSL как библиотеку и платформу для шифрования, но не все понимают, что это также команда. Компонент s_client
команды openssl
реализует универсальный клиент SSL или TLS, помогая вам подключиться к удаленному хосту с помощью SSL или TLS. Он предназначен для тестирования и, по крайней мере внутри, использует те же функциональные возможности, что и библиотека.
Установить OpenSSL
Возможно, OpenSSL уже установлен в вашей системе Linux. Если нет, вы можете установить его с помощью менеджера пакетов вашего дистрибутива:
$ sudo dnf install openssl
В Debian или аналогичном:
$ sudo apt install openssl
После установки убедитесь, что он реагирует должным образом:
$ openssl version
OpenSSL x.y.z FIPS
Проверьте доступ к порту
Самое простое использование telnet — это задача, которая выглядит примерно так:
$ telnet mail.example.com 25
Trying 98.76.54.32...
Connected to example.com.
Escape character is '^]'.
Это открывает интерактивный сеанс с (в этом примере) любой службой, прослушивающей порт 25 (вероятно, почтовым сервером). Пока вы получаете доступ, вы можете общаться с сервисом.
Если порт 25 недоступен, в соединении отказано.
OpenSSL похож, хотя обычно менее интерактивн. Чтобы проверить доступ к порту:
$ openssl s_client -connect example.com:80
CONNECTED(00000003)
140306897352512:error:1408F10B:SSL [...]
no peer certificate available
No client certificate CA names sent
SSL handshake has read 5 bytes and written 309 bytes
Verification: OK
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
Однако это не более чем целевой пинг. Как видно из вывода, SSL-сертификат не был обменян, поэтому соединение немедленно прервалось. Чтобы получить максимальную отдачу от openssl s_client
, вам необходимо указать зашифрованный порт.
Интерактивный OpenSSL
Веб-браузеры и веб-серверы взаимодействуют таким образом, что трафик, направленный на порт 80, фактически перенаправляется на порт 443, зарезервированный для зашифрованного HTTP-трафика. Зная это, вы можете перейти к зашифрованным портам с помощью команды openssl
и взаимодействовать с любой веб-службой, запущенной на нем.
Сначала подключитесь к порту с помощью SSL. Использование опции -showcerts
приводит к печати сертификата SSL на вашем терминале, что делает первоначальный вывод намного более подробным, чем при выводе через telnet:
$ openssl s_client -connect example.com:443 -showcerts
[...]
0080 - 52 cd bd 95 3d 8a 1e 2d-3f 84 a0 e3 7a c0 8d 87 R...=..-?...z...
0090 - 62 d0 ae d5 95 8d 82 11-01 bc 97 97 cd 8a 30 c1 b.............0.
00a0 - 54 78 5c ad 62 5b 77 b9-a6 35 97 67 65 f5 9b 22 Tx\.b[w..5.ge.."
00b0 - 18 8a 6a 94 a4 d9 7e 2f-f5 33 e8 8a b7 82 bd 94 ..j...~/.3......
Start Time: 1619661100
Timeout : 7200 (sec)
Verify return code: 0 (ok)
Extended master secret: no
Max Early Data: 0
-
read R BLOCK
Вы остались в интерактивном сеансе. В конце концов этот сеанс закроется, но если вы будете действовать оперативно, вы сможете отправлять HTTP-сигналы на сервер:
[...]
GET / HTTP/1.1
HOST: example.com
Нажмите Return дважды, и вы получите данные для example.com/index.html
:
[...]
<body>
<div>
<h1>Example Domain</h1>
<p>This domain is for use in illustrative examples in documents. You may use this
domain in literature without prior coordination or asking for permission.</p>
<p><a href="https://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>
Почтовый сервер
Вы также можете использовать s_client
OpenSSL для тестирования зашифрованного почтового сервера. Чтобы это работало, имя пользователя и пароль тестового пользователя должны быть закодированы в Base64.
Вот простой способ сделать это:
$ perl -MMIME::Base64 -e 'print encode_base64("username");'
$ perl -MMIME::Base64 -e 'print encode_base64("password");'
После записи этих значений вы можете подключиться к почтовому серверу через SSL, обычно через порт 587:
$ openssl s_client -starttls smtp \
-connect email.example.com:587
> ehlo example.com
> auth login
##paste your user base64 string here##
##paste your password base64 string here##
> mail from: noreply@example.com
> rcpt to: admin@example.com
> data
> Subject: Test 001
This is a test email.
.
> quit
Проверьте свою электронную почту (в этом примере кода это admin@example.com
) на наличие тестового сообщения от noreply@example.com
.
OpenSSL или телнет?
Telnet по-прежнему используется, но это уже не тот незаменимый инструмент, которым он был когда-то. Во многих дистрибутивах эта команда была отнесена к «устаревшим» сетевым пакетам, но без telnet-ng
или какого-либо очевидного преемника администраторы иногда недоумевают, почему она исключена из установок по умолчанию. Ответ в том, что это уже не так важно, оно становится все менее и менее полезным — и это хорошо. Сетевая безопасность важна, поэтому освойтесь с инструментами, которые взаимодействуют с зашифрованными интерфейсами, чтобы вам не приходилось отключать средства защиты во время устранения неполадок.