この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:6
ページ更新者:guest
更新日時:2026-06-11 07:12:00

タイトル: Telnet
SEOタイトル: 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 で包めば、暗号路の上に乗ります。