08-2. Telnet 協定:遠端登入的起源

深入理解 Telnet 的運作原理與為何被 SSH 取代

📡 Telnet 協定:遠端登入的起源

⏱️ 閱讀時間: 8 分鐘 🎯 難度: ⭐ (簡單)


🎯 本篇重點

理解 Telnet 的基本概念、運作原理、為什麼不安全、與 SSH 的差異,以及現代的有限用途。


🤔 什麼是 Telnet?

Telnet (Teletype Network) = 遠端終端機協定

一句話解釋: Telnet 是最早的遠端登入協定(1969年),讓你可以透過網路連線到另一台電腦的終端機,但所有資料都是明文傳輸,非常不安全。

比喻:透明玻璃屋的電話

Telnet = 在透明玻璃屋裡打電話
- 所有人都能看到你在說什麼
- 帳號密碼、指令、輸出都被看光
- 完全沒有隱私

SSH = 在隔音密封房間裡打電話
- 外人完全聽不到
- 所有內容都加密
- 完全安全

🏗️ Telnet 在網路模型中的位置

OSI 7 層模型

┌──────────────────────────────┬─────────────────┐
│ 7. Application Layer (應用層) │  Telnet         │ ← Telnet 在這裡
├──────────────────────────────┼─────────────────┤
│ 6. Presentation Layer (表示層)│  明文(無加密)  │
├──────────────────────────────┼─────────────────┤
│ 5. Session Layer (會話層)     │  建立、維護會話  │
├──────────────────────────────┼─────────────────┤
│ 4. Transport Layer (傳輸層)   │  TCP            │
├──────────────────────────────┼─────────────────┤
│ 3. Network Layer (網路層)     │  IP             │
├──────────────────────────────┼─────────────────┤
│ 2. Data Link Layer (資料鏈結層)│  Ethernet       │
├──────────────────────────────┼─────────────────┤
│ 1. Physical Layer (實體層)    │  網路線、光纖    │
└──────────────────────────────┴─────────────────┘

Telnet 位於第 7 層(應用層)

  • Telnet 是應用層協定
  • 提供遠端終端機服務
  • 沒有加密(表示層是明文)

TCP/IP 4 層模型

┌─────────────────────────────┬─────────────────┐
│ 4. Application Layer (應用層) │  Telnet         │ ← Telnet 在這裡
├─────────────────────────────┼─────────────────┤
│ 3. Transport Layer (傳輸層)  │  TCP            │
├─────────────────────────────┼─────────────────┤
│ 2. Internet Layer (網際網路層)│  IP             │
├─────────────────────────────┼─────────────────┤
│ 1. Network Access (網路存取層)│  Ethernet       │
└─────────────────────────────┴─────────────────┘

Telnet 位於第 4 層(應用層)

  • 在 TCP/IP 模型中,Telnet 是應用層協定
  • 使用 TCP Port 23
  • TCP 提供可靠傳輸

對比表:

協定OSI 層級TCP/IP 層級Port加密安全性現代使用
TelnetLayer 7Layer 423❌ 明文⚠️ 極不安全❌ 已淘汰
SSHLayer 7Layer 422✅ 加密✅ 安全✅ 主流
rloginLayer 7Layer 4513❌ 明文⚠️ 不安全❌ 已淘汰

重點:

  • Telnet 是應用層協定(兩種模型都是)
  • 使用 TCP Port 23
  • 完全明文傳輸(帳號、密碼、所有資料)
  • 現代絕對不應該使用(除了特殊測試場景)

為什麼 Telnet 使用 TCP?

遠端登入的需求:
1. 可靠性 ✅
   每個指令都必須送達
   TCP 保證可靠傳輸

2. 順序性 ✅
   指令必須按順序執行
   TCP 保證順序

3. 互動式 ✅
   需要持續的雙向通訊
   TCP 提供全雙工連線

UDP 不適合:
❌ 不可靠(指令可能丟失)
❌ 無順序保證
❌ 不適合互動式操作

📜 歷史:Telnet 的誕生與衰落

時間線

1969 年 📡 Telnet 誕生
       └─ RFC 15 定義
          ARPANET 時代的產物
          當時網路只在學術機構,沒考慮安全

1973 年 📝 Telnet 標準化
       └─ RFC 854、855
          成為正式標準

1980s  🌐 Telnet 黃金時期
       └─ 大學、研究機構廣泛使用
          Unix 系統的標準遠端登入方式

1995 年 🔐 SSH 誕生
       └─ Tatu Ylönen 發明 SSH
          因為密碼竊聽事件而創造

1999 年 📉 Telnet 開始式微
       └─ SSH 普及
          安全意識提高

2006 年 ⚠️ 正式被標示為不安全
       └─ 各大組織禁用 Telnet
          PCI DSS 等標準禁止使用

2010s  ❌ 幾乎完全淘汰
       └─ 只剩測試用途
          正式環境禁用

現在   🔬 僅存測試場景
       └─ 測試網路服務
          除錯 SMTP、HTTP 等協定

為什麼 Telnet 會被淘汰?

1969 年的網路環境:
- 只有大學和研究機構使用
- 所有人都是「好人」
- 沒有駭客概念
- 安全性不是考量

現代網路環境:
- 全球數十億人使用
- 充滿惡意攻擊者
- 資料竊取、間諜活動
- 安全性是首要考量

結果:
Telnet 的明文傳輸設計
在現代網路環境中
完全不可接受!

🚨 Telnet 的安全問題

問題 1:明文傳輸帳號密碼

場景:用 Telnet 登入伺服器

你輸入:
telnet 192.168.1.100
Username: admin
Password: myPassword123

網路封包(明文):
User: admin
Pass: myPassword123

駭客用 Wireshark 抓包:
👁️ 看到 → Username: admin
👁️ 看到 → Password: myPassword123

結果:
❌ 帳號密碼完全暴露
❌ 駭客可以直接登入你的帳號
❌ 完全沒有防護

實際抓包範例:

Telnet 封包內容(明文可見):

Frame 1: Username
Data: admin\r\n

Frame 2: Password
Data: myPassword123\r\n

Frame 3: Command
Data: ls -la /home\r\n

Frame 4: Output
Data: drwxr-xr-x 5 admin admin 4096 Jan 15 20:00 .\r\n
      drwxr-xr-x 3 root  root  4096 Jan 01 00:00 ..\r\n
      -rw------- 1 admin admin  220 Jan 15 20:00 secret.txt\r\n

所有內容一覽無遺!

問題 2:所有指令都被看光

你執行的指令:
$ cat /etc/passwd
$ vim secret.txt
$ mysql -u root -p
  password: db_password_123

駭客看到:
✅ 你的系統結構(/etc/passwd)
✅ 你的敏感檔案(secret.txt)
✅ 你的資料庫密碼(db_password_123)

結果:
❌ 完全沒有隱私
❌ 所有操作都被監控
❌ 系統完全暴露

問題 3:中間人攻擊(MITM)

正常流程:
你 ↔ Telnet ↔ 伺服器

中間人攻擊:
你 ↔ 駭客 ↔ 伺服器
      ↑
   偽裝成伺服器

過程:
1. 你以為連到伺服器
   實際連到駭客的假伺服器

2. 你輸入帳號密碼
   駭客記錄下來

3. 駭客轉發給真伺服器
   你完全不知道被攔截

4. 駭客可以:
   - 記錄所有指令
   - 修改指令(植入惡意指令)
   - 竊取資料

結果:
❌ 無法驗證伺服器身份
❌ 無法防止中間人攻擊
❌ 資料可能被竄改

問題 4:無法防止重播攻擊

場景:駭客錄下你的登入過程

駭客做的事:
1. 抓取你的登入封包
   Username: admin
   Password: myPassword123

2. 稍後重播(Replay)這些封包
   → 直接登入你的帳號

3. 不需要破解密碼
   → 直接重用你的登入資料

結果:
❌ 無法防止重播攻擊
❌ 即使改密碼,舊封包仍可能有用

📡 Telnet 運作原理

連線建立流程

Client                          Server (Port 23)
  │                                  │
  ├──── 1. TCP 連線 ────────────────>│
  │     (三次握手)                     │
  │                                  │
  │<──── 2. 歡迎訊息 ────────────────┤
  │     "Welcome to Server"          │
  │                                  │
  ├──── 3. Username ────────────────>│
  │     "admin"                      │
  │                                  │
  │<──── 4. Password Prompt ─────────┤
  │     "Password:"                  │
  │                                  │
  ├──── 5. Password ────────────────>│
  │     "myPassword123"              │
  │                                  │
  │<──── 6. Login Success ───────────┤
  │     "Login successful"           │
  │                                  │
  ├──── 7. Command ─────────────────>│
  │     "ls -la"                     │
  │                                  │
  │<──── 8. Output ──────────────────┤
  │     (檔案清單)                    │
  │                                  │
  └──── 9. Logout ──────────────────>│
        "exit"                        │

所有內容都是明文!

Telnet 命令

基本連線:

# 連線到伺服器
telnet server.example.com

# 指定 Port
telnet server.example.com 23

# 連線到 IP
telnet 192.168.1.100

特殊鍵:

Ctrl + ]      進入 Telnet 命令模式
quit          離開 Telnet
close         關閉連線
display       顯示設定
status        顯示狀態

Telnet 協定訊息格式

Telnet 使用 NVT(Network Virtual Terminal)

每個字元直接傳送(明文):
輸入 'a' → 傳送 0x61
輸入 'b' → 傳送 0x62

特殊命令使用 IAC(Interpret As Command):
IAC = 0xFF (255)

範例:
IAC WILL ECHO
→ 0xFF 0xFB 0x01
→ 「伺服器要控制回顯」

IAC DO ECHO
→ 0xFF 0xFD 0x01
→ 「客戶端同意伺服器控制回顯」

🔧 Telnet 的現代用途(僅限測試)

用途 1:測試 HTTP 伺服器

# 手動發送 HTTP 請求
telnet www.example.com 80

# 連線後輸入:
GET / HTTP/1.1
Host: www.example.com

# 按 Enter 兩次

# 看到回應:
HTTP/1.1 200 OK
Content-Type: text/html
...

優點:
✅ 可以手動測試 HTTP 協定
✅ 除錯 HTTP 問題
✅ 理解 HTTP 運作原理

用途 2:測試 SMTP 伺服器

# 測試郵件伺服器
telnet mail.example.com 25

# SMTP 會話:
220 mail.example.com SMTP Ready
HELO client.example.com
250 mail.example.com
MAIL FROM:<sender@example.com>
250 OK
RCPT TO:<recipient@example.com>
250 OK
DATA
354 Start mail input
Subject: Test
This is a test email.
.
250 OK Queued
QUIT
221 Bye

優點:
✅ 測試 SMTP 是否運作
✅ 除錯郵件發送問題
✅ 驗證郵件伺服器設定

用途 3:測試 Port 是否開啟

# 測試 MySQL Port
telnet 192.168.1.100 3306

# 如果連線成功:
Connected to 192.168.1.100
→ Port 3306 開啟 ✅

# 如果連線失敗:
Connection refused
→ Port 3306 關閉 ❌

# 測試 Redis
telnet localhost 6379
PING
+PONG

優點:
✅ 快速測試 Port 開啟狀態
✅ 不需要安裝專用工具
✅ 大多數系統內建

用途 4:測試 POP3/IMAP

# 測試 POP3
telnet mail.example.com 110
USER username
PASS password
LIST
QUIT

# 測試 IMAP
telnet mail.example.com 143
a001 LOGIN username password
a002 LIST "" "*"
a003 LOGOUT

優點:
✅ 測試郵件收取
✅ 除錯 POP3/IMAP 問題

⚖️ Telnet vs SSH 詳細對比

安全性對比

特性TelnetSSH
傳輸加密❌ 明文✅ 加密 (AES-256)
密碼安全❌ 明文可見✅ 加密傳輸
伺服器驗證❌ 無✅ Host Key 驗證
完整性保護❌ 無✅ HMAC
防中間人❌ 無✅ 有
防重播攻擊❌ 無✅ 有
公私鑰認證❌ 不支援✅ 支援

功能對比

功能TelnetSSH
遠端登入
檔案傳輸✅ (SCP, SFTP)
Port Forwarding
X11 Forwarding
壓縮傳輸
連線多路復用

效能對比

Telnet:
✅ 低開銷(無加密)
✅ 速度快
❌ 但不安全,速度優勢無意義

SSH:
⚠️ 有加密開銷
✅ 現代硬體影響極小
✅ 安全性遠大於效能損失

結論:
SSH 的加密開銷在現代硬體上幾乎可忽略
安全性遠比速度重要
完全沒有理由使用 Telnet

🎓 面試常見問題

Q1:Telnet 和 SSH 有什麼差別?為什麼不能用 Telnet?

A:最大差異是安全性

Telnet(已淘汰):
❌ 明文傳輸
- 帳號密碼明文可見
- 所有指令明文可見
- 可被竊聽、竄改
- 無法驗證伺服器身份

範例危害:
用 Wireshark 抓包可直接看到:
Username: admin
Password: myPassword123
→ 帳號密碼直接暴露!

SSH(現代標準):
✅ 加密傳輸
- 所有資料加密(AES-256)
- 伺服器身份驗證(Host Key)
- 完整性保護(HMAC)
- 公私鑰認證

範例:
即使被監聽,也只能看到:
sD9fj#$kL@mNpQ2vX... (亂碼)
→ 完全看不懂!

為什麼不能用 Telnet?
1. 安全標準禁止(PCI DSS、ISO 27001)
2. 公司政策禁止
3. 容易被攻擊
4. 法規要求加密

例外(僅限測試):
✅ 測試 HTTP/SMTP 等協定
✅ 測試 Port 開啟狀態
✅ 區域網路除錯
⚠️ 但絕對不能用於正式登入!

記憶:
Telnet = 明信片(任何人都能看)
SSH = 密封信件(只有收件人能看)

Q2:Telnet 現在還有什麼用途?

A:僅限測試用途,絕對不能用於正式登入

現代用途(都是測試):

1️⃣ 測試 HTTP 伺服器
telnet www.example.com 80
GET / HTTP/1.1
Host: www.example.com

→ 手動發送 HTTP 請求
→ 除錯 HTTP 問題

2️⃣ 測試 SMTP 郵件伺服器
telnet mail.example.com 25
HELO client.com
MAIL FROM:<test@test.com>
...

→ 測試郵件發送
→ 驗證 SMTP 設定

3️⃣ 測試 Port 開啟狀態
telnet 192.168.1.100 3306

成功 → Port 開啟
失敗 → Port 關閉

4️⃣ 測試 Redis/Memcached
telnet localhost 6379
PING
+PONG

→ 測試快取服務

禁止用途:
❌ 遠端登入伺服器(用 SSH)
❌ 管理網路設備(用 SSH)
❌ 任何需要帳號密碼的場景
❌ 公共網路環境

替代方案:
HTTP 測試 → curl、httpie
Port 測試 → nc (netcat)、nmap
遠端登入 → SSH

結論:
Telnet 只在測試無需認證的協定時有用
其他時候都應該用 SSH

Q3:如何用 Telnet 測試網路服務是否正常?

A:測試各種協定的 Port 和基本功能

測試 Web Server(HTTP):
telnet www.example.com 80

輸入:
GET / HTTP/1.1
Host: www.example.com

[按 Enter 兩次]

看到回應 → Web Server 正常
Connection refused → Web Server 未啟動

測試 SMTP:
telnet mail.example.com 25

看到:
220 mail.example.com SMTP Ready
→ SMTP 正常

Connection refused
→ SMTP 未啟動

測試 MySQL:
telnet 192.168.1.100 3306

Connected
→ MySQL Port 開啟

Connection refused
→ MySQL 未啟動或 Port 錯誤

測試 Redis:
telnet localhost 6379

輸入:
PING

看到:
+PONG
→ Redis 正常

其他測試:
POP3: telnet mail.example.com 110
IMAP: telnet mail.example.com 143
FTP:  telnet ftp.example.com 21

優點:
✅ 快速測試 Port 開啟
✅ 驗證服務運作
✅ 不需要安裝額外工具

注意:
⚠️ 只能測試,不能正式使用
⚠️ 不要輸入真實帳號密碼
⚠️ 現代更推薦用 nc (netcat) 或 curl

Q4:為什麼 Telnet 被設計成明文傳輸?

A:時代背景問題

1969 年的網路環境:

使用者:
- 只有大學教授、研究人員
- 只有少數幾個機構
- 所有人都是「好人」

網路:
- ARPANET(只有幾個節點)
- 完全封閉的學術網路
- 沒有外部連線

安全概念:
- 沒有「駭客」概念
- 沒有「資料竊取」概念
- 信任所有使用者

技術限制:
- 電腦運算能力極低
- 加密運算太耗資源
- 速度優先於安全

設計哲學:
「簡單就好」
不需要複雜的加密
專注於功能實現

現代網路環境(為什麼不能再用):

使用者:
- 全球數十億人
- 任何人都能上網
- 充滿惡意攻擊者

網路:
- Internet(開放網路)
- 全球互連
- 無法信任任何連線

安全威脅:
- 駭客攻擊
- 資料竊取
- 間諜活動
- 身份盜用

技術進步:
- 現代電腦運算能力強大
- 加密開銷可忽略
- 安全性是必需品

結論:
Telnet 是時代產物
在封閉、信任的環境中設計
完全不適合現代開放、充滿威脅的 Internet
這就是為什麼必須用 SSH 取代

✅ 重點回顧

Telnet 定義:

  • Telnet = Teletype Network
  • 最早的遠端登入協定(1969年)
  • TCP Port 23

核心問題:

  • 明文傳輸(帳號、密碼、所有資料)
  • ❌ 無伺服器身份驗證
  • ❌ 無完整性保護
  • ❌ 無法防止中間人攻擊
  • ❌ 無法防止重播攻擊

vs SSH:

特性TelnetSSH
加密
安全性⚠️ 極不安全✅ 安全
現代使用❌ 已淘汰✅ 主流

現代用途(僅限測試):

# 測試 HTTP
telnet www.example.com 80

# 測試 SMTP
telnet mail.example.com 25

# 測試 Port
telnet 192.168.1.100 3306

# 測試 Redis
telnet localhost 6379

禁止用途:

  • ❌ 遠端登入伺服器(用 SSH)
  • ❌ 任何需要帳號密碼的場景
  • ❌ 公共網路環境
  • ❌ 正式生產環境

為什麼被淘汰:

  • 1969 年設計(封閉學術網路)
  • 沒考慮安全性
  • 現代網路充滿威脅
  • 法規要求加密(PCI DSS、ISO 27001)

替代方案:

  • 遠端登入 → SSH
  • HTTP 測試 → curl、httpie
  • Port 測試 → nc (netcat)、nmap
  • 檔案傳輸 → SCP、SFTP

面試重點:

  • ✅ Telnet vs SSH 差異(明文 vs 加密)
  • ✅ 為什麼不能用 Telnet(安全問題)
  • ✅ 現代測試用途(HTTP、SMTP、Port)
  • ✅ 歷史背景(1969 年設計)

記憶口訣:

  • Telnet = 「明文傳輸,絕對不用」
  • SSH = 「加密安全,現代標準」
  • 用途 = 「只測試,不登入」

重要:

🚨 在任何正式環境中使用 Telnet 都是嚴重的安全漏洞!
🚨 PCI DSS、ISO 27001 等標準明確禁止 Telnet!
🚨 永遠使用 SSH 代替 Telnet 進行遠端登入!

上一篇: 08-1. SSH 安全遠端登入 下一篇: 09-1. 電子郵件協定

相關文章:


最後更新:2025-01-15

0%