Ubuntu 22.04 防火牆 UFW 設定與管理

A comprehensive guide to configuring and managing UFW firewall on Ubuntu 22.04

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 服務
  • ApacheApache FullApache Secure:Apache 網頁伺服器
  • Nginx FullNginx HTTPNginx 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:目的埠號

停用日誌記錄

1
sudo ufw logging off

總結

UFW 是 Ubuntu 系統上簡單而強大的防火牆管理工具。透過本文介紹的基本操作,您應該能夠:

  1. 啟用和停用 UFW 防火牆
  2. 設定允許和拒絕規則,包括埠號、IP 位址和網路範圍
  3. 使用應用程式設定檔 快速設定常見服務的規則
  4. 設定和查看日誌 以監控防火牆活動

建議的基本設定

對於一般的網頁伺服器,建議的基本設定如下:

 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

記得定期檢查防火牆規則和日誌,確保系統安全!

comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy