當前位置:
首頁 > 知識 > SSH 協議埠號 22 背後的故事

SSH 協議埠號 22 背後的故事

英文:Tatu Ylonen編譯:Linux中國/kenxx


https://linux.cn/article-8476-1.html


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

SSH 協議埠號 22 背後的故事


將 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


To: Internet Assigned Numbers Authority


Subject: 請求取得一個埠號

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


親愛的機構成員:


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


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


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


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


您最真誠的,


Tatu Ylonen


(LCTT 譯註:DNS 協議中的 WKS 記錄類型意即「眾所周知的業務描述」,是類似於 A、MX 這樣的 DNS 記錄類型,用於描述某個 IP 所提供的服務,目前鮮見使用。參見: https://docs.oracle.com/cd/E19683-01/806-4077/dnsintro-154/index.html 。)


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

Tatu,


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


Joyce


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


如何更改 SSH 服務的埠號


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


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


配置 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 ACCEPT


iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT


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


service iptables save


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序源 的精彩文章:

優化SQL查詢:如何寫出高性能SQL語句
如何將 MySQL 查詢速度提升 300 倍
WebSocket 教程

TAG:程序源 |

您可能感興趣

使用 SSH和SFTP 協議
Win10下自帶的SSH工具
24小時安全管家 航嘉SSH601-2插座評測
Windows 10在2018四月更新中默認安裝了OpenSSH
從Windows 10 SSH-Agent中提取SSH私鑰
行雲管家V4.5正式發布:支持Telnet協議和SSH跳板機
2019SSHZFW | 一票難求,這是怎樣的一個時尚周?
20 個 OpenSSH 最佳安全實踐
開啟iOS設備的SSH服務
為ZEN+新銳龍而生,信仰級X470主板駕到!華碩ROG CROSSHAIRⅦHERO首發開箱
二戰勝利頭盔——蘇聯SSH-40鋼盔
Linux 中的 5個SSH 別名例子
華碩ROG CROSSHAIR VII HERO(WI-FI)評測:旗艦X470的標杆
每日安全資訊:RAMBleed 攻擊成功獲取 OpenSSH 2048 位密鑰
微軟Windows Server 2019已支持OpenSSH
華碩ROG CROSSHAIR VII HERO評測:旗艦X470的標杆
重新認識銳龍9 3900X的實力!華碩ROG CROSSHAIR VIII FORMULA主板評測
Windows Server 2019已原生支持OpenSSH
3 個 Linux 上的 SSH 圖形界面工具
Windows 10四月更新版現已默認安裝OPENSSH客戶端