天天看點

如何在 Ubuntu 20.04 上使用 UFW 來設定防火牆

如何在 Ubuntu 20.04 上使用 UFW 來設定防火牆

本文最先釋出在:

https://www.itcoder.tech/posts/how-to-setup-a-firewall-with-ufw-on-ubuntu-20-04/

防火牆是一個用來監視和過濾進出網絡流量的工具。它通過定義一系列安全規則,來決定是否允許或者屏蔽指定的流量。

Ubuntu 自帶的防火牆配置工具被稱為 UFW (Uncomplicated Firewall)。UFW 是一個用來管理 iptables 防火牆規則的使用者友好的前端工具。它的主要目的就是為了使得管理 iptables 更簡單,就像名字所說的,簡單的。

本文描述如何在 Ubuntu 20.04上使用 UFW 工具來配置和管理一個防火牆。一個被正确配置的防火牆是所有系統安全中最重要的部分。

一、前提條件

僅僅 root 或者其他有 sudo 權限的使用者可以管理系統防火牆。最佳實踐就是以 sudo 使用者來運作管理者任務。

二、安裝 UFW

UFW 是标準 Ubuntu 20.04 安裝過程中的一部分,它應該已經在你的系統上存在。如果因為某些原因,它沒有被安裝,你可以通過輸入下面的指令安裝它:

sudo apt update
sudo apt install ufw           

三、檢查 UFW 的狀态

安裝過程不會自動激活防火牆,以避免伺服器被鎖住。你可以檢查 UFW 的狀态,輸入:

sudo ufw status verbose           

輸出如下:

Status: inactive           

如果 UFW 激活了,輸入應該類似下面這樣:

如何在 Ubuntu 20.04 上使用 UFW 來設定防火牆

四、UFW 預設政策

預設情況下,UFW 阻塞了所有進來的連接配接,并且允許所有出去的連接配接。這意味着任何人無法通路你的伺服器,除非你打開端口。運作在伺服器上的應用和服務可以通路外面的世界。

預設的政策定義在

/etc/default/ufw

檔案中,并且可以通過使用

sudo ufw default <policy> <chain>

指令來修改。

防火牆政策是用來建構更多詳細的和使用者自定義的規則的基礎。通常情況下,初始的預設政策是一個很好的起點。

五、應用配置

大部分應用都附帶一份應用配置,它描述了服務,并且包含了 UFW 設定。這個規則在軟體包安裝的時候,被自動建立在

/etc/ufw/applications.d

目錄下。

想要列舉出你系統上所有的應用配置,輸入:

sudo ufw app list           

與你系統上安裝的軟體包有關系,輸出應該看起來像下面這樣:

Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH           

想要查找更多關于指定配置和包含規則的資訊,使用下面的指令:

sudo ufw app info 'Nginx Full'           

輸出應該顯示"Nginx Full"配置打開了端口"80"和"443"。

Profile: Nginx Full
Title: Web Server (Nginx, HTTP + HTTPS)
Description: Small, but very powerful and efficient web server

Ports:
  80,443/tcp           

你也可以為你的應用建立自定義的配置。

六、啟用 UFW

如果你在遠端位置連接配接你的 Ubuntu,在啟用 UFW 防火牆之前,你必須顯式允許進來的 SSH 連接配接。否則,你将永遠都無法連接配接到機器上。

現在 UFW 防火牆被配置允許 SSH 遠端連接配接,啟用它,輸入:

sudo ufw allow ssh           

輸出:

Rules updated
Rules updated (v6)           

如果 SSH 運作在非标準端口,你需要打開這個端口。

例如,如果你的 SSH 守護程式監聽了

7722

,輸入下面的指令,允許連接配接通過那個端口:

sudo ufw allow 7722/tcp           

現在防火牆被配置允許進來的 SSH 連接配接,你可以輸入下面的指令,啟用它:

sudo ufw enable           
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup           

你将會被警告啟用防火牆可能會中斷現有的 SSH 連接配接,輸入"y",并且回車。

七、打開端口

取決于運作在你伺服器上的應用,你需要根據服務打開不同的端口。

通用的打開端口的文法如下:

ufw allow port_number/protocol           

下面是一些關于如何允許 HTTP 連接配接的方法。

第一個選項就是使用服務名。UFW 檢查

/etc/services

檔案,其中指定服務的端口和協定:

sudo ufw allow http           

你也可以指定端口号和協定:

sudo ufw allow 80/tcp           

當沒有給出協定的時候,UFW 同時建立

tcp

udp

的規則。

另外一個選項就是使用應用程式配置。在這個例子中,是"Nginx HTTP":

sudo ufw allow 'Nginx HTTP'           

UFW 還支援另外一種文法,使用

proto

關鍵字來指定協定。

7.1 端口範圍

UFW 允許你打開端口範圍。使用分号分隔開端口的起點和終點,當你指定協定時,或者是

tcp

,或者是

udp

例如,如果你想允許端口從

7100

7200

,同時支援

tcp

udp

,你将要運作下面的指令:

sudo ufw allow 7100:7200/tcp
sudo ufw allow 7100:7200/udp           

7.2 允許指定 IP 位址通路指定端口

想要允許指定源 IP 的所有端口上的所有連接配接通過,使用

from

關鍵字,加上源位址。

這裡是一個 IP 位址白名單的例子:

sudo ufw allow from 64.63.62.61           

如果你指向允許給定 IP 通路指定的端口,使用

to any port

關鍵字加上端口号。

例如,允許從 IP

64.63.62.61

的機器,通過

22

端口通路,輸入:

sudo ufw allow from 64.63.62.61 to any port 22           

7.3 允許子網

允許一個子網 IP 位址的通路和允許一個單個 IP 位址的通路,指令是一樣的。唯一的不同是需要指定網絡掩碼。

下面是一個例子,顯示如何允許 IP 位址(192.168.1.1 到 192.168.1.254),通過 3360(MySQL),你可以使用這個指令:

sudo ufw allow from 192.168.1.0/24 to any port 3306           

7.4 允許指定網絡接口的連接配接

想要允許連接配接通過指定網絡接口,使用

allow in on

和 網絡接口的名字:

sudo ufw allow in on eth2 to any port 3306           

八、禁止連接配接

對于所有進來連接配接的預設的政策被設定為

deny

,如果你沒有修改它,UFW 将會屏蔽所有進來的連接配接,除非你指定打開連接配接。

寫禁止規則和寫允許規則是一樣的,你需要的僅僅是使用

deny

關鍵字替換

allow

比如說你打開了端口

80

443

,并且你的伺服器處于來自

23.24.25.0/24

網絡的攻擊。想要禁止來自

23.24.25.0/24

的所有連接配接,使用下面的指令:

sudo ufw deny from 23.24.25.0/24           

這裡是一個例子,關于禁止從

23.24.25.0/24

80

443

端口的通路,你可以使用下面的指令:

sudo ufw deny proto tcp from 23.24.25.0/24 to any port 80,443
           

九、删除 UFW 規則

有兩種不同的方式可以删除 UFW 規則。通過規則序号和通過指定的規則。

通過規則序号來删除 UFW 規則很簡單,特别是你剛接觸 UFW。

想要通過規則序号來删除,你需要找到你想删除的規則序号。想要這麼做,運作下面的指令:

sudo ufw status numbered           
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 8080/tcp                   ALLOW IN    Anywhere           

想要删除規則,序号為3,這個規則允許對端口8080的連接配接,你可以使用下面的指令:

sudo ufw delete 3           

删除規則的第二種方法就是指定實際的規則。例如,如果你添加過一個打開端口

8069

的規則,你可以通過下面的指令删除它:

sudo ufw delete allow 8069           

十、禁用 UFW

如果因為任何原因,你需要停止 UFW,并且使得所有規則失效,你可以運作:

sudo ufw disable           

稍後,如果你想重新啟用 UFW,并且激活所有規則,輸入:

sudo ufw enable           

十一、重置 UFW

重置 UFW 将會禁用 UFW,删除所有激活的規則。如果你想撤銷所有的應用規則,并且重新開始時,這個很有用。

想要重置 UFW,簡單輸入下面的指令:

sudo ufw reset           

十二、IP 僞裝

IP 僞裝是一種在 Linux核心中的 NAT(網絡位址轉換),它通過重寫源 IP 和目标 IP 的位址和端口,來轉換網絡流量。使用 IP 僞裝技術,你可以允許區域網路中的一台或者多台機器,和網際網路進行互動,其中的一台 Linux 機器扮演網關。

使用 UFW 配置 IP 僞裝需要幾個步驟:

首先,你需要啟用 IP 轉發。想要這麼做,打開

/etc/ufw/sysctl.conf

檔案:

sudo nano /etc/ufw/sysctl.conf           

查找并且取消這一行的注釋

net.ipv4.ip_forward = 0

:

net/ipv4/ip_forward=1           

下一步,你需要配置 UFW 來允許轉發包。打開 UFW 配置檔案:

sudo nano /etc/default/ufw           

定位到

DEFAULT_FORWARD_POLICY

處,修改值從

DROP

ACCEPT

DEFAULT_FORWARD_POLICY="ACCEPT"           

現在你需要設定在

nat

表和僞裝規則中預設的

POSTROUTING

政策。想要這麼做,打開

/etc/ufw/before.rules

檔案,并且附加下面的行進去,像下面這樣:

sudo nano /etc/ufw/before.rules           

附加下面的行:

#NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]

# Forward traffic through eth0 - Change to public network interface
-A POSTROUTING -s 10.8.0.0/16 -o eth0 -j MASQUERADE

# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT           

不要忘記将

-A POSTROUTING

一行中的

eth0

替換成你的公開網絡接口的名字:

當你做完這些,儲存,并且關閉檔案。

最後,通過禁用,重新啟用 UFW,重載 UFW 規則。

sudo ufw disable
sudo ufw enable           

十三、總結

我們已經向你展示了如何在你的 Ubuntu 20.04 伺服器上安裝和配置 UFW 防火牆。在限制所有不必要連接配接時,請確定系統正常運作所需要的允許進來的連接配接。

想要了解更多關于這個主題的資訊,請浏覽

UFW 手冊頁面

如果你有任何疑問,請通過以下方式聯系我們:

微信: sn0wdr1am86

如何在 Ubuntu 20.04 上使用 UFW 來設定防火牆

微信群:

加上面的微信,備注微信群

QQ: 3217680847

如何在 Ubuntu 20.04 上使用 UFW 來設定防火牆

QQ 群: 82695646

如何在 Ubuntu 20.04 上使用 UFW 來設定防火牆