開放的連接埠只能證明有某個程式正在該編號上接受或傳送封包,並無法證明實際執行的是哪一個應用程式。一份常用的網路連接埠列表,是一張從數字連接埠對照到已註冊服務名稱、慣用傳輸協定以及簡短說明的整理對照表。它只是一個註冊提示,而非即時偵測結果;IANA 本身就曾警告,分配到的編號並不背書任何應用程式,也無法證明觀察到的流量一定是良性的。伺服器可能在不尋常的連接埠上監聽、多個已註冊名稱可能對應到同一個編號,而使用某個已註冊連接埠的封包,也很可能屬於同一台主機上、位於負載平衡器後方,或監聽在非標準連接埠的另一支程式。請先利用這份列表將編號轉譯成可能的服務,再透過平台原生工具、服務設定、記錄檔與網路政策來檢查實際的端點。

為什麼開放的連接埠永遠無法證明正在執行哪個應用程式
連接埠的分配描述的是某個編號的慣例,而非綁定在特定主機上的軟體身分。在解讀連接埠列表時,有三個日常會發生的原因會打破「連接埠等同於應用程式」的假設,而每一項都很重要。
首先,管理者可以把任何服務重新綁定到任何連接埠。營運人員可以在 8443 上執行 HTTPS、在 2222 上執行 SSH,或在 5433 上執行 PostgreSQL,都不會違反任何網路規範。從外部來看,封包仍然是送到連接埠 8443,但應用程式已經不再是註冊表中對應到該編號的那一個。你在實際流量中看到的編號,是設定上的選擇,而不是關於這個世界的事實。
其次,同一個編號可以對應多個已註冊的服務,特別是在 1024 到 49151 的使用者連接埠範圍中。同一個 TCP 連接埠可能同時被列為某個商用產品和某個開源替代方案,而某個未出現在整理列表中的連接埠,仍可能是有效或被廣泛使用的。註冊只是把一個名稱指派給一個編號,並不會賦予該名稱專屬的所有權。
第三,防火牆、代理伺服器和通道會重寫或轉譯連接埠。反向代理會在 443 上終止 TLS,再轉送到內部的某個連接埠,例如 3000 或 8080。容器和服務網格經常監聽在高編號連接埠上,而這些連接埠是整理列表刻意不去列舉的。你在邊界觀察到的連接埠,幾乎不會是應用程式在內部實際綁定的連接埠,因此只轉譯外部編號,會讓真正的監聽者看不見。
一份常用的網路連接埠列表實際上能提供什麼
一份常用的網路連接埠列表可以讓你快速從編號查詢到可能的服務。它會告訴你 443 對應 HTTPS、5432 對應 PostgreSQL,以及 25、110、143、465、587、993 和 995 涵蓋了標準的郵件協定及其 TLS 變體。每一列都包含一個數字連接埠、所選的 IANA 服務名稱、一或多個傳輸協定、一段簡短說明,以及篩選器所使用的分類。
在解讀上有兩個特性需要注意。涵蓋範圍是經過整理的,而非窮舉:這份表格涵蓋了常見的網頁、郵件、檔案傳輸、遠端存取、目錄、資料庫、訊息傳遞、列印、容器以及核心網路服務,但並非涵蓋每一項 IANA 指派。搜尋會比對四個欄位:連接埠編號、服務名稱、說明與分類,因此查詢 443 會回傳 HTTPS,查詢 PostgreSQL 會回傳 5432,查詢 mail 則會一次回傳 SMTP、POP3、IMAP、訊息提交以及它們的 TLS 變體。
這份列表是個起點,而不是結論。請用它把某個編號縮小到一個候選服務,接著再依據實際主機上的證據來驗證應用程式,才下任何判斷。
使用「常用網路連接埠列表」工具查詢連接埠
這個工具位於 常用網路連接埠列表。請先用它把編號轉譯成可能的服務,再直接檢查端點,並把每一列都視為提示,而非偵測結果。
- 在搜尋欄位中輸入連接埠編號、服務、產品或說明。查詢 443 會回傳 HTTPS 這一列,查詢 PostgreSQL 會回傳 5432,查詢 mail 則會一次回傳 SMTP、POP3、IMAP、訊息提交以及它們的 TLS 變體。
- 可以選擇性地依 TCP 或 UDP 以及服務分類來篩選可見的列。協定篩選器在這個區分有用時,會區分 TCP 與 UDP;分類篩選器則可以只挑出資料庫、網路服務、網路基礎架構、遠端存取或其他支援的群組,而不會更動背後的參考資料。
- 檢視相符的註冊提示,並把每一列都當作是從編號到可能服務的轉譯,而不是對你主機或其安全狀態的任何宣告。
- 將可見的列以 Tab 分隔的文字複製出來,當你需要一份 Tab 分隔的參考資料用於工單、筆記、Runbook 或學習教材時。只有目前可見的列會被匯出。
- 把缺少的列視為落在整理範圍之外。某個未出現在表格中的連接埠,仍可能是有效的、已註冊的、私有的、短暫使用的,或依慣例廣泛使用的;「未出現」只代表它落在整理的列之外,並不代表這個編號無效或沒在使用。
這個工具完全在你的瀏覽器中執行,不會把你的查詢或複製的結果送到任何伺服器,並且會立即更新結果。查詢的任何部分都不會離開這個頁面,因此可以放心地對內部 IP 範圍或不完整的資產清冊使用。
確認開放連接埠背後的應用程式
一旦列表給了你一個候選服務,請用實際主機上的證據來加以確認。在 Linux 上,ss -tulnp 和 netstat -tulnp 會顯示監聽中的程序和 PID,而 lsof -iTCP:443 -sTCP:LISTEN 可以把搜尋範圍縮小到單一連接埠。在 Windows 上,netstat -ano -p TCP 會列出監聽中的 PID,而 Get-Process -Id <pid> 或工作管理員可以把 PID 對應到執行檔。在 macOS 上,lsof -nP -iTCP -sTCP:LISTEN 可以在不需要提高權限的殼層下得到類似的結果。
程序的證據也不是最終的答案。反向代理可能監聽在 443 上,再轉送到內部某個不相關應用程式的 3000。在這種情況下,請沿著連線追蹤:讀取代理設定、檢查 upstream 區塊,並用封包擷取或服務記錄檔來追蹤請求。使用 openssl s_client -connect host:443 或瀏覽器的開發者工具來查看 TLS 憑證,以確認實際的服務。只有程序、設定、流量和端點這幾項證據結合起來,才能辨識出真正的應用程式。
在防火牆政策上也適用同樣的原則。一份常用連接埠的列表並不是一份允許清單。在開放任何連接埠之前,請先驗證方向、來源、目的、協定、驗證方式、加密方式、業務負責人,以及最小權限的範圍。請參考 防火牆允許清單指南,以更完整地討論這個錯誤,因為「開放的連接埠能證明應用程式」這個謬誤,同樣會誘使團隊把已註冊的編號視為可以放心對外開放。
會改變查詢意義的連接埠編號範圍
連接埠編號的解讀取決於它所在的範圍,而 IANA 將整個編號空間劃分為三個區段,定義於 RFC 6335 之中。
| 範圍 | 名稱 | 對查詢而言的實際意義 |
|---|---|---|
| 0 – 1023 | 系統連接埠 | 保留給廣為人知的服務使用,通常需要管理者權限才能綁定;廣為人知且穩定。 |
| 1024 – 49151 | 使用者連接埠 | 由 IANA 依申請指派給特定的服務和產品;其中許多屬於特定廠商,且可能與自訂部署重疊。 |
| 49152 – 65535 | 動態 / 私有連接埠 | 用於短暫使用的用戶端連接埠,並未指派給單一服務;高編號的流量通常是用戶端,而不是伺服器。 |
「常用網路連接埠列表」收錄了常見的系統與使用者連接埠,但並未列舉動態範圍。你在真實環境中看到的高編號連接埠,幾乎一定是來自短暫連線的暫時性用戶端連接埠,而不是可以查詢的服務。相對地,使用者連接埠的指派只是一種慣例,因此看到 5432 並不保證執行的是 PostgreSQL;營運人員可能已經把資料庫改放到 5433,或是把不同的程式綁定到 5432 上。
什麼時候應該改為查詢 IANA 註冊表
當決策需要窮舉性或時效性最新的證據時,請改用 IANA Service Name and Transport Protocol Port Number Registry。這個註冊表是每一筆指派、別名、聯絡窗口、參考資料、變更紀錄,以及 SCTP 和 DCCP 等較少見傳輸協定的權威來源。它也記錄了哪些編號已被回收、移轉或更新,這是任何整理列表都無法即時追蹤到的。前面提到的編號空間規則,來自 RFC 6335。
在學習方面,可以比較相關的明文與 TLS 服務,例如 HTTP 與 HTTPS、IMAP 與 IMAPS,或 LDAP 與 LDAPS,但同時要記住,加密與否取決於實際的服務設定,而不是連接埠本身。在故障排除方面,請把連接埠列表視為轉譯的步驟,接著再升級到程序檢查、設定檢視和封包擷取。在事件回應方面,在實際主機上以多重來源加以驗證之前,請把任何連接埠編號都視為不可信任的,因為同一個在註冊表中對應到良性服務的編號,一旦離開受控環境,就可能承載任何東西。
如需更深入的探討,請參考 如何避免在使用「常用網路連接埠列表」時犯錯。