UFW 簡介
UFW(Uncomplicated Firewall)是 Ubuntu 系統預設的防火牆管理工具,它提供了一個簡單易用的命令列介面來管理 iptables 防火牆規則。UFW 的設計目標是讓防火牆的設定變得更加直覺和容易上手,即使是對於 Linux 新手也能快速掌握。
為什麼選擇 UFW?
- 簡單易用:相較於直接操作 iptables,UFW 的語法更加人性化
- 預設安全:UFW 預設會阻擋所有傳入連線,只允許傳出連線
- 應用程式整合:支援應用程式設定檔,可以快速套用常見服務的規則
- IPv6 支援:完整支援 IPv4 和 IPv6 規則
檢查 UFW 狀態
在開始設定之前,先確認 UFW 的安裝狀態:
1
2
3
4
5
6
7
8
9
| # 檢查 UFW 是否已安裝
sudo apt list --installed | grep ufw
# 如果未安裝,可以使用以下命令安裝
sudo apt update
sudo apt install ufw
# 查看 UFW 目前狀態
sudo ufw status
|
啟用與停用 UFW
啟用 UFW
在啟用 UFW 之前,建議先設定好 SSH 規則,以免被鎖在系統外:
1
2
3
4
5
6
7
8
| # 先允許 SSH 連線(非常重要!)
sudo ufw allow ssh
# 或者指定 SSH 的埠號
sudo ufw allow 22/tcp
# 啟用 UFW
sudo ufw enable
|
系統會顯示警告訊息,提示防火牆可能會中斷現有的 SSH 連線。確認無誤後輸入 y 繼續。
停用 UFW
如果需要暫時停用防火牆:
1
2
3
4
5
| # 停用 UFW(所有規則會保留)
sudo ufw disable
# 查看狀態確認已停用
sudo ufw status
|
重設 UFW
如果想要將 UFW 還原到預設狀態:
1
2
| # 重設所有規則
sudo ufw reset
|
注意:重設會刪除所有已設定的規則,請謹慎使用。
允許與拒絕規則
基本語法
UFW 的規則設定語法非常直覺:
1
2
3
4
5
| # 允許規則
sudo ufw allow <port>/<protocol>
# 拒絕規則
sudo ufw deny <port>/<protocol>
|
常見規則範例
允許特定埠號
1
2
3
4
5
6
7
8
| # 允許 HTTP(埠號 80)
sudo ufw allow 80/tcp
# 允許 HTTPS(埠號 443)
sudo ufw allow 443/tcp
# 允許特定 UDP 埠號
sudo ufw allow 53/udp
|
允許埠號範圍
1
2
3
4
5
6
| # 允許埠號 6000 到 6007
sudo ufw allow 6000:6007/tcp
# 同時允許 TCP 和 UDP
sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp
|
允許特定 IP 位址
1
2
3
4
5
6
7
8
| # 允許來自特定 IP 的所有連線
sudo ufw allow from 192.168.1.100
# 允許來自特定 IP 到特定埠號的連線
sudo ufw allow from 192.168.1.100 to any port 22
# 允許來自特定子網路
sudo ufw allow from 192.168.1.0/24
|
拒絕規則
1
2
3
4
5
6
7
8
| # 拒絕特定埠號
sudo ufw deny 3306/tcp
# 拒絕來自特定 IP
sudo ufw deny from 10.0.0.5
# 拒絕來自特定 IP 到特定埠號
sudo ufw deny from 10.0.0.5 to any port 22
|
進階規則
限制連線速率
防止暴力攻擊,限制連線頻率:
1
2
| # 限制 SSH 連線速率(30 秒內超過 6 次連線會被暫時封鎖)
sudo ufw limit ssh
|
指定網路介面
1
2
| # 允許特定網路介面的連線
sudo ufw allow in on eth0 to any port 80
|
管理規則
1
2
3
4
5
6
7
8
9
10
11
| # 查看所有規則(含編號)
sudo ufw status numbered
# 刪除特定規則(使用編號)
sudo ufw delete 2
# 刪除特定規則(使用規則內容)
sudo ufw delete allow 80/tcp
# 插入規則到特定位置
sudo ufw insert 1 allow from 192.168.1.100
|
應用程式設定檔
UFW 支援應用程式設定檔,這些設定檔定義了常見服務所需的防火牆規則。
查看可用的應用程式設定檔
1
2
| # 列出所有可用的應用程式設定檔
sudo ufw app list
|
常見的應用程式設定檔包括:
- OpenSSH:SSH 服務
- Apache、Apache Full、Apache Secure:Apache 網頁伺服器
- Nginx Full、Nginx HTTP、Nginx HTTPS:Nginx 網頁伺服器
查看應用程式設定檔詳細資訊
1
2
3
4
5
6
7
8
| # 查看特定應用程式的設定
sudo ufw app info OpenSSH
# 輸出範例:
# Profile: OpenSSH
# Title: Secure shell server
# Description: OpenSSH is a free implementation of the SSH protocol.
# Port: 22/tcp
|
使用應用程式設定檔
1
2
3
4
5
6
7
8
| # 允許 OpenSSH
sudo ufw allow OpenSSH
# 允許 Nginx HTTP 和 HTTPS
sudo ufw allow 'Nginx Full'
# 只允許 HTTPS
sudo ufw allow 'Nginx HTTPS'
|
自訂應用程式設定檔
您可以在 /etc/ufw/applications.d/ 目錄下建立自訂的應用程式設定檔:
1
2
| # 建立自訂設定檔
sudo nano /etc/ufw/applications.d/myapp
|
設定檔格式範例:
1
2
3
4
| [MyApp]
title=My Custom Application
description=Custom application firewall rules
ports=8080/tcp|8443/tcp
|
建立後,更新 UFW 應用程式清單:
1
| sudo ufw app update myapp
|
日誌設定
UFW 提供了詳細的日誌功能,可以記錄所有被允許或拒絕的連線。
啟用日誌記錄
1
2
3
4
5
6
7
8
| # 啟用日誌(預設等級)
sudo ufw logging on
# 設定日誌等級
sudo ufw logging low # 只記錄被封鎖的封包
sudo ufw logging medium # 記錄被封鎖的封包和無效封包
sudo ufw logging high # 記錄所有封包(不含速率限制)
sudo ufw logging full # 記錄所有封包(含速率限制)
|
日誌等級說明
| 等級 | 說明 |
|---|
| off | 關閉日誌記錄 |
| low | 記錄所有被封鎖的封包(不符合預設政策的封包) |
| medium | 記錄被封鎖的封包、無效封包、新連線 |
| high | 記錄所有封包(不含速率限制),包含符合規則的封包 |
| full | 記錄所有封包,不進行任何速率限制 |
查看日誌
UFW 的日誌通常儲存在以下位置:
1
2
3
4
5
6
7
8
| # 查看 UFW 日誌
sudo tail -f /var/log/ufw.log
# 使用 journalctl 查看
sudo journalctl | grep UFW
# 查看最近的日誌項目
sudo grep UFW /var/log/syslog | tail -20
|
日誌格式說明
典型的 UFW 日誌項目如下:
1
| Feb 15 10:23:45 ubuntu kernel: [UFW BLOCK] IN=eth0 OUT= MAC=... SRC=192.168.1.100 DST=192.168.1.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=12345 DF PROTO=TCP SPT=54321 DPT=22 WINDOW=14600 RES=0x00 SYN URGP=0
|
重要欄位說明:
- UFW BLOCK/ALLOW:封包處理結果
- IN:傳入的網路介面
- SRC:來源 IP 位址
- DST:目的 IP 位址
- PROTO:協定類型(TCP/UDP)
- SPT:來源埠號
- DPT:目的埠號
停用日誌記錄
總結
UFW 是 Ubuntu 系統上簡單而強大的防火牆管理工具。透過本文介紹的基本操作,您應該能夠:
- 啟用和停用 UFW 防火牆
- 設定允許和拒絕規則,包括埠號、IP 位址和網路範圍
- 使用應用程式設定檔 快速設定常見服務的規則
- 設定和查看日誌 以監控防火牆活動
建議的基本設定
對於一般的網頁伺服器,建議的基本設定如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| # 設定預設規則
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 允許 SSH
sudo ufw allow ssh
# 允許 HTTP 和 HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 啟用日誌
sudo ufw logging on
# 啟用防火牆
sudo ufw enable
# 確認狀態
sudo ufw status verbose
|
記得定期檢查防火牆規則和日誌,確保系統安全!