介紹
UFW或Uncomplicated Firewall是iptables
一個接口,旨在簡化配置防火牆的過程。 雖然iptables
是一個可靠而靈活的工具,但初學者很難學會如何使用它來正確配置防火牆。 如果您希望開始保護網絡並且不確定使用哪種工具,UFW可能是您的正確選擇。
本教程將向您展示如何在Debian 10上使用UFW設置防火牆。
先決條件
要學習本教程,您需要一台帶有sudo
非root用戶的Debian 10服務器,您可以按照Debian 10初始服務器設置教程中的第1步-3進行設置 。
第1步 - 安裝UFW
Debian默認不安裝UFW。 如果您遵循整個初始服務器安裝教程 ,則您將安裝並啟用UFW。 如果沒有,請使用apt
立即安裝:
sudo apt install ufw
我們將設置UFW並按以下步驟啟用它。
第2步 - 將IPv6與UFW一起使用(可選)
本教程是以IPv4編寫的,但只要您啟用它就適用於IPv6。 如果您的Debian服務器啟用了IPv6,您需要確保將UFW配置為支持IPv6; 這將確保UFW除了IPv4之外還將管理IPv6的防火牆規則。 要配置它,請使用nano
或您喜歡的編輯器打開UFW配置文件/etc/default/ufw
:
sudo nano /etc/default/ufw
然后確保IPV6
值為yes
。 它應該如下所示:
IPV6=yes
保存並關閉文件。 現在,當啟用UFW時,它將配置為同時寫入IPv4和IPv6防火牆規則。 但是,在啟用UFW之前,您需要確保將防火牆配置為允許您通過SSH進行連接。 讓我們從設置默認策略開始。
第3步 - 設置默認策略
如果您剛開始使用防火牆,則要定義的第一個規則是您的默認策略。 這些規則處理未明確匹配任何其他規則的流量。默認情況下,UFW設置為拒絕所有傳入連接並允許所有傳出連接。 這意味着任何嘗試訪問您服務器的人都無法連接,而服務器中的任何應用程序都可以訪問外部世界。
讓我們將您的UFW規則設置回默認值,以便我們確保您能夠按照本教程進行操作。 要設置UFW使用的默認值,請使用以下命令:
sudo ufw default deny incoming sudo ufw default allow outgoing
這些命令將默認值設置為拒絕傳入並允許傳出連接。 僅這些防火牆默認值可能足以用於個人計算機,但服務器通常需要響應來自外部用戶的傳入請求。 我們接下來會調查一下。
第4步 - 允許SSH連接
如果我們現在啟用了我們的UFW防火牆,它將拒絕所有傳入的連接。 這意味着,如果我們希望服務器響應這些類型的請求,我們將需要創建明確允許合法傳入連接的規則 - 例如SSH或HTTP連接。 如果您使用的是雲服務器,則可能需要允許傳入的SSH連接,以便連接和管理服務器。
要將服務器配置為允許傳入SSH連接,可以使用以下命令:
sudo ufw allow ssh
這將創建防火牆規則,允許端口22
上的所有連接,這是SSH守護程序默認監聽的端口。 UFW知道什么端口allow ssh
意思,因為它在/etc/services
文件中列為/etc/services
。
但是,我們實際上可以通過指定端口而不是服務名來編寫等效規則。 例如,此命令產生與上面相同的結果:
sudo ufw allow 22
如果將SSH守護程序配置為使用其他端口,則必須指定相應的端口。 例如,如果SSH服務器正在監聽端口2222
,則可以使用此命令允許該端口上的連接:
sudo ufw allow 2222
現在您的防火牆已配置為允許傳入SSH連接,您可以啟用它。
第5步 - 啟用UFW
要啟用UFW,請使用以下命令:
sudo ufw enable
您將收到一條警告,指出該命令可能會破壞現有的SSH連接。 我們已經設置了允許SSH連接的防火牆規則,因此可以繼續。 用y
回應提示ENTER
。
防火牆現在處於活動狀態。 運行sudo ufw status verbose
命令以查看已設置的規則。 本教程的其余部分將介紹如何更詳細地使用UFW,包括允許和拒絕不同類型的連接。
第6步 - 允許其他連接
此時,您應該允許服務器需要的所有其他連接正常運行。 您應該允許的連接取決於您的特定需求。 幸運的是,您已經知道如何編寫允許基於服務名稱或端口的連接的規則; 我們已經在端口22
上為SSH做了這個。 你也可以這樣做:
- 端口
80
上的HTTP,這是未加密的Web服務器使用的。 要允許此類流量,您可以鍵入sudo ufw allow http
或sudo ufw allow 80
。 - 端口
443
上的HTTPS,這是加密的Web服務器使用的。 要允許此類流量,您可以鍵入sudo ufw allow https
或sudo ufw allow 443
。
但是,除了指定端口或已知服務之外,還有其他方法可以允許連接。 我們將討論下一步。
特定端口范圍
您可以使用UFW指定端口范圍。 例如,某些應用程序使用多個端口而不是單個端口。
例如,要允許使用端口6000
- 6007
X11
連接,請使用以下命令:
sudo ufw allow 6000:6007/tcp sudo ufw allow 6000:6007/udp
使用UFW指定端口范圍時,必須指定規則應適用的協議( tcp
或udp
)。 我們之前沒有提到這一點,因為沒有指定協議會自動允許兩種協議,這在大多數情況下都可以。
特定的IP地址
使用UFW時,您還可以指定IP地址。 例如,如果要允許來自特定IP地址的連接(例如工作或家庭IP地址203.0.113.4
,則需要指定IP地址,然后指定IP地址:
sudo ufw allow from 203.0.113.4
您還可以通過添加to any port
后跟端口號to any port
指定允許IP地址連接的特定端口。 例如,如果要允許203.0.113.4
連接到端口22
(SSH),請使用以下命令:
sudo ufw allow from 203.0.113.4 to any port 22
子網
如果要允許IP地址子網,可以使用CIDR表示法指定網絡掩碼。 例如,如果要允許所有IP地址范圍從203.0.113.1
到203.0.113.254
,則可以使用此命令:
sudo ufw allow from 203.0.113.0/24
同樣,您也可以指定允許子網203.0.113.0/24
連接的目標端口。 同樣,我們將使用端口22
(SSH)作為示例:
sudo ufw allow from 203.0.113.0/24 to any port 22
與特定網絡接口的連接
如果要創建僅適用於特定網絡接口的防火牆規則,可以通過指定allow in on
,然后指定網絡接口的名稱來執行此操作。
您可能希望在繼續之前查找網絡接口。 為此,請使用以下命令:
ip addr
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 . . .
突出顯示的輸出表示網絡接口名稱。 它們通常被命名為eth0
或enp3s2
。
例如,如果您的服務器具有名為eth0
的公共網絡接口,則可以使用以下命令允許HTTP流量:
sudo ufw allow in on eth0 to any port 80
這樣做將允許您的服務器從公共互聯網接收HTTP請求。
或者,如果您希望MySQL數據庫服務器(端口3306
)監聽專用網絡接口eth1
上的連接,則可以使用以下命令:
sudo ufw allow in on eth1 to any port 3306
這將允許專用網絡上的其他服務器連接到MySQL數據庫。
第7步 - 拒絕連接
如果尚未更改傳入連接的默認策略,則UFW配置為拒絕所有傳入連接。 通常,這會通過要求您創建明確允許特定端口和IP地址的規則來簡化創建安全防火牆策略的過程。
有時您會想要根據源IP地址或子網拒絕特定連接,但是,可能是因為您知道您的服務器正在受到攻擊。 此外,如果要將默認傳入策略更改為允許 (不建議這樣做),則需要為不希望允許連接的任何服務或IP地址創建拒絕規則。
要編寫拒絕規則,您可以使用上述命令,將allow替換為deny 。
例如,要拒絕HTTP連接,可以使用以下命令:
sudo ufw deny http
或者,如果要拒絕來自203.0.113.4
所有連接,可以使用此命令:
sudo ufw deny from 203.0.113.4
現在讓我們來看看如何刪除規則。
第8步 - 刪除規則
了解如何刪除防火牆規則與了解如何創建它們同樣重要。 有兩種方法可以指定要刪除的規則:規則編號或規則本身。這與創建規則時的規則類似。 我們首先通過規則編號方法解釋刪除 。
按規則編號
如果您使用規則編號刪除防火牆規則,那么您要做的第一件事就是獲取防火牆規則列表。 UFW status
命令具有numbered
選項,該選項顯示每個規則旁邊的數字:
sudo ufw status numbered
Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN 15.15.15.0/24 [ 2] 80 ALLOW IN Anywhere
如果我們決定要刪除允許端口80
上的HTTP連接的規則2
,我們可以在以下UFW delete
命令中指定:
sudo ufw delete 2
這將顯示確認提示,您可以使用y/n
回答。 輸入y
將刪除規則2
。 請注意,如果啟用了IPv6,則還需要刪除相應的IPv6規則。
按實際規則
規則編號的替代方法是指定要刪除的實際規則。 例如,如果要刪除allow http
規則,可以這樣寫:
sudo ufw delete allow http
您還可以使用allow 80
而不是服務名稱指定規則:
sudo ufw delete allow 80
此方法將刪除IPv4和IPv6規則(如果存在)。
第9步 - 檢查UFW狀態和規則
您可以隨時使用以下命令檢查UFW的狀態:
sudo ufw status verbose
如果禁用UFW,這是默認設置,您將看到如下內容:
Status: inactive
如果UFW處於活動狀態,如果您按照第3步進行操作,則輸出將表明它處於活動狀態並將列出您設置的所有規則。 例如,如果防火牆設置為允許來自任何地方的SSH(端口22
)連接,則輸出可能如下所示:
Status: active To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere
如果要檢查UFW如何配置防火牆,請使用status
命令。
第10步 - 禁用或重置UFW(可選)
如果您決定不想使用UFW,可以使用以下命令禁用它:
sudo ufw disable
您使用UFW創建的任何規則將不再處於活動狀態。 如果您需要稍后激活,可以隨時運行sudo ufw enable
。
如果您已經配置了UFW規則但是您決定要重新開始,則可以使用reset命令:
sudo ufw reset
這將禁用UFW並刪除您之前定義的任何規則。 請注意,如果您在任何時候修改默認策略,默認策略都不會更改為原始設置。 這應該會讓你重新開始使用UFW。
結論
您的防火牆現在配置為允許(至少)SSH連接。 確保允許服務器需要的任何其他傳入連接,同時限制不必要的連接。這將確保您的服務器既實用又安全。
要了解更常見的UFW配置,請查看有關UFW Essentials:通用防火牆規則和命令的本教程。