介紹
UFW(簡單防火牆)是一個在Ubuntu發行版中默認包含的基於iptables
的防火牆配置工具。它提供了一個簡化的界面,通過命令行配置常見的防火牆用例。
這份速查表式指南提供了常見UFW用例和命令的快速參考,包括通過端口、網絡接口和來源IP地址允許和阻止服務的示例。
如何使用這個指南
- 這個指南以速查表格式提供自包含的命令行片段。
- 跳轉到任何與您正在嘗試完成的任務相關的部分。
- 當您在本指南的命令中看到突出顯示的文本時,請記住,這些文本應該是您自己網絡中的IP地址。
請記住,您可以使用sudo ufw status
或sudo ufw status verbose
來檢查您當前的UFW規則集。
使用數字海洋應用平台從GitHub部署您的前端應用程序。讓DigitalOcean專注於擴展您的應用程序。
驗證UFW狀態
要檢查 ufw
是否已啟用,請執行:
OutputStatus: inactive
輸出將指示您的防火牆是否啟動。
啟用 UFW
如果在執行 ufw status
時收到 Status: inactive
訊息,這表示系統尚未啟用防火牆。您需要執行命令來啟用它。
預設情況下,啟用 UFW 會阻止伺服器上所有連接埠的外部訪問。在實際操作中,這意味著如果您通過 SSH 連接到伺服器並在允許 SSH 連接埠訪問之前啟用 ufw
,您將會斷開連接。如果您的情況是這樣,請確保在啟用防火牆之前遵循本指南中關於 如何啟用 SSH 訪問 的部分。
要在系統上啟用 UFW,請執行:
您將會看到如下輸出:
OutputFirewall is active and enabled on system startup
要查看目前已封鎖或允許的內容,可以在執行 ufw status
時使用 verbose
參數,如下所示:
OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
停用 UFW
如果由於某些原因您需要停用 UFW,您可以使用以下命令:
請注意,此命令將完全停用您系統上的防火牆服務。
封锁IP地址
要封锁所有来自特定IP地址的网络连接,请运行以下命令,将突出显示的IP地址替换为要封锁的IP地址:
OutputRule added
在此示例中,from 203.0.113.100
指定了一个源IP地址为“203.0.113.100”。
如果现在运行sudo ufw status
,您将看到指定的IP地址被列为被拒绝:
OutputStatus: active
To Action From
-- ------ ----
Anywhere DENY 203.0.113.100
对于指定的IP地址,所有进出的连接都被阻止。
封锁子网
如果您需要封锁一个完整的子网,您可以将子网地址作为from
参数用于ufw deny
命令。这将阻止示例子网中的所有IP地址203.0.113.0/24
:
OutputRule added
阻止对网络接口的入站连接
阻止特定 IP 地址对特定网络接口的传入连接,请运行以下命令,将突出显示的 IP 地址替换为要阻止的 IP 地址:
OutputRule added
参数in
告诉ufw
仅适用于传入连接的规则,参数on eth0
指定规则仅适用于eth0
接口。如果您的系统有多个网络接口(包括虚拟接口),并且您需要阻止对其中一些接口的外部访问,但不是全部,这可能会有所帮助。
允许 IP 地址
要允许所有源自特定 IP 地址的网络连接,请运行以下命令,将突出显示的 IP 地址替换为要允许访问的 IP 地址:
OutputRule added
如果您现在运行sudo ufw status
,您将看到类似于此的输出,显示刚刚添加的 IP 地址旁边的单词ALLOW
。
OutputStatus: active
To Action From
-- ------ ----
...
Anywhere ALLOW 203.0.113.101
您还可以通过提供主机的相应子网掩码来允许来自整个子网的连接,例如203.0.113.0/24
。
允许对网络接口的传入连接
要允許特定 IP 地址的传入连接到特定网络接口,请运行以下命令,将突出显示的 IP 地址替换为您想要允许的 IP 地址:
OutputRule added
参数in
告诉ufw
仅应用于传入连接的规则,并且参数on eth0
指定该规则仅适用于eth0
接口。
如果现在运行sudo ufw status
,您将看到类似于以下内容的输出:
OutputStatus: active
To Action From
-- ------ ----
...
Anywhere on eth0 ALLOW 203.0.113.102
删除 UFW 规则
要删除以前在 UFW 中设置的规则,请使用ufw delete
,后跟规则(allow
或deny
)和目标规范。以下示例将删除先前设置为允许来自 IP 地址203.0.113.101
的所有连接的规则:
OutputRule deleted
另一种指定要删除的规则的方法是提供规则 ID。此信息可以通过以下命令获取:
OutputStatus: 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.102
的eth0
接口上的连接。
因為預設情況下,UFW已經阻止所有外部訪問,除非明確允許,所以第一條規則是多餘的,您可以將其刪除。要按ID刪除規則,運行:
您將被提示確認操作,並確保您提供的ID是指您要刪除的正確規則。
OutputDeleting:
deny from 203.0.113.100
Proceed with operation (y|n)? y
Rule deleted
如果您再次列出您的規則,請使用 sudo ufw status
,您將看到該規則已被刪除。
列出可用應用程式配置文件
安裝後,依賴網絡通信的應用程式通常會設置一個您可以使用的UFW配置文件,以允許來自外部地址的連接。這通常與運行 ufw allow from
相同,具有提供快捷方式的優點,可以對服務使用的具體端口號進行抽象化,並提供了一個易於使用的命名法來參考服務。
要列出當前可用的配置文件,運行以下命令:
如果您安裝了像Web服務器或其他依賴於網絡的軟件,而在UFW中沒有提供配置文件,請首先確保啟用了服務。對於遠程服務器,您通常會有OpenSSH可用:
OutputAvailable applications:
OpenSSH
啟用應用程式配置文件
要啟用 UFW 應用程式配置文件,請執行 ufw allow
,後面加上您想要啟用的應用程式配置文件的名稱。您可以使用 sudo ufw app list
命令獲取該名稱。在以下示例中,我們正在啟用 OpenSSH 配置文件,這將允許默認 SSH 端口上的所有入站 SSH 連接。
OutputRule added
Rule added (v6)
請記住引用由多個單詞組成的配置文件名稱,例如 Nginx HTTPS
。
停用應用程式配置文件
要停用您先前在 UFW 中設置的應用程式配置文件,您需要刪除相應的規則。例如,考慮從 sudo ufw status
中獲取的以下輸出:
OutputStatus: 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
規則:
記得你可以使用sudo ufw app list
列出所有可用的應用程式配置文件。
允許 SSH
在與遠程伺服器一起工作時,您會希望確保SSH端口開放以便您能夠遠程登錄到伺服器。
以下命令將啟用OpenSSH UFW應用程式配置文件並允許所有連接到伺服器上默認SSH端口的連接:
OutputRule added
Rule added (v6)
雖然不太用戶友好,但另一種語法是指定SSH服務的確切端口號,該端口號通常默認設置為22
:
OutputRule added
Rule added (v6)
從特定IP地址或子網絡允許SSH連入
為了允許從特定IP地址或子網絡接收連接,您將包括一個from
指令來定義連接的來源。這將需要您還使用to
參數來指定目的地地址。為了將此規則鎖定為僅限SSH,您將限制proto
(協議)為tcp
,然後使用port
參數並將其設置為SSH的默認端口22
。
以下命令将仅允许来自IP地址203.0.113.103
的SSH连接:
OutputRule added
您还可以使用子网地址作为from
参数,以允许来自整个网络的传入SSH连接:
OutputRule added
允许特定IP地址或子网的传入Rsync
运行在端口873
上的Rsync程序可用于在计算机之间传输文件。
要允许来自特定IP地址或子网的传入rsync
连接,请使用from
参数指定源IP地址,并使用port
参数设置目标端口873
。
以下命令将仅允许来自IP地址203.0.113.103
的Rsync连接:
OutputRule added
要允许整个203.0.113.0/24
子网能够rsync
到您的服务器,请运行:
OutputRule added
允许Nginx HTTP / HTTPS
安裝後,Nginx 網頁伺服器在伺服器內設置了一些不同的 UFW 檔案。一旦您已安裝並啟用 Nginx 作為服務,執行以下命令來確定可用的檔案:
Output Nginx Full
Nginx HTTP
Nginx HTTPS
為了啟用 HTTP 和 HTTPS 流量,請選擇Nginx 全部
。否則,選擇Nginx HTTP
僅允許 HTTP 或Nginx HTTPS
僅允許 HTTPS。
以下命令將在伺服器上允許 HTTP 和 HTTPS 流量(端口80
和443
):
OutputRule added
Rule added (v6)
允許 Apache HTTP / HTTPS
安裝後,Apache 網頁伺服器在伺服器內設置了一些不同的 UFW 檔案。一旦您已安裝並啟用 Apache 作為服務,執行以下命令來確定可用的檔案:
Output Apache
Apache Full
Apache Secure
為了啟用 HTTP 和 HTTPS 流量,請選擇Apache 全部
。否則,選擇Apache
用於 HTTP 或Apache 安全
用於 HTTPS。
以下命令將在伺服器上允許 HTTP 和 HTTPS 流量(端口80
和443
):
OutputRule added
Rule added (v6)
允許所有輸入 HTTP(端口80
)
Web 伺服器,如 Apache 和 Nginx,通常在端口 80
上聆聽 HTTP 請求。如果您的入站流量默認策略設置為拒絕或拒絕,您將需要創建一條 UFW 規則來允許端口 80
的外部訪問。您可以將端口號或服務名稱 (http
) 作為此命令的參數。
要允許所有入站 HTTP (端口 80
) 連接,運行:
OutputRule added
Rule added (v6)
另一種語法是指定 HTTP 服務的端口號:
OutputRule added
Rule added (v6)
允許所有入站 HTTPS (端口 443
)
HTTPS 通常在端口 443
上運行。如果您的入站流量默認策略設置為拒絕或拒絕,您將需要創建一條 UFW 規則來允許端口 443
的外部訪問。您可以將端口號或服務名稱 (https
) 作為此命令的參數。
要允許所有入站 HTTPS (端口 443
) 連接,運行:
OutputRule added
Rule added (v6)
另一種語法是指定 HTTPS 服務的端口號:
OutputRule added
Rule added (v6)
允許所有入站 HTTP 和 HTTPS
如果您想允許HTTP和HTTPS流量,您可以創建一個允許兩個端口的單一規則。此用法需要您還使用proto
參數定義協議,此案例中應設置為tcp
。
要允許所有傳入的HTTP和HTTPS(端口80
和443
)連接,執行:
OutputRule added
Rule added (v6)
允許從特定IP地址或子網掩碼連接MySQL
MySQL在端口3306
上聆聽客戶端連接。如果您的MySQL數據庫服務器正在被遠程服務器上的客戶端使用,您需要創建一個UFW規則來允許該訪問。
為了允許來自特定IP地址或子網掩碼的傳入MySQL連接,使用from
參數來指定源IP地址,並使用port
參數來設置目標端口3306
。
以下命令將允許IP地址203.0.113.103
連接到服務器的MySQL端口:
OutputRule added
要允許整個203.0.113.0/24
子網連接到您的MySQL服務器,執行:
OutputRule added
允許從特定IP地址或子網絡連接到PostgreSQL
PostgreSQL在端口5432
上聆聽客戶端連接。如果您的PostgreSQL數據庫服務器被遠程服務器上的客戶端使用,您需要確保允許該流量。
要允許從特定IP地址或子網絡接收到來的PostgreSQL連接,請使用from
參數指定來源,並將端口設置為5432
:
OutputRule added
要允許整個203.0.113.0/24
子網絡連接到您的PostgreSQL服務器,運行以下命令:
OutputRule added
阻止外發SMTP郵件
郵件服務器,如Sendmail和Postfix,通常使用端口25
進行SMTP流量。如果您的服務器不應該發送外發郵件,您可能想要阻止這種類型的流量。要阻止外發SMTP連接,運行以下命令:
OutputRule added
Rule added (v6)
這將配置您的防火牆以丟棄端口25
上的所有外發流量。如果您需要拒絕其他端口號上的外發連接,您可以重複此命令並將25
替換為您想要阻止的端口號。
結論
UFW是一個強大的工具,當正確配置時,可以大大提高您的伺服器的安全性。這份參考指南涵蓋了一些常用的UFW規則,通常用於在Ubuntu上配置防火牆。
本指南中的大多數命令可以根據不同的用例和情境進行調整,方法是更改參數,如源IP地址和/或目標端口。有關每個命令參數和可用修飾符的更詳細信息,您可以使用man
工具檢查UFW的手冊:
另一個您可以用作更高級用例和示例參考的資源是Ubuntu文檔上的官方UFW頁面。
Source:
https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands