こんにちはTelnet!そして今のところ。暗号化された接続用のOpenSSLs_clientコマンド



画像:JanBaby、PixabayCC0経由telnet



ネットワークユーティリティは 流行語 です。かつては、圧倒的多数のシステム管理者やその他のリモートサーバー管理ファンによって非常に積極的に使用されていました。このユーティリティを使用すると、リモートホストのポートにアクセスし、認証手順を実行して、このマシンでコマンドを実行できます。 ただし、telnetプロトコルは暗号化を使用しません。今日の現実では、セキュリティを犠牲にすることは手ごろな価格の贅沢です。ただし、ネットワークテスト、ポートチェック、IoTデバイスやルーターとのやり取りなど、telnetがさまざまな成功度で実行できるタスクは多数あります。 







このユーティリティは、pingの高度なバージョンとして簡単に使用できるようです。pingコマンド自体は、せいぜい、ホストの可用性のみをチェックします(たとえば、アクセスポリシーの制限のために、このコマンドがまったく機能しない場合があります)。ただし、telnetコマンドは、ポートが開いているかどうかを確認するだけでなく、このポートを介してネットワークサービスと通信することもできます。しかし、時間の経過とともに、暗号化された接続を使用する必要性にますます直面するようになり、telnetは再び無力になります。



OpenSSLとs_clientコマンド



したがって、ほとんどの場合、telnetの代わりにOpenSSLライブラリのs_clientコマンドを使用し ます。s_clientコマンドは、SSL / TLSクライアントの機能を実行して、暗号化キー、ハンドシェイクのタイプ、プロトコルなどのさまざまな設定でリモートホストに接続します。このコマンドを使用すると、セッションが再開されているかどうかを確認することもできます。



OpenSSLのインストール



OpenSSLライブラリがOSにまだインストールされていない場合は、パッケージマネージャーを使用してインストールできます。



$ 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プロトコルを使用して安全な暗号化接続を確立するには、特別なポートにアクセスする必要があります。



暗号化された接続でインタラクティブセッションを開く



この場合、ブラウザとWebサーバーは、ポート80に向けられたトラフィックが実際にはHTTPSトラフィック用に予約されているポート443にリダイレクトされるように通信します。これを知っていると、ポート443でリッスンする任意のWebサービスを使用できます。



まず、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の場合)を2回押すと、サーバーから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はかつての必須ツールではなくなりました。現在、多くのシステムで「レガシー」パッケージとして分類されています。一部のシステム管理者は、なぜデフォルトのインストールから除外されるのか疑問に思います。 Telnetは徐々にその関連性を失っています。これは客観的なプロセスです。 



ネットワークセキュリティはほとんどのシステムにとって不可欠であるため、適切なツールを理解する価値があります。それらが安全な接続で動作できることが重要です。したがって、テストまたはトラブルシューティング中に、システム保護とリスクセキュリティを無効にする必要はありません。






Macleodのクラウドサーバー 高速で安全です。



上記のリンクを使用するか、バナーをクリックして登録すると、任意の構成のサーバーをレンタルした最初の月が10%割引になります。






All Articles