
文章目錄1. 內(nèi)核底層機制Netfilter 與四表五鏈1.1 五個規(guī)則鏈Chains1.2 四個規(guī)則表Tables2. 傳統(tǒng)靜態(tài)防火墻iptables2.1 規(guī)則匹配順序與動作2.2 常用配置命令與語法3. 現(xiàn)代動態(tài)防火墻firewalld3.1 核心概念安全區(qū)域Zone3.2 firewall-cmd 核心命令實戰(zhàn)3.3 進階實戰(zhàn)富規(guī)則Rich Rules與端口轉(zhuǎn)發(fā)4. iptables vs. firewalld 選型對比5. 總結(jié)在 Linux 系統(tǒng)安全中防火墻是網(wǎng)絡安全的第一道防線用于控制數(shù)據(jù)包的進出與轉(zhuǎn)發(fā)。在現(xiàn)代 Linux 系統(tǒng)中主要存在兩套最常見的防火墻管理工具iptables經(jīng)典的靜態(tài)防火墻管理工具直接對 Linux 內(nèi)核的 Netfilter 框架進行規(guī)則配置。firewalldRHEL/CentOS 7、Fedora、Rocky Linux 等系統(tǒng)默認的動態(tài)防火墻管理工具底層同樣調(diào)用 Netfilter但支持“按區(qū)域Zone劃分”且修改規(guī)則無需重啟服務或中斷連接。1. 內(nèi)核底層機制Netfilter 與四表五鏈無論使用iptables還是firewalld它們本質(zhì)上都是運行在用戶態(tài)的配置工具真正的過濾機制是由 Linux 內(nèi)核中的Netfilter框架執(zhí)行的。Netfilter 的核心邏輯可以歸納為四表五鏈1.1 五個規(guī)則鏈Chains數(shù)據(jù)包流經(jīng) Linux 內(nèi)核時會依次經(jīng)過不同的處理關(guān)卡鏈INPUT處理流入當前主機的數(shù)據(jù)包如訪問本機的 80 端口。OUTPUT處理從當前主機發(fā)出的數(shù)據(jù)包。FORWARD處理經(jīng)過當前主機轉(zhuǎn)發(fā)的數(shù)據(jù)包如將本機作為路由器/網(wǎng)關(guān)。PREROUTING數(shù)據(jù)包剛到達網(wǎng)卡、進行路由選擇之前常用于 DNAT 端口轉(zhuǎn)發(fā)。POSTROUTING數(shù)據(jù)包完成路由選擇、即將離開網(wǎng)卡之前常用于 SNAT 源地址轉(zhuǎn)換。1.2 四個規(guī)則表Tables決定了對數(shù)據(jù)包具體做什么操作優(yōu)先級rawmanglenatfilterfilter表默認負責數(shù)據(jù)包過濾允許ACCEPT、拒絕REJECT、丟棄DROP。nat表負責網(wǎng)絡地址轉(zhuǎn)換端口映射、IP 偽裝/SNAT/DNAT。mangle表負責修改數(shù)據(jù)包頭部的服務類型TOS、標記Mark等。raw表負責去除連接追蹤機制Conntrack。2. 傳統(tǒng)靜態(tài)防火墻iptablesiptables命令直接操作 Netfilter 的表和鏈。2.1 規(guī)則匹配順序與動作順序鏈中的規(guī)則從上到下按順序匹配。一旦匹配到符合條件的規(guī)則如ACCEPT或DROP就會立即停止向下匹配。默認策略若所有規(guī)則都沒有匹配上則執(zhí)行該鏈的默認策略Default Policy。動作選擇ACCEPT允許數(shù)據(jù)包通過。DROP直接丟棄數(shù)據(jù)包不給發(fā)送方任何回應發(fā)送端通常超時。REJECT拒絕數(shù)據(jù)包并向發(fā)送方返回一個 ICMP 錯誤響應。2.2 常用配置命令與語法語法結(jié)構(gòu)iptables [-t 表名] 命令選項 [鏈名] [匹配條件] [-j 控制動作]# 1. 查看 filter 表中的所有規(guī)則與行號sudoiptables-L-n-v--line-numbers# 2. 開放 22 (SSH) 和 80 (HTTP) 入站端口sudoiptables-AINPUT-ptcp--dport22-jACCEPTsudoiptables-AINPUT-ptcp--dport80-jACCEPT# 3. 封禁指定 IP拒絕來自 192.168.1.100 的所有流量sudoiptables-AINPUT-s192.168.1.100-jDROP# 4. 刪除指定鏈上的某條規(guī)則按行號刪除如刪除 INPUT 鏈第 3 條sudoiptables-DINPUT3# 5. 清空 filter 表中的所有規(guī)則?? 慎用容易把 SSH 連通性清掉sudoiptables-F3. 現(xiàn)代動態(tài)防火墻firewalldfirewalld引入了區(qū)域Zone的概念將不同的網(wǎng)絡接口網(wǎng)卡綁定到不同的安全區(qū)域中并根據(jù)區(qū)域定義安全策略。3.1 核心概念安全區(qū)域Zone預設的幾個常用區(qū)域按信任度從低到高區(qū)域名稱默認策略與場景drop信任度最低。丟棄所有進入的數(shù)據(jù)包無任何回應。block拒絕所有進入的數(shù)據(jù)包并返回 ICMP 拒絕消息。public默認區(qū)域。僅接受顯式指定的入站連接如 SSH、HTTP用于公共網(wǎng)絡環(huán)境。trusted信任度最高。接受所有傳入的網(wǎng)絡流量。3.2firewall-cmd核心命令實戰(zhàn)在firewalld中修改規(guī)則分為運行時配置Runtime與永久配置Permanent默認命令只對當前運行狀態(tài)生效重啟后丟失。加上--permanent參數(shù)會永久寫入配置文件但需要執(zhí)行--reload才能加載生效。# 1. 查看防火墻運行狀態(tài)與當前活躍區(qū)域sudofirewall-cmd--statesudofirewall-cmd --get-active-zones# 2. 列出默認區(qū)域的所有開放規(guī)則sudofirewall-cmd --list-all# 3. 開放特定服務或端口如開放 80/tcp 端口sudofirewall-cmd--zonepublic --add-port80/tcp--permanentsudofirewall-cmd--zonepublic --add-servicehttp--permanent# 4. 移除已開放的端口sudofirewall-cmd--zonepublic --remove-port80/tcp--permanent# 5. ?? 極其關(guān)鍵重載配置使 --permanent 規(guī)則立即生效sudofirewall-cmd--reload3.3 進階實戰(zhàn)富規(guī)則Rich Rules與端口轉(zhuǎn)發(fā)在firewalld中可以通過“富規(guī)則”實現(xiàn)針對特定 IP 的精確控制或者配置端口轉(zhuǎn)發(fā)案例 1僅允許特定 IP 訪問 3306 (MySQL) 端口sudofirewall-cmd--permanent--add-rich-rulerule familyipv4 source address192.168.1.50 port protocoltcp port3306 acceptsudofirewall-cmd--reload案例 2本地端口轉(zhuǎn)發(fā)將訪問本機的 8080 端口轉(zhuǎn)發(fā)到 80 端口sudofirewall-cmd--permanent--add-forward-portport8080:prototcp:toport80sudofirewall-cmd--reload4. iptables vs. firewalld 選型對比對比維度iptablesfirewalld管理模型靜態(tài)的“表與鏈”模型動態(tài)的“區(qū)域與服務”模型修改配置影響修改規(guī)則需要重載整個服務可能打斷現(xiàn)有連接支持動態(tài)更新不打斷現(xiàn)有已建立的網(wǎng)絡連接配置粒度粒度極細直接配置規(guī)則和網(wǎng)絡包細節(jié)封裝了常用服務與端口語法更直觀適用發(fā)行版Ubuntu/Debian 常用或配合ufw簡單工具CentOS 7 / RHEL / Fedora 默認搭載5. 總結(jié)底層機制一致無論是使用iptables還是firewalld真正干活的都是內(nèi)核的Netfilter框架。生產(chǎn)實操規(guī)范在使用firewall-cmd時千萬不要漏掉--permanent和--reload的雙組合否則重啟服務器后開放的端口會重新封閉。在通過遠程 SSH 配置防火墻規(guī)則時務必先確保放行 22 端口避免將自己鎖在服務器門外。 感謝閱讀想了解更多 我的博客網(wǎng)站 | 記錄思考分享干貨 我的個人主頁 | 關(guān)于我、開源項目