標籤:

SSH 協議埠號 22 背後的故事

為什麼 SSH(安全終端)的埠號是 22 呢,這不是一個巧合,這其中有個我(Tatu Ylonen,SSH 協議的設計者)未曾訴說的故事。

將 SSH 協議埠號設為 22 的故事

1995 年春我編寫了 SSH 協議的最初版本,那時候 telnet 和 FTP 正被廣泛使用。

當時我設計 SSH 協議想著是為了替代 telnet(埠 23)和 ftp(埠21)兩個協議的,而埠 22 是空閑的。我想當然地就選擇了夾在 telnet 和 ftp 的埠中間的數字。我覺得埠號雖然是個小事但似乎又存在著某種信念。但我到底要怎麼拿到那個埠號呢?我未曾擁有過任何一個埠號,但我卻認識幾個擁有埠號的人!

在那時取得埠號的事情其實說來挺簡單的。畢竟當時的網際網路(Internet)並不是很大,是網際網路爆炸的早期。埠號分配的活兒是 IANA(Internet Assigned Numbers Authority,互聯網數字分配機構)乾的。在那時這機構可相當於是網際網路先驅 Jon Postel 和 Joyce K. Reynolds 一般的存在。Jon 參與編寫了多項主要的協議標準,例如 IP(RFC 791)、ICMP(RFC 792)和 TCP(RFC 793)等一些你應該早有耳聞的協議。

我可以說是敬畏 Jon 先生的,他參與編寫了幾乎所有主要的網際網路標準文檔(Internet RFC)!

1995 年 7 月,就在我發布 ssh-1.0 前,我發送了一封郵件給 IANA:

From ylo Mon Jul 10 11:45:48 +0300 1995

From: Tatu Ylonen <ylo@cs.hut.fi>

To: Internet Assigned Numbers Authority <iana@isi.edu>

Subject: 請求取得一個埠號

Organization: 芬蘭赫爾辛基理工大學

親愛的機構成員:

我寫了個可以在不安全的網路環境中安全地從一台機器登錄到另一台機器的程序。它主要是對現有的 telnet 協議以及 rlogin 協議的功能性提升和安全性改進。說的具體些,就是可以防禦 IP、DNS 或路由等欺騙行為。我打算將我的軟體免費地發布在網際網路上,以得到廣泛地使用。

我希望為該軟體註冊一個特權埠號,要是這個埠號在 1 到 255 之間就更好了,這樣它就可以用在名字伺服器的 WKS 欄位中了。

我在附件中附上了協議標準的草案。這個軟體已經在本地運行了幾個月了,我已準備在獲得埠號後就發布。如果埠號分配一事安排的及時,我希望這周就將要發布的軟體準備好。我目前在 beta 版測試時使用的埠號是 22,如果要是能夠分配到這個埠,我就不用做什麼更改了(目前這個埠在列表中還是空閑的)。

軟體中服務的名稱叫 `ssh`(系 Secure Shell 的縮寫)。

您最真誠的,

Tatu Ylonen <ylo@cs.hut.fi>

(LCTT 譯註:DNS 協議中的 WKS 記錄類型意即「眾所周知的業務描述」,是類似於 A、MX 這樣的 DNS 記錄類型,用於描述某個 IP 所提供的服務,目前鮮見使用。參見: Well-Known Services (WKS) 。)

第二天,我就收到了 Joyce 發來的郵件:

Date: Mon, 10 Jul 1995 15:35:33 -0700

From: jkrey@ISI.EDU

To: ylo@cs.hut.fi

Subject: 回復:請求取得一個埠號

Cc: iana@ISI.EDU

Tatu,

我們將埠號 22 分配給 ssh 服務了,你目前是該服務的主要聯繫人。

Joyce

這就搞定了!SSH 的埠正式使用 22!!!

1995 年 7 月 12 日上午 2 點 21 分,我給我在赫爾辛基理工大學的測試者們宣布了 SSH 的最後 beta 版本。當日下午 5 點 23 分,我給測試者們宣布了 ssh-1.0.0 版本。1995 年 7 月 12 日,下午 5 點 51 分,我將一份 SSH(安全終端)的宣告發給了 cypherpunks@toad.com 的郵件列表,此外我還將其發給了一些新聞組、郵件列表和一些在網際網路上討論相關話題的人們。

如何更改 SSH 服務的埠號

SSH 伺服器是默認運行在 22 號埠上的。然而,由於某些原因需要,它也可以運行在別的埠上。比如為了方便測試使用,又比如在同一個宿主機上運行多個不同的配置。當然,極少情況下,不使用 root 許可權運行它也可以,比如某些必須運行在非特權的埠的情況(埠號大於等於 1024)。

埠號可以在配置文件 /etc/ssh/sshd_config 中將 Port 22 更改。也可以使用 -p <port> 選項運行 sshd。SSH 客戶端和 sftp 程序也可以使用 -p <port> 選項。

配置 SSH 協議穿越防火牆

SSH 是少數通常被許可穿越防火牆的協議之一。通常的做法是不限制出站的 SSH 連接,尤其常見於一些較小的或者比較技術型的組織中,而入站的 SSH 連接通常會限制到一台或者是少數幾台伺服器上。

出站的 SSH 連接

在防火牆中配置出站的 SSH 連接十分簡單。如果完全限制了外發連接,那麼只需要創建一個允許 TCP 埠 22 可以外發的規則即可。如果你想限制目標地址,你可以限制該規則僅允許訪問你的組織放在雲端的外部伺服器或保護該雲端的跳板伺服器即可。

反向通道是有風險的

其實不限制出站的 SSH 連接雖然是可以的,但是是存在風險的,SSH 協議是支持 通道訪問 的。最初的想法是在外部伺服器搭建一個 SSH 服務監聽來自各處的連接,將進入的連接轉發到組織,並讓這個連接可以訪問某個內部伺服器。

在某些場景下這當然非常的方便。開發者和系統管理員經常使用它打開一個通道以便於他們可以遠程訪問,比如在家裡或者在旅行中使用筆記本電腦等場景。

然而通常來講這些做法是違背安全策略的,跳過了防火牆管理員和安全團隊保護的控制無疑是違背安全策略的,比如這些: PCI、HIPAA、NIST SP 800-53 等。它可以被黑客和外國情報機構用來在組織內留下後門。

CryptoAuditor 是一款可以控制通道穿過防火牆或者一組雲端伺服器入口的產品。該款產品可以配合 通用 SSH 密鑰管理器(Universal SSH Key Manager) 來獲得對 主機密鑰(host keys)的訪問,以在啟用防火牆並阻擋未授權轉發的場景中解密 SSH 會話。

入站的 SSH 訪問

對於入站訪問而言,這裡有幾點需要說一下:

  • 配置防火牆,並轉發所有去往 22 埠的連接只能流向到一個特定的內部網路 IP 地址或者一個 DMZ主機。在該 IP 上運行 CryptoAuditor 或者跳板機來控制和審查所有訪問該組織的連接。
  • 在防火牆上使用不同的埠訪問不同的伺服器。
  • 只允許使用 IPsec 協議這樣的 VPN(虛擬專用網)登錄後連接 SSH 服務。

通過 iptables 服務限制 SSH 訪問

iptables 是一款內建在 Linux 內核的宿主防火牆。通常配置用於保護伺服器以防止被訪問那些未明確開啟的埠。

如果伺服器上啟用了 iptables,使用下面的命令將可以允許進入的 SSH 訪問,當然命令需要以 root 身份運行。

iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

如果你想將上述命令創建的規則持久地保存,在某些系統版本中,可使用如下命令:

service iptables save

via: ssh.com/ssh/port

作者:Tatu Ylonen 譯者:kenxx 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

推薦閱讀:

你有可能買一台 Chromebook 么?
普通用戶沒有root許可權,如何在自己的home目錄安裝Perl模塊?
OS X 和 Windows 操作系統是如何進行編譯的?
為什麼除了 Microsoft 以外的開發者都用 Linux / Unix 內核而不像 Microsoft 一樣自行開發內核?
Linux為什麼在桌面領域還是小眾範圍的?

TAG:Linux | SSH |