【完整指南】如何在 Ubuntu 上檢查開放的埠及故障排除

1. 前言

在網路管理與伺服器運行中,準確掌握埠的狀態至關重要。特別是使用 Ubuntu 時,確認開放的埠與正在使用的程序有助於加強安全性並迅速進行故障排除。

本文章將詳細介紹如何在 Ubuntu 上檢查埠的基本指令與工具。適合從初學者到中級使用者,提供實用且易懂的操作步驟,請務必閱讀到最後!

2. 什麼是埠?

2.1 埠的基本概念

埠是電腦與網路設備進行資料傳輸的虛擬通訊端口。具體來說,在同一個 IP 位址上,同時運行多個應用程式時,埠用於識別各應用程式的數據流,並正確地分配資料。

例如,Web 伺服器處理 HTTP 通訊時使用埠 80。如果同一台伺服器允許 SSH 連線,則會使用埠 22。由於不同的服務依靠埠號進行區分,因此在網路管理中,確認埠的狀態是不可或缺的。

2.2 埠的種類與作用

埠可大致分為以下三種類型:

  1. 知名埠(Well-Known Ports, 0~1023)
  • 這些埠號經過國際標準化,廣泛用於知名的網路服務。
    • 範例:
    • HTTP: 80
    • HTTPS: 443
    • SSH: 22
  1. 登記埠(Registered Ports, 1024~49151)
  • 這些埠號由特定的應用程式或公司註冊並使用。
    • 範例:
    • MySQL: 3306
    • PostgreSQL: 5432
  1. 動態埠(Dynamic Ports, 49152~65535)
  • 這些埠號通常由應用程式臨時使用,主要用於客戶端的通訊。

理解這些分類有助於快速判斷不同埠號的用途,進而有效管理網路環境。


3. 如何在 Ubuntu 上檢查埠

在 Ubuntu 中,有多種工具可用於檢查埠的狀態。以下將介紹四個最實用的指令。

3.1 使用 ss 指令

ss 指令是一款強大的 Linux 網路管理工具,速度快且可提供詳細的連線資訊。

基本指令:

sudo ss -ltn

參數說明:

  • -l:僅顯示正在監聽(Listening)的埠。
  • -t:僅顯示 TCP 連線。
  • -n:以數字格式顯示 IP 地址與埠號。

輸出範例:

State       Recv-Q Send-Q      Local Address:Port        Peer Address:Port  
LISTEN      0      128              0.0.0.0:22               0.0.0.0:*

3.2 使用 netstat 指令

netstat 指令是較舊的網路管理工具,雖然 ss 已逐漸取代它,但仍可用於許多系統。

基本指令:

sudo netstat -ltn

輸出範例:

Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN

3.3 使用 lsof 指令

lsof 可用於檢查特定埠正在被哪個程序使用。

查詢特定埠:

sudo lsof -i :80

輸出範例:

COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
apache2   1234  www    4u   IPv4  12345 0t0      TCP *:http (LISTEN)

3.4 使用 nmap 指令

nmap 是一款專門用於網路掃描的工具,也常用於安全性診斷。

掃描本機開放的埠:

sudo nmap localhost

輸出範例:

Starting Nmap 7.80 ( https://nmap.org ) at 2024-12-21 18:00 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00013s latency).
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http

重點:

  • 可列出所有開放的埠與其對應的服務名稱。
  • 可用於掃描遠端伺服器,但務必事先取得授權。

4. 檢查防火牆設定

Ubuntu 為了增強安全性,通常會使用防火牆。ufw(Uncomplicated Firewall)是一款簡單且功能強大的管理工具。在本節中,我們將介紹如何使用 ufw 來檢查埠的開放狀態,並進行必要的設定。

4.1 檢查 ufw 狀態

檢查防火牆狀態的指令:

sudo ufw status verbose

輸出範例:

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere

說明:

  • Status: active:防火牆已啟用。
  • Logging: on:記錄所有防火牆活動。
  • Default: deny (incoming), allow (outgoing):預設拒絕所有外部連線,允許內部連線。
  • ALLOW:允許特定的埠與服務(如 SSH 和 HTTP)。

重點:
如果防火牆狀態顯示為「inactive」(未啟用),可使用以下指令啟用:

sudo ufw enable

4.2 設定允許或阻擋的埠

允許特定埠:

sudo ufw allow 22/tcp

說明:

  • 允許 TCP 連線至埠 22(SSH)。

封鎖特定埠:

sudo ufw deny 80/tcp

說明:

  • 封鎖 HTTP(埠 80)的連線請求。

僅允許特定 IP 連線:

sudo ufw allow from 192.168.1.100 to any port 22 proto tcp

說明:

  • 僅允許 IP 地址 192.168.1.100 透過埠 22 進行 SSH 連線。

4.3 重設與檢查設定

如果需要重設防火牆設定,請使用以下指令:

sudo ufw reset

此指令會清除所有規則並恢復預設值。進行更改後,請務必再次確認規則設定。


5. 實用範例:檢查特定埠的狀態

本節將以 SSH(埠 22)為例,說明如何確認其狀態。

5.1 檢查埠的開放狀態

指令範例:

sudo ss -ltn | grep ':22'

輸出範例:

LISTEN      0      128        0.0.0.0:22            0.0.0.0:*

如果顯示 LISTEN,表示埠 22 正在監聽連線請求。

5.2 確認使用特定埠的程序

指令範例:

sudo lsof -i :22

輸出範例:

COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd      1234  root   3u   IPv4  56789 0t0      TCP *:ssh (LISTEN)

重點:

  • sshd 表示 SSH 服務正在運行。
  • 可透過 PID(程序 ID)來控制該程序,例如停止或重新啟動。

停止該程序:

sudo kill 1234

5.3 故障排除範例

問題: 若埠未開啟或無法連線,請依以下步驟檢查:

  1. 檢查防火牆設定:
sudo ufw status verbose
  1. 若該埠遭封鎖,可執行以下指令開放:
sudo ufw allow 22/tcp
  1. 確認服務狀態,並視需要重新啟動:
sudo systemctl restart ssh

6. 埠的開關與安全性

埠的管理直接影響到網路安全。本節將介紹開關埠時需注意的安全性問題。

6.1 關閉不必要的埠

未使用的埠應該關閉,以防止攻擊者利用漏洞。

範例:關閉埠 80(HTTP):

sudo ufw deny 80/tcp

6.2 防範埠掃描攻擊

攻擊者可能透過埠掃描來尋找可利用的漏洞。以下方法可提升安全性:

  1. 強化防火牆規則:
sudo ufw default deny incoming
  1. 監控日誌:
sudo tail -f /var/log/ufw.log
  1. 使用入侵檢測系統(IDS):
  • 可安裝 fail2banSnort 來自動攔截異常流量。

7. 總結

本文介紹了 Ubuntu 中檢查埠的各種方法,以及 ufw 防火牆管理與安全性考量。

7.1 主要重點回顧

  • 埠的基本概念與分類: 埠是網路通訊的核心,可分為知名埠、登記埠與動態埠。
  • 如何檢查埠: 使用 ssnetstatlsofnmap 等工具。
  • 防火牆管理: 利用 ufw 來允許或封鎖埠,確保網路安全。
  • 安全性建議: 關閉未使用的埠、監控日誌、防範埠掃描攻擊。

7.2 未來應用

埠管理是伺服器與網路安全的基礎。請善用本篇文章所學內容,確保您的系統安全!

FAQ:Ubuntu 埠檢查的常見問題

Q1. Ubuntu 上的埠未開啟時該怎麼辦?

A: 可依以下步驟檢查:

  1. 確認防火牆設定:
sudo ufw status verbose
  1. 開放埠:
sudo ufw allow [埠號]/tcp
  1. 檢查服務狀態:
sudo systemctl status [服務名稱]

Q2. ssnetstat 的差異?

A:

  • ss 速度較快,提供更詳細資訊,推薦使用。
  • netstat 傳統工具,在舊系統仍可使用。

Q3. 如何檢測埠掃描攻擊?

A: 可使用以下方法:

  1. 檢查防火牆日誌:
sudo tail -f /var/log/ufw.log
  1. 使用入侵檢測系統(IDS): 安裝 fail2ban 來阻擋異常連線。

Q4. 如何查看特定埠的程序?

A: 使用 lsof

sudo lsof -i :[埠號]

Q5. 如何僅允許特定 IP 連線?

A: 使用 ufw

sudo ufw allow from [IP 位址] to any port [埠號] proto tcp

Q6. 如何變更服務使用的埠號?

A: 例如變更 SSH 埠:

sudo nano /etc/ssh/sshd_config
Port 2222
sudo systemctl restart ssh

Q7. 可同時開放多個埠嗎?

A: 是的,可使用範圍設定:

sudo ufw allow 1000:2000/tcp
年収訴求