一、什麼是防火牆?爲什麼需要它?¶
想象你的Linux服務器是一座“城堡”,防火牆就像城堡的“門衛”——它會檢查每一個試圖進入城堡的“訪客”(網絡請求),只允許合法的訪客進入,拒絕可疑的訪問。如果沒有防火牆,你的服務器就像大門敞開,任何外部網絡的攻擊(比如惡意掃描端口、入侵腳本)都可能直接滲透進來,導致數據丟失或服務癱瘓。
核心作用:限制網絡訪問(只允許必要的連接通過),保護服務器免受未經授權的攻擊。
二、Linux系統有哪些防火牆工具?¶
Linux系統的防火牆工具主要分爲兩類,適合不同發行版(系統),初學者可以從簡單易用的工具入手:
-
ufw(Uncomplicated Firewall)
- 特點:Ubuntu/Debian系統的默認防火牆,命令簡單,適合新手。
- 本質:基於iptables的簡化工具,隱藏了底層複雜規則。 -
firewalld
- 特點:CentOS/RHEL/Rocky Linux等系統的默認防火牆,支持動態規則(無需重啓),適合需要更靈活配置的場景。
- 本質:基於netfilter框架,支持“區域”概念(如public、trusted等),規則管理更直觀。 -
iptables
- 特點:最底層的防火牆工具,功能強大但規則複雜,適合進階用戶或需要精細控制的場景。
- 提示:ufw和firewalld本質上都是iptables的“上層工具”,新手建議優先用ufw或firewalld。
三、基礎操作:以ufw和firewalld爲例¶
以下分場景講解核心操作,你可以根據自己的系統選擇對應工具。
場景1:用ufw管理防火牆(Ubuntu/Debian)¶
- 檢查ufw狀態
sudo ufw status # 查看當前規則(默認:未啓用)
輸出示例:Status: inactive(未啓用)或Status: active(已啓用)。
- 啓用防火牆
sudo ufw enable # 啓用防火牆(默認策略:拒絕所有入站,允許所有出站)
注意:啓用後,服務器默認拒絕所有外部連接,僅允許你配置的端口。
- 開放常用端口/服務
- 開放SSH(22端口,用於遠程登錄):
sudo ufw allow ssh # 直接用服務名(對應端口22)
# 或手動開放端口:sudo ufw allow 22/tcp
- 開放HTTP(80端口,網頁服務):
sudo ufw allow 80/tcp # 允許80端口的TCP連接
- 允許特定IP訪問:
sudo ufw allow from 192.168.1.100 # 允許IP 192.168.1.100的所有連接
sudo ufw allow from 10.0.0.0/24 to any port 3306 # 允許10.0.0.0網段訪問MySQL(3306端口)
- 查看已開放規則
sudo ufw status numbered # 查看帶編號的規則列表
- 刪除規則
sudo ufw delete 1 # 刪除第1條規則(先通過status numbered查看編號)
- 設置默認策略(重要!)
- 默認拒絕所有入站連接(最安全):
sudo ufw default deny incoming
- 默認允許所有出站連接(服務器主動發起的請求不受限):
sudo ufw default allow outgoing
場景2:用firewalld管理防火牆(CentOS/RHEL/Rocky Linux)¶
- 檢查firewalld狀態
sudo systemctl status firewalld # 查看服務是否運行
sudo firewall-cmd --state # 查看防火牆狀態(輸出:running/inactive)
- 開放端口/服務
- 開放HTTP服務(80端口,firewalld內置了“服務”映射,如http=80,https=443):
sudo firewall-cmd --add-service=http --permanent # 臨時添加(重啓後失效)
# 或永久添加(需reload生效):
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reload # 重新加載規則,生效永久配置
- 手動開放端口(如3306端口,MySQL):
sudo firewall-cmd --add-port=3306/tcp --permanent
- 允許特定IP訪問
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept' --permanent
解釋:--add-rich-rule用於添加複雜規則,允許IP 192.168.1.100訪問22端口(SSH)。
- 查看已開放規則
sudo firewall-cmd --list-all # 列出所有規則(包括服務、端口、IP限制)
- 設置默認策略
- 默認拒絕所有入站連接(最安全):
sudo firewall-cmd --set-default-zone=deny # 臨時設置默認區域爲“拒絕所有”
- 永久設置默認區域(推薦):
sudo firewall-cmd --set-default-zone=public # public區域默認拒絕入站
四、新手必知的3個避坑點¶
- 忘記加
--permanent參數
防火牆規則默認是“臨時生效”的,重啓後會丟失!必須加--permanent才能永久保存,例如:
# 錯誤:臨時開放80端口,重啓後失效
sudo firewall-cmd --add-service=http
# 正確:永久開放80端口
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reload # 生效
-
默認策略導致“配置了端口但訪問不了”
- 若防火牆默認拒絕所有入站連接,即使開放了端口,外部也無法訪問(如僅開放80端口,但默認策略是deny,就需要明確允許)。
- 建議:默認策略設爲“拒絕所有入站”,僅開放必要端口/服務。 -
不要隨意開放高危端口
- 22端口(SSH)、3306端口(MySQL)、5900端口(VNC)等不要直接暴露在公網!
- 正確做法:僅允許特定IP(如公司內網IP)訪問,或通過VPN/跳板機連接。
五、總結¶
防火牆是服務器安全的“第一道防線”,Linux提供了ufw和firewalld等簡單工具,無需深入底層知識就能配置。關鍵步驟:
1. 明確需求(開放哪些端口/服務?允許哪些IP?);
2. 用allow/deny規則限制訪問;
3. 用--permanent確保規則持久化,--reload/restart生效;
4. 定期檢查規則(如ufw status或firewall-cmd --list-all),刪除無用規則。
行動建議:現在打開你的Linux服務器,嘗試用ufw或firewalld開放一個安全的端口(如22端口,僅允許自己IP訪問),體驗防火牆的基本作用吧!