[Информационная безопасность, Серверное администрирование] Привет, Telnet! И пока. Команда OpenSSL s_client для зашифрованных соединений (перевод)

Автор Сообщение
news_bot ®

Стаж: 6 лет 2 месяца
Сообщений: 27286

Создавать темы news_bot ® написал(а)
20-Май-2021 17:31

Изображение:  JanBaby, via Pixabay CC0
Сетевая утилита telnet на слуху. Её в своё время очень активно использовало подавляющее большинство системных администраторов и прочих любителей удалённого администрирования серверов. Утилита позволяет получить доступ к портам удалённого хоста, пройти процедуру авторизации и запускать команды на этой машине.
Но протокол telnet не использует шифрование. В сегодняшних реалиях жертвовать безопасностью — непозволительная роскошь. Однако, есть ряд задач, которые telnet с переменным успехом может выполнять: тестирование сети, проверка портов, а также взаимодействие с IoT устройствами и роутерами. 
Казалось бы, утилиту можно легко использовать, как продвинутую версию ping. Сама по себе, команда ping в лучшем случае всего лишь проверяет доступность хоста (иногда эту команду вообще не получится использовать, например, из-за ограничений политики доступа). А вот команда telnet не только проверяет, открыт ли порт, но и может взаимодействовать с сетевыми службами через этот порт. Но со временем мы всё чаще будет сталкиваться с необходимостью использовать зашифрованное соединение, где telnet вновь окажется бессилен.
OpenSSL и команда s_client
Поэтому в большинстве случаев вместо telnet я использую команду s_client из библиотеки OpenSSL. Команда s_client выполняет функции SSL/TLS клиента для подключения к удалённому хосту с различными настройками — ключ шифрования, вид рукопожатия, протокол и так далее. Команда также позволяет проверить, происходит ли возобновление сеанса.
Установка OpenSSL
Если библиотека OpenSSL ещё не установлена на вашей ОС, то её можно установить с помощью менеджера пакетов:
$ sudo dnf install openssl
Для Debian и некоторых других ОС команда будет выглядеть так:
$ sudo apt install openssl
После установки библиотека должна откликаться на эту команду:
$ openssl version
OpenSSL x.y.z FIPS

Проверка доступа к порту
Так работает команда telnet для проверки доступа к порту номер 25:
$ 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-сертификате, поэтому подключение было прервано, открыть сеанс не удалось. Чтобы установить безопасное зашифрованное соединение по протоколу HTTPS, нужно обращаться к специальному порту.
Открываем интерактивный сеанс с зашифрованным подключением
В этом случае браузеры и веб-серверы взаимодействуют таким образом, что трафик, направленный на порт 80, фактически перенаправляется на порт 443, зарезервированный для HTTPS-трафика. Зная это, вы можете с любой веб-службой, которая слушает порт 443.
Сначала подключимся к порту с помощью SSL. Используем опцию -showcerts, и SSL-сертификат будет распечатан на вашем терминале:
$ 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 (для MacOS) или ENTER (для Windows), и получим от сервера ответ в виде 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 можно использовать для тестирования зашифрованного соединения с почтовым сервером. Чтобы это работало, нам понадобится  имя пользователя и пароль (в моём случае — для тестового пользователя), закодированные в 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, на который я ожидаю получить тестовое сообщение от почтового сервера.
Неоправданный риск
Кто-то всё ещё использует telnet, но это уже не тот незаменимый инструмент, которым он когда-то был. Теперь во многих системах он классифицирован как «устаревший» пакет. Некоторые системные администраторы недоумевают, почему он исключён из установки по умолчанию. Telnet постепенно теряет актуальность. Это объективный процесс. 
Сетевая безопасность жизненно необходима для большинства систем, поэтому стоит разобраться с соответствующими инструментами. Важно, что они способны работать с защищёнными подключениями.  Так что во время тестирования или устранения неполадок не придётся отключать защиту системы и рисковать безопасностью.
Облачные серверы от Маклауд быстрые и безопасные.
Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!

оригинал
===========
Источник:
habr.com
===========

===========
Автор оригинала: Seth Kenlon (Red Hat)
===========
Похожие новости: Теги для поиска: #_informatsionnaja_bezopasnost (Информационная безопасность), #_servernoe_administrirovanie (Серверное администрирование), #_telnet, #_openssl, #_vds, #_vps, #_bystrye_servery (быстрые серверы), #_deshevye_servery (дешевые серверы), #_nadezhnyj_vds (надежный vds), #_blog_kompanii_maklaud (
Блог компании Маклауд
)
, #_informatsionnaja_bezopasnost (
Информационная безопасность
)
, #_servernoe_administrirovanie (
Серверное администрирование
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 01-Май 04:27
Часовой пояс: UTC + 5