画像: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%割引になります。