如何在Ubuntu上使用UFW設置防火牆

介紹

UFW,即Uncomplicated Firewall,是一個針對簡化配置防火牆流程而設計的iptables介面。儘管iptables是一個穩固且靈活的工具,但對於初學者來說,學習如何正確配置防火牆可能會有困難。如果您想開始保護您的網絡,但不確定應該使用哪個工具,UFW可能是您的正確選擇。

本教程將向您展示如何在Ubuntu v18.04及以上版本上使用UFW設置防火牆。

先決條件

如果您使用的是Ubuntu 16.04或更低版本,我們建議您升級到更高版本,因為Ubuntu不再提供對這些版本的支持。這個指南集合將幫助您升級Ubuntu版本。

要遵循本教程,您需要:

  • 一台運行Ubuntu的服務器,以及一個具有sudo權限的非root用戶。有關如何設置這些的指南,請從此列表中選擇您的發行版並按照我們的初始服務器設置指南進行操作。

  • 在 Ubuntu 上,預設安裝了 UFW。如果因某些原因它已被刪除,您可以使用 sudo apt install ufw 來安裝。

使用 UFW 設置 Ubuntu 防火牆

  1. 啟用 IPv6
  2. 設置預設策略
  3. 允許 SSH 連接
  4. 啟用 UFW
  5. 允許任何其他所需的連接
  6. 拒絕連接
  7. 刪除防火牆規則
  8. 檢查 UFW 狀態和規則
  9. 如何在 Ubuntu 上停用或重置防火牆

步驟 1 — 確保啟用 IPv6

在最近的 Ubuntu 版本中,IPv6 默認是啟用的。實際上,這意味著添加到伺服器的大多數防火牆規則將包括 IPv4 和 IPv6 版本,後者在 UFW 狀態命令的輸出中用 v6 來標識。為確保 IPv6 已啟用,您可以檢查位於 /etc/default/ufw 的 UFW 配置文件。使用 nano 或您喜歡的命令行編輯器打開此文件:

  1. sudo nano /etc/default/ufw

然後確保 IPV6 的值設置為 yes。它應該看起來像這樣:

/etc/default/ufw excerpt
  1. IPV6=yes

保存並關閉文件。如果您使用的是 nano,您可以通過輸入 CTRL+X,然後輸入 YENTER 來執行此操作。

當在本指南的後續步驟中啟用 UFW 時,將配置為寫入 IPv4 和 IPv6 防火牆規則。

步驟2 — 設置預設策略

如果您剛開始使用 UFW,一個良好的第一步是檢查您的預設防火牆策略。這些規則控制如何處理不明確匹配任何其他規則的流量。

預設情況下,UFW 設置為拒絕所有入站連接並允許所有出站連接。這意味著任何試圖連接到您的伺服器的人都將無法連接,而伺服器內的任何應用程序都能夠連接到外部世界。允許特定服務和端口的額外規則作為此一般策略的例外。

為確保您能夠跟隨本教程的其餘部分進行操作,現在您將設置 UFW 的入站和出站流量的預設策略。

要將 UFW 的預設入站策略設置為 deny,執行以下命令:

  1. sudo ufw default deny incoming
Output
Default incoming policy changed to 'deny' (be sure to update your rules accordingly)

要將 UFW 的預設出站策略設置為 allow,執行以下命令:

  1. sudo ufw default allow outgoing
Output
Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)

這些命令將默認設置為拒絕入站和允許出站連接。這些防火牆默認可能足夠用於個人電腦,但伺服器通常需要回應外部用戶的入站請求。接下來我們將討論這一點。

步驟3 — 允許SSH連接

如果您現在啟用UFW防火牆,它將拒絕所有傳入連接。這意味著您需要創建明確允許合法傳入連接的規則 — 例如SSH或HTTP連接 — 如果您希望您的服務器對這些類型的請求做出響應。如果您使用的是雲服務器,您可能希望允許傳入的SSH連接,以便您可以連接到並管理您的服務器。

允許OpenSSH UFW應用程式配置文件

在安裝時,大多數依賴於網絡連接的應用程序將在UFW中註冊一個應用程序配置文件,這使用戶可以快速允許或拒絕對服務的外部訪問。您可以使用以下命令檢查UFW中當前註冊的配置文件:

  1. sudo ufw app list
Output
Available applications: OpenSSH

要啟用OpenSSH應用程序配置文件,請運行:

  1. sudo ufw allow OpenSSH
Output
Rule added Rule added (v6)

這將創建防火牆規則,以允許默認情況下SSH守護進程侦听的端口22上的所有連接。

通過服務名稱允許SSH

另一種配置UFW以允許傳入SSH連接的方法是通過引用其服務名稱:ssh

  1. sudo ufw allow ssh
Output
Rule added Rule added (v6)

UFW根據/etc/services文件了解服務使用的端口和協議。

通過端口號允許SSH

或者,您可以通過指定端口而不是應用程序配置文件或服務名稱來撰寫等效的規則。例如,此命令與前面的示例相同:

  1. sudo ufw allow 22
Output
Rule added Rule added (v6)

如果您配置了SSH守護程序使用不同的端口,您將需要指定適當的端口。例如,如果您的SSH服務器正在監聽端口2222,您可以使用此命令允許該端口上的連接:

  1. sudo ufw allow 2222
Output
Rule added Rule added (v6)

現在您的防火牆已配置為允許傳入的SSH連接,您可以啟用它。

第4步 — 啟用UFW

您的防火墙现在应已配置为允许 SSH 连接。要验证到目前为止添加了哪些规则,即使防火墙仍处于禁用状态,您可以使用:

  1. sudo ufw show added
Output
Added user rules (see 'ufw status' for running firewall): ufw allow OpenSSH

确认您已经有一个允许传入 SSH 连接的规则后,可以使用以下命令启用防火墙:

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

您将收到一个警告,指出该命令可能会干扰现有的 SSH 连接。您已经设置了一个允许 SSH 连接的防火墙规则,所以继续进行应该是安全的。以 y 回应提示,然后按 ENTER 键。

防火墙现在已经激活。运行 sudo ufw status verbose 命令以查看已设置的规则。本教程的其余部分将介绍如何更详细地使用 UFW,如允许或拒绝不同类型的连接。

步骤 5 — 允许其他连接

此时,您应该允许服务器需要响应的所有其他连接。您应该允许的连接取决于您的具体需求。您已经知道如何编写基于应用程序配置文件、服务名称或端口的允许连接规则;您已经为端口 22 上的 SSH 完成了此操作。您还可以为以下服务执行此操作:

  • 使用 sudo ufw allow httpsudo ufw allow 80 允许端口 80 上的 HTTP 连接,这是未加密的 Web 服务器使用的端口。
  • HTTPS使用443端口,這是加密Web伺服器使用的端口,使用sudo ufw allow httpssudo ufw allow 443
  • Apache同時支持HTTP和HTTPS,使用sudo ufw allow ‘Apache Full’
  • Nginx同時支持HTTP和HTTPS,使用sudo ufw allow ‘Nginx Full’

不要忘記使用sudo ufw app list檢查伺服器可用的應用程式配置文件。

除了指定端口或已知服務名稱外,還有其他幾種允許連接的方法。我們接下來會看到其中一些。

特定端口範圍

您可以使用UFW指定端口範圍。有些應用程式使用多個端口,而不是單一端口。

例如,要允許使用端口60006007的X11連接,請使用以下命令:

  1. sudo ufw allow 6000:6007/tcp
  2. sudo ufw allow 6000:6007/udp

在使用UFW指定端口範圍時,必須指定規則應適用的協議(tcpudp)。我們之前沒有提到這一點,因為不指定協議會自動允許兩種協議,這在大多數情況下都可以。

特定IP地址

在使用 UFW 時,您也可以在規則中指定 IP 地址。例如,如果您想允許來自特定 IP 地址(例如工作或家庭 IP 地址)的連接,您需要使用 from 參數,然後提供您想要允許的 IP 地址:

  1. sudo ufw allow from 203.0.113.4
Output
Rule added

您還可以通過添加 to any port 並指定端口號來指定允許該 IP 地址連接的端口。例如,如果您想允許 203.0.113.4 連接到端口 22(SSH),請使用此命令:

  1. sudo ufw allow from 203.0.113.4 to any port 22
Output
Rule added

子網

如果您想要允許 IP 地址的子網,您可以使用 CIDR 表示法來指定網絡遮罩。例如,如果您想允許從 203.0.113.1203.0.113.254 的所有 IP 地址,您可以使用此命令:

  1. sudo ufw allow from 203.0.113.0/24
Output
Rule added

同樣地,您也可以指定子網 203.0.113.0/24 可以連接到的目標端口。我們再次以端口 22(SSH)作為示例:

  1. sudo ufw allow from 203.0.113.0/24 to any port 22
Output
Rule added

連接到特定網絡接口

如果您想創建一個僅適用於特定網絡接口的防火牆規則,您可以通過指定”允許在”後跟網絡接口的名稱來實現。

在繼續之前,您可能需要查看您的網絡接口。要這樣做,使用以下命令:

  1. ip addr
Output Excerpt
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state . . . 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default . . .

突出顯示的輸出指示網絡接口的名稱。它們通常命名為eth0enp3s2之類的名稱。

因此,如果您的服務器有一個名為eth0的公共網絡接口,您可以使用以下命令允許 HTTP 流量(端口80)到它:

  1. sudo ufw allow in on eth0 to any port 80
Output
Rule added Rule added (v6)

這樣做將允許您的服務器從公共互聯網接收 HTTP 請求。

或者,如果您希望您的 MySQL 數據庫服務器(端口3306)在私有網絡接口eth1上聽取連接,例如,您可以使用以下命令:

  1. sudo ufw allow in on eth1 to any port 3306
Output
Rule added Rule added (v6)

這將允許私有網絡上的其他服務器連接到您的 MySQL 數據庫。

步驟 6 — 拒絕連接

如果您沒有更改傳入連接的默認策略,那麼 UFW 被配置為拒絕所有傳入連接。通常,這簡化了通過要求您明確允許特定端口和 IP 地址的規則來創建安全防火牆策略的過程。

然而,有時您會想要基於來源 IP 地址或子網來拒絕特定的連接,或許是因為您知道您的伺服器正在那裡遭受攻擊。此外,如果您想要將您的預設入站策略更改為允許(這是不建議的),您需要為任何您不希望允許連接的服務或 IP 地址創建拒絕規則。

要撰寫拒絕規則,您可以使用先前描述的命令,將allow替換為deny

例如,要拒絕 HTTP 連接,您可以使用以下命令:

  1. sudo ufw deny http
Output
Rule added Rule added (v6)

或者,如果您想要拒絕從203.0.113.4的所有連接,您可以使用以下命令:

  1. sudo ufw deny from 203.0.113.4
Output
Rule added

在某些情況下,您可能還希望阻止伺服器的出站連接。為了阻止所有使用者使用伺服器上的某個埠,例如用於 SMTP 流量的埠25,您可以使用deny out後跟埠號:

  1. sudo ufw deny out 25
Output
Rule added Rule added (v6)

這將阻止伺服器上的所有出站 SMTP 流量。

第 7 步 — 刪除規則

知道如何刪除防火牆規則與知道如何創建它們一樣重要。有兩種不同的方式來指定要刪除的規則:按規則編號或按其人類可讀取的名稱(類似於創建規則時指定的方式)。

按編號刪除UFW規則

要按編號刪除UFW規則,首先您需要獲取所有防火牆規則的編號列表。UFW狀態命令有一個選項可以在每個規則旁邊顯示編號,如下所示:

  1. sudo ufw status numbered
Numbered Output:
Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN 15.15.15.0/24 [ 2] 80 ALLOW IN Anywhere

如果您決定要刪除編號為2的規則,即允許端口80(HTTP)連接的規則,您可以像這樣在UFW刪除命令中指定它:

  1. sudo ufw delete 2
Output
Deleting: allow 80 Proceed with operation (y|n)? y Rule deleted

這將提示您確認,然後刪除允許HTTP連接的規則2。請注意,如果啟用了IPv6,您還需要刪除相應的IPv6規則。

按名稱刪除UFW規則

您也可以使用規則名稱來引用規則,規則名稱是根據規則類型(通常是允許拒絕)和該規則的目標服務名稱或端口號,或者在使用應用程序配置文件名稱的情況下。例如,如果您要刪除以前啟用的名為Apache Full的應用程序配置文件的允許規則,您可以使用:

  1. sudo ufw delete allow "Apache Full"
Output
Rule deleted Rule deleted (v6)

delete 命令對於以服務名稱或端口來參考的規則運作方式相同。例如,如果您之前設置了一個允許 HTTP 連接的規則,使用 sudo ufw allow http,這是您如何刪除該規則:

  1. sudo ufw delete allow http
Output
Rule deleted Rule deleted (v6)

因為在指定規則時服務名稱與端口號是可互換的,您也可以將同一規則稱為 allow 80,而不是 allow http

  1. sudo ufw delete allow 80
Output
Rule deleted Rule deleted (v6)

刪除 UFW 規則時,如果存在,IPv4 和 IPv6 規則都將被刪除。

第 8 步 — 檢查 UFW 狀態和規則

隨時您都可以使用此命令檢查 UFW 的狀態:

  1. sudo ufw status verbose

如果 UFW 被禁用(默認情況下是這樣),您將看到類似以下的內容:

Output
Status: inactive

如果 UFW 是啟用的(如果您按照第 3 步操作的話),輸出將顯示它是啟用的並列出任何設置的規則。例如,如果防火牆被設置為允許來自任何地方的 SSH(端口 22)連接,輸出可能如下所示:

Output
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere

如果您想檢查 UFW 如何配置防火牆,請使用 status 命令。

步驟 9 — 停用或重置防火牆

如果您決定不使用 UFW 防火牆,您可以使用以下命令停用它:

  1. sudo ufw disable
Output
Firewall stopped and disabled on system startup

使用 UFW 創建的任何規則將不再生效。如果以後需要激活它,您可以隨時運行 sudo ufw enable

如果您已經配置了 UFW 規則,但決定重新開始,您可以使用重置命令:

  1. sudo ufw reset
Output
Resetting all rules to installed defaults. This may disrupt existing ssh connections. Proceed with operation (y|n)? y Backing up 'user.rules' to '/etc/ufw/user.rules.20210729_170353' Backing up 'before.rules' to '/etc/ufw/before.rules.20210729_170353' Backing up 'after.rules' to '/etc/ufw/after.rules.20210729_170353' Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210729_170353' Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210729_170353' Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210729_170353'

這將禁用 UFW 並刪除以前定義的任何規則。這應該讓您在 UFW 上重新開始。請注意,如果您在任何時候修改了它們,預設策略不會更改為其原始設置。

使用 DigitalOcean 應用平台 從 GitHub 部署您的前端應用程序。讓 DigitalOcean 專注於擴展您的應用。

結論

您的防火牆現已配置為允許(至少)SSH 連接。請確保允許任何其他所需的服務器入站連接,同時限制任何不必要的連接,以使您的服務器功能正常並保持安全。

要了解更常見的UFW配置,請查看UFW基礎:常見防火牆規則和命令教程。

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu