UFW 基础知识:常见的防火墙规则和命令

介紹

UFW()是一個在Ubuntu發行版中默認包含的基於iptables的防火牆配置工具。它提供了一個簡化的界面,通過命令行配置常見的防火牆用例。

這份速查表式指南提供了常見UFW用例和命令的快速參考,包括通過端口、網絡接口和來源IP地址允許和阻止服務的示例。

如何使用這個指南

  • 這個指南以速查表格式提供自包含的命令行片段。
  • 跳轉到任何與您正在嘗試完成的任務相關的部分。
  • 當您在本指南的命令中看到突出顯示的文本時,請記住,這些文本應該是您自己網絡中的IP地址。

請記住,您可以使用sudo ufw statussudo ufw status verbose來檢查您當前的UFW規則集。

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

驗證UFW狀態

要檢查 ufw 是否已啟用,請執行:

  1. sudo ufw status
Output
Status: inactive

輸出將指示您的防火牆是否啟動。

啟用 UFW

如果在執行 ufw status 時收到 Status: inactive 訊息,這表示系統尚未啟用防火牆。您需要執行命令來啟用它。

預設情況下,啟用 UFW 會阻止伺服器上所有連接埠的外部訪問。在實際操作中,這意味著如果您通過 SSH 連接到伺服器並在允許 SSH 連接埠訪問之前啟用 ufw,您將會斷開連接。如果您的情況是這樣,請確保在啟用防火牆之前遵循本指南中關於 如何啟用 SSH 訪問 的部分。

要在系統上啟用 UFW,請執行:

  1. sudo ufw enable

您將會看到如下輸出:

Output
Firewall is active and enabled on system startup

要查看目前已封鎖或允許的內容,可以在執行 ufw status 時使用 verbose 參數,如下所示:

  1. sudo ufw status
Output
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), deny (routed) New profiles: skip

停用 UFW

如果由於某些原因您需要停用 UFW,您可以使用以下命令:

  1. sudo ufw disable

請注意,此命令將完全停用您系統上的防火牆服務。

封锁IP地址

要封锁所有来自特定IP地址的网络连接,请运行以下命令,将突出显示的IP地址替换为要封锁的IP地址:

  1. sudo ufw deny from 203.0.113.100
Output
Rule added

在此示例中,from 203.0.113.100指定了一个源IP地址为“203.0.113.100”。

如果现在运行sudo ufw status,您将看到指定的IP地址被列为被拒绝:

Output
Status: active To Action From -- ------ ---- Anywhere DENY 203.0.113.100

对于指定的IP地址,所有进出的连接都被阻止。

封锁子网

如果您需要封锁一个完整的子网,您可以将子网地址作为from参数用于ufw deny命令。这将阻止示例子网中的所有IP地址203.0.113.0/24

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

阻止对网络接口的入站连接

阻止特定 IP 地址对特定网络接口的传入连接,请运行以下命令,将突出显示的 IP 地址替换为要阻止的 IP 地址:

  1. sudo ufw deny in on eth0 from 203.0.113.100
Output
Rule added

参数in告诉ufw仅适用于传入连接的规则,参数on eth0指定规则仅适用于eth0接口。如果您的系统有多个网络接口(包括虚拟接口),并且您需要阻止对其中一些接口的外部访问,但不是全部,这可能会有所帮助。

允许 IP 地址

要允许所有源自特定 IP 地址的网络连接,请运行以下命令,将突出显示的 IP 地址替换为要允许访问的 IP 地址:

  1. sudo ufw allow from 203.0.113.101
Output
Rule added

如果您现在运行sudo ufw status,您将看到类似于此的输出,显示刚刚添加的 IP 地址旁边的单词ALLOW

Output
Status: active To Action From -- ------ ---- ... Anywhere ALLOW 203.0.113.101

您还可以通过提供主机的相应子网掩码来允许来自整个子网的连接,例如203.0.113.0/24

允许对网络接口的传入连接

要允許特定 IP 地址的传入连接到特定网络接口,请运行以下命令,将突出显示的 IP 地址替换为您想要允许的 IP 地址:

  1. sudo ufw allow in on eth0 from 203.0.113.102
Output
Rule added

参数in告诉ufw仅应用于传入连接的规则,并且参数on eth0指定该规则仅适用于eth0接口。

如果现在运行sudo ufw status,您将看到类似于以下内容的输出:

Output
Status: active To Action From -- ------ ---- ... Anywhere on eth0 ALLOW 203.0.113.102

删除 UFW 规则

要删除以前在 UFW 中设置的规则,请使用ufw delete,后跟规则(allowdeny)和目标规范。以下示例将删除先前设置为允许来自 IP 地址203.0.113.101的所有连接的规则:

  1. sudo ufw delete allow from 203.0.113.101
Output
Rule deleted

另一种指定要删除的规则的方法是提供规则 ID。此信息可以通过以下命令获取:

  1. sudo ufw status numbered
Output
Status: active To Action From -- ------ ---- [ 1] Anywhere DENY IN 203.0.113.100 [ 2] Anywhere on eth0 ALLOW IN 203.0.113.102

从输出中,您可以看到有两个活动规则。第一个规则,带有突出显示的值,拒绝来自 IP 地址203.0.113.100的所有连接。第二个规则允许来自 IP 地址203.0.113.102eth0接口上的连接。

因為預設情況下,UFW已經阻止所有外部訪問,除非明確允許,所以第一條規則是多餘的,您可以將其刪除。要按ID刪除規則,運行:

  1. sudo ufw delete 1

您將被提示確認操作,並確保您提供的ID是指您要刪除的正確規則。

Output
Deleting: deny from 203.0.113.100 Proceed with operation (y|n)? y Rule deleted

如果您再次列出您的規則,請使用 sudo ufw status ,您將看到該規則已被刪除。

列出可用應用程式配置文件

安裝後,依賴網絡通信的應用程式通常會設置一個您可以使用的UFW配置文件,以允許來自外部地址的連接。這通常與運行 ufw allow from 相同,具有提供快捷方式的優點,可以對服務使用的具體端口號進行抽象化,並提供了一個易於使用的命名法來參考服務。

要列出當前可用的配置文件,運行以下命令:

  1. sudo ufw app list

如果您安裝了像Web服務器或其他依賴於網絡的軟件,而在UFW中沒有提供配置文件,請首先確保啟用了服務。對於遠程服務器,您通常會有OpenSSH可用:

Output
Available applications: OpenSSH

啟用應用程式配置文件

要啟用 UFW 應用程式配置文件,請執行 ufw allow,後面加上您想要啟用的應用程式配置文件的名稱。您可以使用 sudo ufw app list 命令獲取該名稱。在以下示例中,我們正在啟用 OpenSSH 配置文件,這將允許默認 SSH 端口上的所有入站 SSH 連接。

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

請記住引用由多個單詞組成的配置文件名稱,例如 Nginx HTTPS

停用應用程式配置文件

要停用您先前在 UFW 中設置的應用程式配置文件,您需要刪除相應的規則。例如,考慮從 sudo ufw status 中獲取的以下輸出:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

此輸出表示當前啟用了 Nginx Full 應用程式配置文件,允許所有對 Web 伺服器的連接,無論是通過 HTTP 還是通過 HTTPS。如果您只想允許從 Web 伺服器發送和接收 HTTPS 請求,您首先必須啟用最嚴格的規則,本例中為 Nginx HTTPS,然後停用當前啟用的 Nginx Full 規則:

  1. sudo ufw allow "Nginx HTTPS"
  2. sudo ufw delete allow "Nginx Full"

記得你可以使用sudo ufw app list列出所有可用的應用程式配置文件。

允許 SSH

在與遠程伺服器一起工作時,您會希望確保SSH端口開放以便您能夠遠程登錄到伺服器。

以下命令將啟用OpenSSH UFW應用程式配置文件並允許所有連接到伺服器上默認SSH端口的連接:

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

雖然不太用戶友好,但另一種語法是指定SSH服務的確切端口號,該端口號通常默認設置為22

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

從特定IP地址或子網絡允許SSH連入

為了允許從特定IP地址或子網絡接收連接,您將包括一個from指令來定義連接的來源。這將需要您還使用to參數來指定目的地地址。為了將此規則鎖定為僅限SSH,您將限制proto(協議)為tcp,然後使用port參數並將其設置為SSH的默認端口22

以下命令将仅允许来自IP地址203.0.113.103的SSH连接:

  1. sudo ufw allow from 203.0.113.103 proto tcp to any port 22
Output
Rule added

您还可以使用子网地址作为from参数,以允许来自整个网络的传入SSH连接:

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

允许特定IP地址或子网的传入Rsync

运行在端口873上的Rsync程序可用于在计算机之间传输文件。

要允许来自特定IP地址或子网的传入rsync连接,请使用from参数指定源IP地址,并使用port参数设置目标端口873
以下命令将仅允许来自IP地址203.0.113.103的Rsync连接:

  1. sudo ufw allow from 203.0.113.103 to any port 873
Output
Rule added

要允许整个203.0.113.0/24子网能够rsync到您的服务器,请运行:

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

允许Nginx HTTP / HTTPS

安裝後,Nginx 網頁伺服器在伺服器內設置了一些不同的 UFW 檔案。一旦您已安裝並啟用 Nginx 作為服務,執行以下命令來確定可用的檔案:

  1. sudo ufw app list | grep Nginx
Output
Nginx Full Nginx HTTP Nginx HTTPS

為了啟用 HTTP 和 HTTPS 流量,請選擇Nginx 全部。否則,選擇Nginx HTTP僅允許 HTTP 或Nginx HTTPS僅允許 HTTPS。

以下命令將在伺服器上允許 HTTP 和 HTTPS 流量(端口80443):

  1. sudo ufw allow "Nginx Full"
Output
Rule added Rule added (v6)

允許 Apache HTTP / HTTPS

安裝後,Apache 網頁伺服器在伺服器內設置了一些不同的 UFW 檔案。一旦您已安裝並啟用 Apache 作為服務,執行以下命令來確定可用的檔案:

  1. sudo ufw app list | grep Apache
Output
Apache Apache Full Apache Secure

為了啟用 HTTP 和 HTTPS 流量,請選擇Apache 全部。否則,選擇Apache用於 HTTP 或Apache 安全用於 HTTPS。

以下命令將在伺服器上允許 HTTP 和 HTTPS 流量(端口80443):

  1. sudo ufw allow "Nginx Full"
Output
Rule added Rule added (v6)

允許所有輸入 HTTP(端口80

Web 伺服器,如 Apache 和 Nginx,通常在端口 80 上聆聽 HTTP 請求。如果您的入站流量默認策略設置為拒絕或拒絕,您將需要創建一條 UFW 規則來允許端口 80 的外部訪問。您可以將端口號或服務名稱 (http) 作為此命令的參數。

要允許所有入站 HTTP (端口 80) 連接,運行:

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

另一種語法是指定 HTTP 服務的端口號:

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

允許所有入站 HTTPS (端口 443)

HTTPS 通常在端口 443 上運行。如果您的入站流量默認策略設置為拒絕或拒絕,您將需要創建一條 UFW 規則來允許端口 443 的外部訪問。您可以將端口號或服務名稱 (https) 作為此命令的參數。

要允許所有入站 HTTPS (端口 443) 連接,運行:

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

另一種語法是指定 HTTPS 服務的端口號:

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

允許所有入站 HTTP 和 HTTPS

如果您想允許HTTP和HTTPS流量,您可以創建一個允許兩個端口的單一規則。此用法需要您還使用proto參數定義協議,此案例中應設置為tcp

要允許所有傳入的HTTP和HTTPS(端口80443)連接,執行:

  1. sudo ufw allow proto tcp from any to any port 80,443
Output
Rule added Rule added (v6)

允許從特定IP地址或子網掩碼連接MySQL

MySQL在端口3306上聆聽客戶端連接。如果您的MySQL數據庫服務器正在被遠程服務器上的客戶端使用,您需要創建一個UFW規則來允許該訪問。

為了允許來自特定IP地址或子網掩碼的傳入MySQL連接,使用from參數來指定源IP地址,並使用port參數來設置目標端口3306

以下命令將允許IP地址203.0.113.103連接到服務器的MySQL端口:

  1. sudo ufw allow from 203.0.113.103 to any port 3306
Output
Rule added

要允許整個203.0.113.0/24子網連接到您的MySQL服務器,執行:

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

允許從特定IP地址或子網絡連接到PostgreSQL

PostgreSQL在端口5432上聆聽客戶端連接。如果您的PostgreSQL數據庫服務器被遠程服務器上的客戶端使用,您需要確保允許該流量。

要允許從特定IP地址或子網絡接收到來的PostgreSQL連接,請使用from參數指定來源,並將端口設置為5432:

  1. sudo ufw allow from 203.0.113.103 to any port 5432
Output
Rule added

要允許整個203.0.113.0/24子網絡連接到您的PostgreSQL服務器,運行以下命令:

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

阻止外發SMTP郵件

郵件服務器,如Sendmail和Postfix,通常使用端口25進行SMTP流量。如果您的服務器不應該發送外發郵件,您可能想要阻止這種類型的流量。要阻止外發SMTP連接,運行以下命令:

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

這將配置您的防火牆以丟棄端口25上的所有外發流量。如果您需要拒絕其他端口號上的外發連接,您可以重複此命令並將25替換為您想要阻止的端口號。

結論

UFW是一個強大的工具,當正確配置時,可以大大提高您的伺服器的安全性。這份參考指南涵蓋了一些常用的UFW規則,通常用於在Ubuntu上配置防火牆。

本指南中的大多數命令可以根據不同的用例和情境進行調整,方法是更改參數,如源IP地址和/或目標端口。有關每個命令參數和可用修飾符的更詳細信息,您可以使用man工具檢查UFW的手冊:

  1. man ufw

另一個您可以用作更高級用例和示例參考的資源是Ubuntu文檔上的官方UFW頁面

Source:
https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands