10.

Telnet とは — ポート 23、暗号なしの危険性、SSH への移行、HTTP/SMTP の疎通確認に使う方法

編集
この記事の要点
  • Telnet は 1969 年 RFC 15 で定義された、ネットワーク経由でリモート端末にログインするためのプロトコル
  • ポートは TCP 23。通信は全て平文で、パスワードも盗聴される → リモートログイン用途では使用禁止
  • 現代では SSH (TCP 22) に完全に置き換えられ、リモートシェルとしての利用は廃止が進む
  • 一方、telnet host portTCP ポートの疎通確認ツールとして今も健在。HTTP/SMTP の手動疎通にも使える
  • Windows 10/11 では既定で無効 → 「Windows の機能の有効化または無効化」から Telnet クライアントを有効化
  • Mac / Linux では非標準化が進行 (macOS は 2018 年から非同梱)。代替として nc (netcat) や Test-NetConnection

Telnet とは

Telnet (TELetype NETwork) は、ネットワーク経由でリモートホストの仮想端末を開くためのアプリケーション層プロトコルです。1969 年に RFC 15 で初版が定義された、TCP/IP プロトコル群の中でも最古参の一つです。

当時は LAN 内のメインフレーム・UNIX ホストにダム端末からログインする用途で広く使われましたが、通信内容を一切暗号化しないため、現在ではリモートログイン用途で使うことは事実上ありません。

仕様の概要

項目内容
RFCRFC 854 / 855 (1983 改訂版が現行)
ポートTCP 23
暗号化なし (ID/PW を含めて全て平文)
認証ホスト側の login プロセスに委譲 (平文)
OSI 層アプリケーション層
主な後継SSH (RFC 4250-4256, ポート 22)

なぜ危険なのか

Telnet セッションのトラフィックを tcpdump や Wireshark でキャプチャすると、キー入力 1 文字ごとにそのままの ASCII コードが流れているのが見えます。

$ sudo tcpdump -i any -A 'port 23'
12:00:01.111 IP client.49152 > srv.23: Flags [P.], length 1
"l"
12:00:01.234 IP client.49152 > srv.23: Flags [P.], length 1
"o"
12:00:01.345 IP client.49152 > srv.23: Flags [P.], length 1
"g"
12:00:01.456 IP client.49152 > srv.23: Flags [P.], length 1
"i"
12:00:01.567 IP client.49152 > srv.23: Flags [P.], length 1
"n"
   :
"P" "a" "s" "s" "w" "0" "r" "d" "1" "2" "3"   ← 丸見え

これは同一 LAN にいる攻撃者や、経路上の Wi-Fi AP / ISP でも全て読めることを意味します。ARP スプーフィングやMan-in-the-Middle (中間者) 攻撃で容易に資格情報が抜かれます。

SSH への移行

1995 年に Tatu Ylönen が SSH (Secure Shell) を発表して以来、リモートログイン用途は SSH に完全に置き換わりました。

観点TelnetSSH
ポートTCP 23TCP 22
暗号化なしAES / ChaCha20 等
サーバ認証なしホスト鍵 (公開鍵)
クライアント認証パスワード平文公開鍵 / パスワード (暗号化路上)
付加機能端末エミュレーションのみポート転送 / SFTP / SCP / X11 転送
クライアントtelnetssh / PuTTY / OpenSSH
# 昔: Telnet で UNIX ホストにログイン (現代は厳禁)
telnet 192.0.2.10
# login: alice
# Password: ****

# 現代: SSH を使う
ssh alice@192.0.2.10
ssh -i ~/.ssh/id_ed25519 alice@example.com

現代でも残る用途: TCP ポート疎通確認

リモートログインとしての出番は無くなりましたが、telnet コマンドは「指定ホストの指定 TCP ポートに繋がるか」を見る軽量な疎通テストツールとして今も使えます。

# Web サーバの 80 が開いているか
telnet www.example.com 80
# → "Connected to www.example.com." なら疎通 OK
# 抜けるには Ctrl+] → quit

# SMTP の 25
telnet mail.example.com 25
# → 220 mail.example.com ESMTP Postfix
# EHLO myhost
# → 250-mail.example.com

# 接続失敗時の見え方
telnet 192.0.2.99 22
# → "Trying 192.0.2.99..." のまま帰ってこない (Firewall 等で破棄)
# → "Connection refused"           (ホストに届くがリッスンしてない)

HTTP の手動疎通

telnet www.example.com 80
# 接続後、以下を貼り付けて空行 2 回
GET / HTTP/1.1
Host: www.example.com
Connection: close

# レスポンスが返ってくる
HTTP/1.1 200 OK
Server: nginx
Content-Type: text/html
   :

SMTP の手動疎通

telnet mail.example.com 25
220 mail.example.com ESMTP Postfix
EHLO myhost.example.org
250-mail.example.com
250-PIPELINING
250-SIZE 10485760
250 8BITMIME
MAIL FROM:<alice@example.org>
250 2.1.0 Ok
RCPT TO:<bob@example.com>
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: telnet test

hello
.
250 2.0.0 Ok: queued as ABC123
QUIT
221 2.0.0 Bye

Windows での有効化

Windows 10/11 では既定で Telnet クライアントが無効化されています。

# GUI からは
#   コントロールパネル → プログラム → Windows の機能の有効化または無効化
#   → 「Telnet クライアント」にチェック → OK

# PowerShell から (管理者)
Enable-WindowsOptionalFeature -Online -FeatureName TelnetClient

# 確認
Get-WindowsOptionalFeature -Online -FeatureName TelnetClient | Select State

# 使い方は Unix と同じ
telnet www.example.com 80

Mac / Linux での状況と代替

macOS は 10.13 High Sierra (2018) から telnet / ftp バイナリが同梱されなくなりました。Homebrew でインストール可能ですが、代替手段の方が現代的です。

# macOS で入れたい場合
brew install telnet

# 代替1: nc (netcat) - macOS / 主要 Linux に標準
nc -vz www.example.com 80
# → Connection to www.example.com 80 port [tcp/http] succeeded!

# 代替2: curl で HTTP 含めて確認
curl -v https://www.example.com/

# 代替3: PowerShell の Test-NetConnection (Windows)
Test-NetConnection www.example.com -Port 443
# → TcpTestSucceeded : True

# 代替4: bash の /dev/tcp (依存無しで便利)
echo > /dev/tcp/www.example.com/80 && echo OPEN || echo CLOSED

サーバ側 (telnetd) を絶対に開けない理由

  • パスワードが平文 → 同一 LAN でキャプチャ即漏洩
  • root ログインを許す古典的設定が多く、踏み台にされる
  • セッション乗っ取り (TCP hijack) も容易
  • 商用機器でもファームウェア管理用に Telnet が残っているケースがあるため、管理用 VLAN への ACL 隔離使い終わったら無効化が必須

FAQ

Q: Could not open connection to the host と出る
A: ファイアウォール / セキュリティグループで TCP 23 がブロックされているか、対象がポートを開いていません。ポート番号を疎通確認したいだけなら、SSH の 22 や HTTPS の 443 を telnet host port で試して、ネットワーク経路自体は通ることを確認してください。

Q: telnet で繋がるけど画面が崩れる
A: 端末タイプの折衝失敗です。TERM=vt100 telnet host や、改行コードの CR/LF オプションを telnet> set crlf で切り替えると改善することがあります。

Q: 業務システムがまだ Telnet 必須なのですが
A: SSH トンネル経由でアクセスする、または IPSec / VPN 内に閉じ込めるのが現実解です。Telnet パケット自体を VPN で包めば、暗号路の上に乗ります。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. HTTP
  2. HTTPS
  3. DNS
  4. FTP
  5. TFTP
  6. DHCP
  7. SMTP
  8. SNMP
  9. POP3
  10. Telnet
  11. NTP
  12. SSH

最近更新/作成されたページ