一、什麼是防火牆?爲什麼需要它?

想象你的Linux服務器是一座“城堡”,防火牆就像城堡的“門衛”——它會檢查每一個試圖進入城堡的“訪客”(網絡請求),只允許合法的訪客進入,拒絕可疑的訪問。如果沒有防火牆,你的服務器就像大門敞開,任何外部網絡的攻擊(比如惡意掃描端口、入侵腳本)都可能直接滲透進來,導致數據丟失或服務癱瘓。

核心作用:限制網絡訪問(只允許必要的連接通過),保護服務器免受未經授權的攻擊。

二、Linux系統有哪些防火牆工具?

Linux系統的防火牆工具主要分爲兩類,適合不同發行版(系統),初學者可以從簡單易用的工具入手:

  1. ufw(Uncomplicated Firewall)
    - 特點:Ubuntu/Debian系統的默認防火牆,命令簡單,適合新手。
    - 本質:基於iptables的簡化工具,隱藏了底層複雜規則。

  2. firewalld
    - 特點:CentOS/RHEL/Rocky Linux等系統的默認防火牆,支持動態規則(無需重啓),適合需要更靈活配置的場景。
    - 本質:基於netfilter框架,支持“區域”概念(如public、trusted等),規則管理更直觀。

  3. iptables
    - 特點:最底層的防火牆工具,功能強大但規則複雜,適合進階用戶或需要精細控制的場景。
    - 提示:ufw和firewalld本質上都是iptables的“上層工具”,新手建議優先用ufw或firewalld。

三、基礎操作:以ufw和firewalld爲例

以下分場景講解核心操作,你可以根據自己的系統選擇對應工具。

場景1:用ufw管理防火牆(Ubuntu/Debian)
  1. 檢查ufw狀態
   sudo ufw status  # 查看當前規則(默認:未啓用)

輸出示例:Status: inactive(未啓用)或Status: active(已啓用)。

  1. 啓用防火牆
   sudo ufw enable  # 啓用防火牆(默認策略:拒絕所有入站,允許所有出站)

注意:啓用後,服務器默認拒絕所有外部連接,僅允許你配置的端口。

  1. 開放常用端口/服務
    - 開放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端口)
  1. 查看已開放規則
   sudo ufw status numbered  # 查看帶編號的規則列表
  1. 刪除規則
   sudo ufw delete 1  # 刪除第1條規則(先通過status numbered查看編號)
  1. 設置默認策略(重要!)
    - 默認拒絕所有入站連接(最安全):
     sudo ufw default deny incoming
  • 默認允許所有出站連接(服務器主動發起的請求不受限):
     sudo ufw default allow outgoing
場景2:用firewalld管理防火牆(CentOS/RHEL/Rocky Linux)
  1. 檢查firewalld狀態
   sudo systemctl status firewalld  # 查看服務是否運行
   sudo firewall-cmd --state  # 查看防火牆狀態(輸出:running/inactive)
  1. 開放端口/服務
    - 開放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
  1. 允許特定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)。

  1. 查看已開放規則
   sudo firewall-cmd --list-all  # 列出所有規則(包括服務、端口、IP限制)
  1. 設置默認策略
    - 默認拒絕所有入站連接(最安全):
     sudo firewall-cmd --set-default-zone=deny  # 臨時設置默認區域爲“拒絕所有”
  • 永久設置默認區域(推薦):
     sudo firewall-cmd --set-default-zone=public  # public區域默認拒絕入站

四、新手必知的3個避坑點

  1. 忘記加--permanent參數
    防火牆規則默認是“臨時生效”的,重啓後會丟失!必須加--permanent才能永久保存,例如:
   # 錯誤:臨時開放80端口,重啓後失效
   sudo firewall-cmd --add-service=http  

   # 正確:永久開放80端口
   sudo firewall-cmd --add-service=http --permanent  
   sudo firewall-cmd --reload  # 生效
  1. 默認策略導致“配置了端口但訪問不了”
    - 若防火牆默認拒絕所有入站連接,即使開放了端口,外部也無法訪問(如僅開放80端口,但默認策略是deny,就需要明確允許)。
    - 建議:默認策略設爲“拒絕所有入站”,僅開放必要端口/服務。

  2. 不要隨意開放高危端口
    - 22端口(SSH)、3306端口(MySQL)、5900端口(VNC)等不要直接暴露在公網!
    - 正確做法:僅允許特定IP(如公司內網IP)訪問,或通過VPN/跳板機連接。

五、總結

防火牆是服務器安全的“第一道防線”,Linux提供了ufw和firewalld等簡單工具,無需深入底層知識就能配置。關鍵步驟:
1. 明確需求(開放哪些端口/服務?允許哪些IP?);
2. 用allow/deny規則限制訪問;
3. 用--permanent確保規則持久化,--reload/restart生效;
4. 定期檢查規則(如ufw statusfirewall-cmd --list-all),刪除無用規則。

行動建議:現在打開你的Linux服務器,嘗試用ufwfirewalld開放一個安全的端口(如22端口,僅允許自己IP訪問),體驗防火牆的基本作用吧!

小夜