什麼是連接埠(Port):常見服務對應的埠號,用 nmap 掃描伺服器找出不該開放的 3000 埠
上一篇談過伺服器被入侵後的風險,以及 SSH 金鑰、防火牆、隨時更新軟體這三道基本防線。這一節在正式設定防火牆之前,先補上一個必要的先備知識:什麼是連接埠(port),以及怎麼用 nmap 找出伺服器上實際開放了哪些埠。
補充:兩步驟驗證與 VPN
在進入連接埠之前,先簡單補充兩個跟安全性有關、但還沒展開的概念。兩步驟驗證(two-factor authentication)在伺服器端比較少直接派上用場。
VPN(虛擬私人網路,virtual private network)則是另一種防護思維:先明確定義一組「受信任」的裝置清單,在這組受信任的網路範圍之外築起重重防護,讓外部裝置幾乎不可能輕易闖入。這種做法的好處是能省去許多逐一判斷「這個連線該不該被允許」的麻煩,安全性與存取便利性之間,終究是一場持續進行中的權衡:安全性總是傾向把一切都鎖死,而工程師往往需要保有一定程度的存取彈性,兩者必須不斷取得平衡。
什麼是連接埠
在談防火牆之前,得先搞懂連接埠(port)是什麼:連接埠是一個通訊端點,對應到特定的處理程序或網路服務。前面談過 IP 位址的數量其實是有限的,而連接埠的存在,正是讓這個有限的資源不至於這麼快就被耗盡:因為有了連接埠,同一個 IP 位址底下就能同時承載多個、甚至上千個不同的服務,而不需要每個服務都各自佔用一個獨立的 IP 位址。
系統裡有一批「知名連接埠」(well-known ports),是業界長期以來約定俗成、固定對應特定服務的埠號,可以在系統裡查看這份清單:
bash
less /etc/services其中一些比較常見的埠號包括:
- 22:SSH
- 21:FTP
- 23:Telnet(比較舊的協定,如今已經很少使用,但技術上仍然存在)
- 80:HTTP,是全世界使用率最高的連接埠,瀏覽器背後真正在跑的正是這個埠
- 443:HTTPS,同樣是網際網路上最常用的埠之一
這些知名連接埠原則上任何人都可以拿來使用,但這麼做容易碰到埠號衝突(port collision):如果某個埠已經被其他服務佔用,就沒辦法再用同一個埠開另一個服務。這也是為什麼開發時經常選用像 3000、8000、8080 這類沒有被特別保留、比較不容易衝突的埠號;連接埠的數量其實有成千上萬個,只要選一個夠冷門的號碼,通常都能避開衝突。
連接埠本質上是電腦對外開放的一個入口:光是知道一個 IP 位址並不夠,還必須指定要連到哪一個連接埠,才能真正建立起連線。也正因為每一個開放的連接埠都是一個潛在的入口,掌握伺服器上到底開放了哪些連接埠,是資安上不能忽視的一環。
用 nmap 掃描伺服器,找出實際開放的埠
要實際查看伺服器目前開放了哪些連接埠,可以用 nmap 這個工具,不論是安裝在本機還是伺服器上都可以:
bash
sudo apt install nmap
nmap <伺服器IP>掃描結果會列出目前對外開放的連接埠清單。以這門課目前設定好的伺服器來看,掃描結果通常會顯示:
- 22 埠:對應 SSH,理當保持開放
- 80 埠:對應 HTTP,同樣理當保持開放
- 3000 埠:這是一個不該開放的連接埠
3000 埠之所以意外處於開放狀態,是因為前面寫的 Node.js 伺服器預設就監聽在這個埠上。但實際上並不需要讓 3000 埠對外開放:所有外部請求理應統一先進到 Nginx(透過 80 埠),再由 Nginx 用 proxy_pass 轉送到本機的 Node.js 應用程式,3000 埠只需要在伺服器內部被 Nginx 存取即可,完全沒有必要暴露給外部世界。換句話說,目前這台伺服器只應該對外開放 22 埠(SSH)與 80 埠(HTTP),3000 埠這個因為啟動 Node 伺服器而預設打開的破口,接下來就要想辦法把它關起來。
複習
網路中的連接埠(port)是什麼?
連接埠是一個通訊端點,對應到特定的處理程序或網路服務。有了連接埠,同一個 IP 位址底下就能同時承載多個、甚至上千個服務,這也是為什麼能讓有限的 IP 位址資源被更有效地運用。
有哪些常見的知名連接埠與對應服務?
22 埠對應 SSH、21 埠對應 FTP、80 埠對應 HTTP、443 埠對應 HTTPS。
怎麼查看伺服器上開放了哪些連接埠?
使用 nmap 工具,指令類似 nmap <伺服器IP>,會列出目標系統目前所有開放的連接埠。
為什麼連接埠在網路通訊中如此重要?
連接埠讓多個服務可以共用同一個 IP 位址,並為不同的網路服務提供各自獨立的通訊端點。
選擇連接埠時可能遇到什麼問題?
埠號衝突:當多個服務嘗試使用同一個連接埠號碼時就會發生。為了避開這個問題,通常建議選用較高、比較不常見的連接埠號碼,例如 3000、8000 或 8080。
小測驗
連接埠在網路通訊中為什麼重要?
它們讓多個服務可以共用同一個 IP 位址HTTP 流量通常對應哪個連接埠?
80 埠用什麼工具可以遠端掃描並找出另一台伺服器 IP 上開放的連接埠?
nmap此文章是 FrontendMasters 上的 Full Stack Fundamentals, v3 課程筆記
