Linux 上的防火牆在保護電腦系統安全方面發揮著至關重要的作用。它充當屏障,控制和過濾網路流量,以保護系統免受未經授權的存取、攻擊和其他威脅。如果沒有正確配置的防火牆,伺服器可能容易受到各種類型的網路攻擊,對資料安全性和機密性造成嚴重後果。
在本文中,我們將介紹配置 Linux 防火牆的兩個主要工具:firewalld 和 iptables。我們將對它們的特點、功能和優勢進行比較分析。此外,我們將提供有關設定和使用每個工具的詳細說明,並討論在 Linux 平台上使用防火牆保護系統的最佳實踐。所有行動都將在 虛擬服務器 具有root訪問權限。
在 Linux 上配置 firewalld
Firewalld (防火牆守護程式)是用來管理Linux作業系統中的防火牆的程式。它提供了用於配置防火牆規則、允許或阻止網路應用程式連接的使用者介面。它在大多數伺服器發行版中是預設預先安裝的。如果 Firewalld 沒有預先安裝,則可以從發行版的官方儲存庫獨立安裝。
對於 Red Hat 系統(例如 RHEL、CentOS、Fedora),安裝使用下列命令執行:
yum install firewalld
對於 Debian/Ubuntu:
apt-get install firewalld
安裝後,可以使用以下命令立即啟動並啟動:
systemctl start firewalld
接下來,需要將服務新增到啟動中:
systemctl enable firewalld

此時,我們建議停用 ufw,因為不建議同時使用此工具與firewalld 或 iptables。檢查狀態:
systemctl status ufw

要停止它,請輸入命令:
systemctl stop ufw
若要完全停用:
ufw disable
完成這些操作後,您就可以繼續配置firewalld了。
首先,需要定義信任區域。 Firewalld 使用區域概念來決定網路介面的信任程度。每個介面分配一個區域,並根據該區域套用防火牆規則。使用以下命令開啟所有可用區域的清單:
firewall-cmd --get-zones
通常使用 4 個主要區域:
- 公共:此區域適用於您認為不安全的網路;
- 私人的:適用於家庭網路或其他可信任的網路連線;
- 內部:用於內部網絡,例如組織或企業網絡內部的網絡;
- DMZ:此區域通常放置可從網際網路存取的伺服器。
但這只是一個例子。您可以使用以下命令新增自己的區域:
firewall-cmd --permanent --new-zone=nameyourzone
新增後,需要重新載入:
firewall-cmd --reload
要刪除區域,可以使用類似的方法
firewall-cmd --permanent --delete-zone=nameyourzone
定義區域後,需要允許所需的服務和連接埠的流量。若要允許某項服務,請使用下列指令:
firewall-cmd --zone=public --add-service=name
追求卓越的脊椎側彎照護 名稱 是服務的名稱。例如,允許 Apache 流量:
firewall-cmd --zone=public --add-service=http
要定義允許的端口,請使用以下命令:
firewall-cmd --zone=public --add-port=number/protocol
例如,SSH 的標準 22 連接埠如下所示:
firewall-cmd --zone=public --add-port=22/tcp
現階段,主要規則已經創建完畢。接下來,根據來源、目的地、連接埠和其他標準確定如何處理流量。若要新增規則(使用 公眾 區域為例):
firewall-cmd --zone=public rule
例如,允許來自任何來源的傳入流量到連接埠 80 (HTTP):
firewall-cmd --zone=public --add-port=80/tcp --permanent
若要刪除規則:
firewall-cmd --permanent --remove-rule=rule_specification
追求卓越的脊椎側彎照護 排除 是規則的類型(例如,連接埠、服務、rich-rule 等),以及 規則規範 是規則本身的規範。
對 Firewalld 配置進行變更後,需要儲存並套用它們。若要儲存更改,請使用以下命令:
firewall-cmd --runtime-to-permanent
若要套用變更:
firewall-cmd --reload
完成設定後,您可以透過開啟所有規則清單來驗證所選參數:
firewall-cmd --list-all

如果出現任何問題,請使用下列指令檢查 Firewalld 日誌:
journalctl -u firewalld
注意:我們僅介紹了建立連線的一般演算法。該工具具有廣泛的功能。有關所有可用選項的完整信息,您可以使用 官方文件 或打開幫助:
firewall-cmd --help
在 Linux 上設定 iptables
與 Firewalld 不同,iptables 是一個較舊但仍在 Linux 中廣泛使用的防火牆管理工具。它為Linux核心層級的封包過濾規則提供了更直接、更靈活的方法。但是,與 Firewalld 相比,iptables 需要更高級的知識和經驗,因此對於初學者來說較難掌握。使用以下命令檢查該工具的預先安裝版本:
iptables -V
如果尚未安裝該工具,則需要安裝。 Ubuntu、Debian上安裝指令:
apt install iptables
對於 Red Hat 系統(例如 CentOS、Fedora):
yum install iptables
安裝後啟動指令:
systemctl start iptables
若要新增至啟動,請執行:
systemctl enable iptables
在開始 iptables 設定之前,了解其工作原理非常重要。程式的語法對此有所幫助。它看起來如下:
iptables -t table action chain additional_parameters
讓我們更深入地研究每一個項目。
Iptables 有四個主要表: filter、nat、mangle 和 raw。每個程式都旨在處理特定類型的資料包,並具有自己的規則鏈:
- 過濾器:這是最常用的表,包含包過濾規則。它用於決定是否允許或拒絕資料包。
- NAT:此表用於修改資料包中的網路位址和連接埠。它通常用於設置偽裝(NAT)。
- 撕裂:在此表中,您可以修改資料包頭。它用於專門的資料包操作,例如標記。
- 原:此表用於配置在透過連接追蹤系統之前適用的規則。它通常用於設定不應被追蹤系統修改的規則,例如丟棄來自某些位址的封包。
每個表包含一組鏈。鍊是按順序檢查的一系列規則。有三種預先定義的鏈:
- 輸入(傳入)。此鏈中的規則決定如何處理傳入的封包。
- 輸出(傳出)。此鏈適用於您的電腦發送到網路上的其他裝置或電腦的所有資料包。
- FORWARD(轉寄)。此鏈中的規則指定如何處理轉送的封包。
最後,每個鏈都具有一些動作(目標)。在實踐中,主要採用5種動作:
- 接受:允許封包通過防火牆。
- 下降:拒絕資料包並且將其丟棄,不做任何回應。
- 拒絕:拒絕資料包並向發送者發送 ICMP 錯誤訊息。
- 登錄:將資料包記錄在系統日誌中並執行其他操作(例如,接受或丟棄)。
- 退还:停止檢查目前鏈中的規則並返回到呼叫鏈(如果適用)。
若要開始設置,請使用以下命令開啟現有規則清單:
iptables -L

作為設定 Iptables 的指南,讓我們來看看最常用指令的實際範例。為了方便起見,我們將根據具體鏈將範例分為 3 組。
鏈 輸入:
- 允許透過連接埠 80 上的 TCP 協定傳入流量:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
2. 允許透過連接埠 22 上的 UDP 協定傳入流量:
iptables -A INPUT -p udp --dport 22 -j ACCEPT
3. 封鎖來自特定 IP 位址的傳入流量:
iptables -A INPUT -s 192.168.1.100 -j DROP
鏈 輸出:
- 允許透過連接埠 443 上的 TCP 協定傳出流量:
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
2. 允許透過連接埠 80 上的 UDP 協定傳出流量:
iptables -A OUTPUT -p udp --dport 80 -j ACCEPT
3. 阻止到特定連接埠(例如 21)的傳出流量:
iptables -A OUTPUT -p tcp --dport 21 -j DROP
鏈 前鋒:
- 封鎖來自特定範圍的 IP 位址的轉送流量:
iptables -A FORWARD -s 172.16.0.0/24 -j DROP
2.阻止從特定網路介面轉送封包:
iptables -A FORWARD -i eth1 -j DROP
3. 限制特定連接埠的同時連線數(本例中為連接埠 10 每分鐘 80 個連接):
iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/minute -j ACCEPT
如您所見,在每個單獨的案例中,都使用了一個附加參數(命令)。若要取得可能的參數的完整清單以及對該工具功能的整體支持,請輸入:
iptables -h

為了確保設定正確,重新輸入指令查看規則清單:
iptables -L

若要刪除特定規則,請使用以下命令:
iptables -D chain rule_number
例如,如果您想從 INPUT 鏈中刪除規則編號 1,命令將如下所示:
iptables -D INPUT 1
要使用一個命令刪除所有規則:
iptables -F
重要的注意事項:重新啟動系統或服務後,iptables 規則不會自動儲存。要儲存規則,需要將它們新增至設定檔中並在重新啟動後復原。這 iptables-保存 iptables-恢復 實用程式可以幫助解決這個問題。若要儲存規則,請輸入命令:
iptables-save > /etc/iptables/rules.v4
這會將目前的 iptables 規則保存在 rules.v4 檔案中。若要在重新啟動後恢復,請輸入:
iptables-restore < /etc/iptables/rules.v4
此命令從 rules.v4 檔案中恢復規則。
結論
使用firewalld或iptables在Linux上設定防火牆是確保伺服器安全的重要方面。這兩種工具都提供了可靠的方法來管理網路流量並保護系統免受未經授權的存取和網路攻擊。 firewalld 和 iptables 之間的選擇取決於使用者的特定需求和偏好,考慮到它們的不同功能和優勢。