如何在 Linux 上設置 UFW 防火牆

不使用防火牆,您的網絡流量將沒有規則或限制,這將導致許多負面後果。Linux系統配備了一個默認的防火牆配置工具,即Uncomplicated Firewall(UFW)。但是,如何設置UFW防火牆呢?坐下來,放輕鬆,這個教程會為您提供幫助!

在這個教程中,您將學習如何配置UFW並在Linux系統上設置防火牆,以保護您的網絡並防範惡意行為。

準備好了嗎?繼續閱讀開始吧!

先決條件

本教程將進行實際演示。如果您想跟隨進行,請確保您具有以下內容:

  • 一台Ubuntu機器 – 本教程使用Ubuntu 20.04 LTS,但其他Linux發行版也適用。
  • Root權限訪問您的機器。

安裝UFW並啟用IPv6連接

儘管UFW已隨您的Ubuntu系統打包,但UFW不是默認安裝的。首先使用apt包管理器安裝UFW,並配置它允許IPv6上的連接。

1. 打開終端機,並執行下面的apt update命令以更新您的本地套件索引。在更新期間接受所有提示(-y)以減少使用者介入。

sudo apt update -y
Updating the System Package

2. 接下來,在安裝期間接受所有提示(-y)的情況下,執行以下命令來安裝UFW(install uwf)到您的系統中。

sudo apt install ufw -y
Installing UFW on Ubuntu

3. 用您喜歡的文本編輯器打開UFW配置文件(/etc/default/ufw)。UFW支持IPv6,但您需要確保防火牆配置為接受IPv6連接。

如果您僅啟用了IPv4,那麼您仍然暴露於IPv6攻擊。

4. 捲動到IPV6變量並將值設置為yes,如下所示,然後保存更改並退出編輯器。

Enabling IPV6 in the UFW Configuration File

5. 最後,執行以下命令來禁用並重新啟用UFW。該命令重新啟動UFW服務,以便更改生效。

命令完成後,您的防火牆現在可以寫入IPv4和IPv6防火牆規則集。

sudo ufw disable && sudo ufw enable

配置防火牆規則的默認策略

如果您剛開始使用UFW,建議為您的規則設置默認策略。默認策略適用於尚未定義任何特定規則的鏈。

設置UFW以拒絕所有傳入連接並允許所有傳出連接。因此,試圖從外界到達您的機器的任何人都會被拒絕,而您仍然可以自由連接到任何網站或服務器。

執行以下命令以禁止默認情況下的所有入站連接:ufw

sudo ufw default deny incoming
Denying Incoming Network Traffics

現在執行以下命令以默認情況下允許所有出站連接。

sudo ufw default allow outgoing
Allowing Outgoing Network Traffics

在UFW防火牆上允許SSH連接

您剛剛在UFW防火牆上設置了默認策略,拒絕所有入站流量,“允許全部-拒絕全部”規則對於普通用戶來說是一個不錯的設置。但是,如果您正在運行服務器呢?您需要允許特定的流量進出。在UFW防火牆上允許SSH連接將解決允許特定流量進出的問題。

您將設置一個允許在端口22上進行入站SSH連接的SSH服務器。但為什麼是端口22而不是其他端口?在類Unix系統上,SSH守護進程默認監聽端口22,因此使用默認的SSH端口是一個好習慣,可以讓您的生活變得輕鬆一點。

1. 執行以下命令安裝您系統上的OpenSSH服務器(install openssh-server)並啟動一個OpenSSH服務器(start ssh)。

sudo apt install openssh-server -y
sudo systemctl start ssh

2. 現在執行以下命令以允許入站SSH連接。不指定端口22就足夠了,因為UFW知道SSH使用的端口。

sudo ufw allow ssh
Allowing SSH connection

/etc/services 文件包含系統上所有可用服務的列表。在您的文本編輯器中打開該文件,滾動到 ssh,查看端口號(22)是否作為服務描述的一部分,如下所示。

Previewing the /etc/services file

但也許您更喜歡指定端口號(22)來允許 SSH。如果是這樣,請運行以下命令。

sudo ufw allow 22

3. 現在運行以下命令啟用 UFW。

sudo ufw enable

在確認提示中輸入 Y,如下所示,然後按 Enter 繼續運行命令。UFW 現在將在您的系統上過濾封包。

Enabling UFW

4. 最後,運行以下命令之一檢查您的 UFW 防火牆的狀態。

## 顯示更詳細的信息,例如界面和 
## 封包的當前進度
sudo ufw status verbose
## 顯示每個規則的編號及相應的允許或拒絕狀態 
## 當您試圖在這裡和那裡刪除規則集時,編號模式非常有用
sudo ufw status numbered

如果您使用 verbose 選項運行該命令,您將看到如下類似的輸出:

  • 狀態:active – 表示防火牆當前正在運行。
  • 日誌:on (低) – 表示 UFW 正在記錄防火牆處理的所有封包。
  • 預設:拒絕(傳入),允許(傳出),停用(路由) – 表示預設策略為拒絕所有傳入連線並允許所有傳出連線。
  • 新檔案:跳過 – 表示防火牆目前使用預設的規則集。
Checking verbose UFW firewall status

如果您使用 numbered 選項運行該命令,您將看到以下輸出。您可以查看編號規則的列表及其對應的允許拒絕狀態。

Viewing the UW Firewall status in a numbered list

允許 HTTP 和 HTTPS 連線

此時,您僅允許 UFW 防火牆上的 SSH 連線,但這限制了您的伺服器功能。允許其他類型的連線,如 HTTP 或 HTTPS,並添加更多規則到 UFW 防火牆。

執行以下任一命令以允許傳入的 HTTP 連線。

## HTTP 連線使用端口 80(非安全)
sudo ufw allow 80
sudo ufw allow http
Allowing HTTP connections

現在,執行以下命令中的任一個以允許傳入的 HTTPS 連線。

sudo ufw allow https
## HTTPS 連線使用端口 443(安全)
sudo ufw allow 443
Allowing incoming HTTPS connections.

允許來自特定端口範圍和 IP 地址的連線

某些應用程式使用多個端口來提供其服務。也許您有一系列需要開啟的端口,或者需要允許來自特定 IP 地址的連線。在這種情況下,添加更多的 UFW 防火牆規則。

執行以下命令以允許來自端口5001到5009的入站連接。您應該始終在規則適用的端口範圍後指定協議(tcpudp),因為並非所有端口都被兩個協議使用。

例如,常用的TCP端口包括80(HTTP)和443(HTTPS)。但常用的UDP端口包括53(DNS)和67/68(DHCP)。

sudo ufw allow 5001:5010/tcp
sudo ufw allow 5001:5010/udp
Allowing traffic on 5001:5010 port range

如果您更喜歡允許來自特定IP地址的SSH連接,請運行以下命令。此命令僅允許來自IP地址192.168.1.2的SSH連接(端口22)。

sudo ufw allow from 192.168.1.2 to any port 22
Allowing SSH Connections from Specific IP Address

允許從特定網絡接口的流量

UFW還允許您僅在特定網絡接口上允許流量,例如eth0是第一個以太網接口,wlan0是第一個Wi-Fi接口。

運行以下命令之一僅允許在eth0wlan0接口上進行HTTP連接。

## 只允許在eth0接口上進行HTTP連接
sudo ufw allow in on eth0 to any port 80
## 只允許在wlan0接口上進行HTTP連接
sudo ufw allow in on wlan0 to any port 80
Allowing traffic on a specific interface

刪除UFW防火牆規則

也許一些 UFW 防火牆規則已經不再起作用。在這種情況下,您可能想要從 UFW 中刪除一些規則。但首先,您必須知道要刪除的規則的編號或名稱。

1. 執行下面的命令以獲得添加到 UFW 的規則的編號列表。

sudo ufw status numbered

注意輸出中的規則編號或名稱,就像下面的例子一樣。

Previewing all the rules

2. 接下來,執行以下命令以刪除規則編號為4的規則,該規則是 5001:5010/tcp 端口範圍。

sudo ufw delete 4
Deleting a Rule by Rule Number

3. 執行下面的命令以按其實際名稱和 allow 狀態刪除規則。在此示例中,您將通過運行以下命令刪除 http 規則。

sudo ufw delete allow http
Deleting a Rule by Rule Name (http)

4. 現在運行以下命令以通過指定端口號(443)和 allow 狀態刪除規則。

sudo ufw delete allow 443
Deleting a Rule by Port Number (443)

5. 最後,像在第一步中所做的那樣重新運行以下命令以列出所有規則。

sudo ufw status numbered

正如下面所示,5001:5010/tcp 端口範圍、http443 端口的規則現在已經被刪除。

Checking the firewall rules

重置 UFW 防火牆

有時您可能需要將 UFW 重置為其默認值,例如在配置了大量規則後。更新可能會更改您的配置,需要您重新配置 UFW,並可能從頭開始。

執行下面的 ufw reset 命令以將所有防火牆規則重置為默認設置。此命令會禁用 UFW 並刪除所有當前的防火牆規則。

sudo ufw reset

輸入「Y」並按Enter以繼續重置您的UFW防火牆。

Resetting UFW

重置完成後,您將獲得一個全新安裝的UFW,完全被禁用,甚至您的默認策略也會消失。

現在執行以下命令重新啟用UFW,並從頭開始配置防火牆規則。

sudo ufw enable

如果您決定不再使用UFW,則無需重新啟用它。或者執行下面的命令確保UFW被禁用。

sudo ufw disable
Disabling UFW firewall

結論

在本教程中,您已經意識到使用UFW設置防火牆並不太困難。現在,您應該已經很好地了解了如何在Ubuntu上使用UFW設置和實施自己的規則。

現在,為什麼不借此機會通過了解更多關於UFW和Linux機器上的Docker安全性的知識?

Source:
https://adamtheautomator.com/ufw-firewall/