在Linux服務器的日常運維中,安全始終是需要重點關注的問題。想象一下,如果你的服務器沒有任何防護,外界的惡意攻擊可能會輕易侵入,導致數據泄露或系統癱瘓。而防火牆,就像服務器的“門衛”,可以幫我們過濾不必要的訪問,只允許合法的流量通過,從而保護服務器的安全。

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

防火牆本質上是一套規則集合,它運行在Linux服務器的內核層面,負責檢查進出服務器的網絡數據包,決定哪些請求可以通過,哪些必須拒絕。舉個生活中的例子:如果把服務器比作一座房子,防火牆就相當於門口的保安,只有持有“合法通行證”(符合規則的請求)的訪客才能進入,其他人則會被攔下。

爲什麼需要防火牆?
- 防止黑客通過未授權端口掃描服務器,暴露系統漏洞;
- 阻止惡意程序(如病毒、木馬)通過開放的端口入侵;
- 保護服務器上的敏感服務(如數據庫、SSH),避免被未授權訪問。

二、Linux常見防火牆工具

Linux系統中常見的防火牆工具有兩個主流選擇,新手可以優先從firewalld入手(更直觀),如果使用舊版系統或特定場景,也可以瞭解iptables(底層工具)。

1. firewalld(推薦新手,基於“區域”管理)

firewalld是CentOS 7+、Fedora等主流發行版的默認防火牆工具,它通過“區域(zone)”管理規則,不同區域有不同的默認策略,比如:
- public(公共區域):默認拒絕大部分入站連接,允許出站連接(適合互聯網服務器);
- trusted(信任區域):允許所有連接(適合內部可信網絡);
- blocked(阻止區域):拒絕所有入站連接(適合臨時隔離服務器)。

2. iptables(底層工具,適合進階配置)

iptables是更底層的防火牆工具,通過“規則鏈”管理數據包過濾,功能強大但配置相對複雜。例如通過iptables -A INPUT -p tcp --dport 80 -j ACCEPT開放80端口。舊版CentOS(如CentOS 6)或Debian/Ubuntu可能默認使用iptables,新手瞭解基本概念即可。

三、firewalld配置實戰(以CentOS 7+/RHEL 7+爲例)

1. 檢查firewalld狀態

首先確認firewalld是否已安裝並運行:

# 查看狀態(active/running爲正常)
systemctl status firewalld

# 如果未運行,啓動服務
sudo systemctl start firewalld

# 開機自啓
sudo systemctl enable firewalld

2. 基本操作:開放端口

場景:你剛部署了一個網站,需要臨時開放80端口(HTTP),或永久開放22端口(SSH)供遠程管理。

臨時開放端口(僅當前會話生效,重啓後失效)
# 開放80端口(TCP協議),僅對public區域生效(默認區域)
sudo firewall-cmd --add-port=80/tcp

執行後,防火牆會允許外部設備通過80端口訪問你的服務器。若要驗證是否生效,可嘗試用瀏覽器訪問服務器IP:80(需確保服務器已部署網站)。

永久開放端口(重啓後仍生效)

臨時開放後若要長期使用,需添加--permanent參數,並執行--reload重載規則:

# 永久開放80端口
sudo firewall-cmd --add-port=80/tcp --permanent

# 重載規則,使永久配置生效
sudo firewall-cmd --reload

關鍵:添加--permanent後,規則不會立即生效,必須執行--reload纔會寫入配置文件。

3. 查看當前防火牆規則

# 查看public區域已開放的臨時端口
sudo firewall-cmd --list-ports

# 查看public區域已開放的永久端口
sudo firewall-cmd --list-ports --permanent

# 查看所有區域的完整規則(包括端口、服務、IP限制等)
sudo firewall-cmd --list-all

4. 配置安全策略

拒絕特定IP訪問

如果發現某個IP頻繁攻擊服務器,可拒絕該IP訪問特定端口:

# 拒絕IP 192.168.1.100訪問22端口(SSH)
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" drop' --permanent

# 重載規則
sudo firewall-cmd --reload
限制出站連接

如果服務器需要訪問外部資源,可限制僅允許訪問特定IP:

# 僅允許服務器訪問192.168.1.0/24網段(內網IP)的8080端口
sudo firewall-cmd --add-rich-rule='rule family="ipv4" destination address="192.168.1.0/24" port protocol="tcp" port="8080" accept' --permanent

四、注意事項:避免防火牆配置失誤

  1. 測試規則後再保存:修改規則後,先臨時開放端口測試(如僅允許自己IP訪問),確認能正常連接後再保存永久規則,避免因誤配置導致無法遠程登錄服務器。
  2. 備份現有規則:操作前可導出當前規則,防止出錯後無法恢復:
   sudo firewall-cmd --get-active-zones > firewall_backup.txt
  1. 不要同時運行多個防火牆:避免iptablesfirewalld衝突,建議只保留一個工具。
  2. 監控防火牆日誌:通過/var/log/firewalld查看規則應用記錄,排查訪問異常(如多次被拒絕的IP)。

五、其他常見防火牆工具(如Ubuntu/Debian用戶)

如果你使用Ubuntu、Debian等系統,推薦使用更簡潔的ufw工具(“Uncomplicated Firewall”),基本命令與firewalld類似:

# 啓用ufw(首次使用時)
sudo ufw enable

# 開放80端口(臨時生效)
sudo ufw allow 80/tcp

# 允許SSH(22端口)來自特定IP
sudo ufw allow from 192.168.1.0/24 to any port 22

# 查看狀態
sudo ufw status

總結

Linux防火牆配置的核心是“明確需求、合理限制、避免誤操作”:
- 先明確需要開放的端口(如網站用80,SSH用22),區分臨時與永久規則;
- 使用區域化工具(如firewalld)或簡化工具(如ufw)管理規則,新手優先推薦firewalld或ufw;
- 配置後務必測試,避免因規則錯誤導致服務器無法訪問。

掌握基本的防火牆配置,能讓你的Linux服務器在提供服務的同時,最大限度降低安全風險。隨着經驗積累,你還可以進一步配置更復雜的策略(如限制連接頻率、拒絕特定協議等),但基礎操作永遠是安全運維的第一步。

小夜