一個 防火牆 是保護系統安全的核心組件之一。它負責管理透過網路進行的傳入和傳出連線。它是您伺服器和資料的首要防線。這就是為什麼配置良好的防火牆至關重要的原因。在本指南中,我們將引導您完成在 Ubuntu 18.04 上使用 UFW 設置防火牆的步驟。
Ubuntu 上的 UFW
術語 UFW 代表「Uncomplicated Firewall」(簡單防火牆)。它是 Ubuntu 預裝的預設防火牆程式。UFW 實際上是 iptables 的一個介面。UFW 的目標是讓配置和管理防火牆變得更容易。雖然 iptables 本身是一個強大且靈活的選擇,但它對初學者並不友善。UFW 讓初學者和有經驗的使用者都能更輕鬆地使用。
首先,請閱讀我們的 全面指南,這將幫助您熟悉 UFW 的基本功能。您也可以參考 本指南來安裝您的 Ubuntu 伺服器。現在,讓我們開始吧!
首先,如果由於某種原因您的 UFW 尚未安裝,請立即安裝它:
|
1 |
$ sudo apt install ufw |
配置 UFW
-
使用 IPv6
截至目前,IPv4 仍是主流。考慮到這一點,本指南的大部分內容也以 IPv4 為特色。值得慶幸的是,UFW 也支援 IPv6。您需要做的就是從 UFW 配置檔案中啟用該功能。
First, open the UFW configuration file in a text editor. To save the changes, the text editor has to be run with sudo privilege:
|
1 |
$ sudo vim /etc/default/ufw |
尋找「IPV6」並確保其設定為「yes」。
-
預設策略
如果您是第一次嘗試調整防火牆,建議先定義預設策略。這些規則決定了如何控制不符合任何明確規則的流量。預設情況下,UFW 配置為拒絕所有傳入連線,但允許所有傳出連線。它定義了任何人都無法存取該伺服器,而伺服器上執行的應用程式則可以存取外部。
以下指令將重新定義 UFW 的預設行為。請注意,如果之前修改過,它將改變 UFW 的行為:
|
1 2 |
$ sudo ufw default deny incoming $ sudo ufw default allow outgoing |
對於個人電腦來說,單靠這些防火牆規則就足夠了。然而,伺服器需要更多設定來妥善強化其安全性。
允許 SSH 連線
以目前 UFW 的配置方式,它會拒絕所有傳入連線。對於遠端伺服器來說,這是行不通的。如果無法存取伺服器,就什麼也做不了。為了避免這個問題,可以將 UFW 配置為允許傳入的 SSH 或 HTTP 連線。
要允許 SSH 連線到伺服器,請執行以下指令。它基本上會告訴 UFW 允許連接埠 22 上的所有連線。這是 SSH 守護行程(daemon)預設監聽的連接埠:
|
1 |
$ sudo ufw allow ssh |
除了這個指令之外,也可以直接配置允許連線到連接埠 22。此連接埠定義在 /etc/services 檔案中:
|
1 |
$ sudo ufw allow 22 |
因為連接埠 22 是 SSH 守護行程的預設連接埠,它也可能容易受到攻擊。如果 SSH 伺服器配置為監聽不同的連接埠怎麼辦?在這種情況下,UFW 必須允許連線到該連接埠。假設 SSH 伺服器正在監聽連接埠 1234,則使用以下指令:
|
1 |
$ sudo ufw allow 1234 |
啟用 UFW
雖然已建立 UFW 規則,但除非啟用 UFW,否則它們不會起任何作用。預設情況下,UFW 是停用的,這意味著儘管宣告了規則,它也不會執行它們。要啟用 UFW,請執行以下指令:
|
1 |
$ sudo ufw enable |
UFW 可能會顯示一條關於中斷現有 SSH 連線的警告訊息。因為已配置允許 SSH 連線,所以啟用 UFW 不會造成任何中斷。要查看設定了哪些規則,請執行以下指令:
|
1 |
$ sudo ufw status verbose |
允許各種連線
此時,UFW 應該配置其他規則以獲得穩定的體驗。允許哪些連線取決於您的特定需求。前面已經演示了如何指示 UFW 根據服務名稱或連接埠號碼來允許連線。
以下是一些非常常見且通常需要開放的連接埠:
- SSH (
連接埠 22): 這是為 SSH 連線配置的預設連接埠。 - HTTP (
連接埠 80): 這是未加密網頁伺服器使用的預設連接埠。 - HTTPS (
連接埠 443): 這是加密網頁伺服器使用的預設連接埠。
要啟用 SSH 連線,請執行以下任一命令:
|
1 2 |
$ sudo ufw allow ssh $ sudo ufw allow 22 |
接下來,要啟用 HTTP 連線,請執行以下任一命令:
|
1 2 |
$ sudo ufw allow http $ sudo ufw allow 80 |
要啟用 HTTPS 連線,請執行以下任一命令:
|
1 2 |
$ sudo ufw allow https $ sudo ufw allow 443 |
連接埠範圍
到目前為止,我們演示了如何允許特定的連接埠。如果需要允許一個連接埠範圍呢?向 UFW 逐個宣告每個連接埠是非常低效的。某些應用程式會使用多個連接埠。幸運的是,UFW 允許宣告連接埠範圍。為此,請使用以下命令結構:
|
1 |
$ sudo ufw allow <start>:<end>/<protocol> |
以下範例啟用了使用連接埠 6000 至 6007:
|
1 2 |
$ sudo ufw allow 6000:6007/tcp $ sudo ufw allow 6000:6007/udp |
建議盡可能宣告協定。然而,在大多數情況下,這並非必要,一切仍可正常運作。
特定 IP 位址
使用 UFW 時,也可以根據特定的 IP 位址來篩選連線。預設情況下,UFW 會封鎖來自任何 IP 位址的連線。您可以宣告允許來自某些 IP 位址的連線。要允許來自某個 IP 位址的連線,請使用以下命令結構:
|
1 |
$ sudo ufw allow from <ip_address> |
您還可以宣告允許該 IP 位址連線的特定連接埠。為此,請在命令中加入 to any port ,後跟連接埠號碼:
|
1 |
$ sudo ufw allow from <ip_address> to any port <port> |
子網路
如果您需要允許某個 IP 位址子網路,可以使用 CIDR 表示法來實現。在此範例中,UFW 將允許來自範圍介於 203.0.113.1 至 203.0.113.254:
|
1 |
$ sudo ufw allow from 203.0.113.0/24 |
與上一步類似,您也可以指定這些 IP 位址可以連線的連接埠:
|
1 |
$ sudo ufw allow from 203.0.113.0/24 to any port <port> |
連線至特定網路介面
在伺服器環境中,系統可能會連接多個網路介面。使用 UFW,您可以指定某個規則僅適用於特定的網路介面。首先,檢查連接到伺服器的所有網路介面。目標網路介面的名稱是主要關注點:
|
1 |
$ ip addr |
在我們的案例中,只有一個網路介面 ens3 連接到公共網際網路。要允許來自此網路介面的傳入連線,請使用以下命令結構:
|
1 |
$ sudo ufw allow in on <network_interface> |
您也可以定義來自該網路介面的流量可以到達的連接埠:
|
1 |
$ sudo ufw allow in on <network_interface> to any port <port> |
拒絕連線
根據預設設定,UFW 將拒絕來自任何來源的連線(已宣告的例外情況除外)。這是使用 UFW 的推薦方式。然而,有時可能需要封鎖來自特定來源 IP 位址或子網路的特定連線。也許 UFW 的預設行為被設定為允許所有連線(不推薦)。
要拒絕來自特定 IP 位址的連線,UFW 需要拒絕規則。編寫拒絕規則非常簡單。取得任何允許規則,將「allow」一詞替換為「deny」,瞧!它就變成了拒絕規則。
請看以下範例。要拒絕任何 HTTP 連線,請使用以下拒絕規則:
|
1 2 |
$ sudo ufw deny http $ sudo ufw deny 80 |
要拒絕來自 203.0.113.1 的連線,請使用以下拒絕規則:
|
1 |
$ sudo ufw deny from 203.0.113.1 |
刪除規則
到目前為止,我們所學的都是如何建立規則。就像建立規則一樣,它們也可以被刪除。在 UFW 的情況下,有兩種特定的刪除規則方法。
-
依規則編號刪除規則
這是刪除 UFW 規則最簡單的方法。UFW 中的每個規則都有一個規則編號。以下指令將列印所有 UFW 規則以及規則編號:
|
1 |
$ sudo ufw status numbered |
以下指令將刪除由規則編號指定的規則:
|
1 |
$ sudo ufw delete <rule_number> |
-
依實際規則刪除規則
這是較為困難的刪除規則方法。它需要手動指定實際規則來刪除它。在以下範例中,UFW 將刪除由 allow http:
|
1 |
$ sudo ufw delete allow http |
該規則也可以指定為 allow 80。在這種情況下,以下指令將刪除它:
|
1 |
$ sudo ufw delete allow 80 |
刪除規則將同時刪除 IPv4 和 IPv6 的規則。
檢查 UFW 狀態與規則
確保 UFW 是否處於作用狀態至關重要。要確定 UFW 的狀態,請執行以下指令:
|
1 |
$ sudo ufw status verbose |
如果狀態為「inactive」,請按照上方的步驟 啟用 UFW 進行啟用。如果它是作用中的,UFW 將回報狀態為「active」並列出所有作用中的規則。
停用 UFW
如果出於某種原因您不打算使用 UFW,請使用以下指令將其停用:
|
1 |
$ sudo ufw disable |
如果停用了 UFW,所有已建立的規則將不再起作用。然而,這些規則並不會被刪除。當重新啟用 UFW 時,所有規則將再次變為作用中。如果目前的 UFW 設定一團糟怎麼辦?與其逐一刪除規則,不如使用單一指令刪除所有規則。要重設 UFW,請執行以下指令:
|
1 |
$ sudo ufw reset |
請注意,這不會改變在開始時設定的預設 UFW 行為。
結論
適當的防火牆設定對於確保安全性和功能性是必要的。它應該被設定為僅允許必要的傳入連線,同時限制不必要的連線。
如果您想了解更多防火牆解決方案,請查看我們的部落格 以獲取更多資源:
祝您使用愉快!











留言
目前尚無留言。成為第一個留言的人吧。