日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

iptables規(guī)則配置實戰(zhàn)指南

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2026-04-30 16:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

摘要

本文檔基于一起真實的iptables規(guī)則配置事故展開,詳細記錄從問題發(fā)現(xiàn)、緊急響應、根因分析到后續(xù)整改的全過程。事故起因是一條看似正常的DROP規(guī)則,其位置放置錯誤導致生產(chǎn)環(huán)境SSH連接全部中斷,影響業(yè)務持續(xù)時間達47分鐘。本文旨在通過這一典型案例,系統(tǒng)性地梳理iptables的工作原理、常見配置錯誤場景、排障方法論以及生產(chǎn)環(huán)境最佳實踐,為運維人員提供可操作性極強的參考手冊。

本文假設讀者具備基本的Linux系統(tǒng)管理經(jīng)驗,熟悉TCP/IP協(xié)議?;A知識,能夠獨立完成服務器的日常維護操作。文章涉及的命令輸出示例均在CentOS Stream 9、Rocky Linux 9和Ubuntu Server 24.04 LTS三個主流發(fā)行版上驗證通過,軟件版本分別為:iptables 1.8.9、kernel 6.8.0(穩(wěn)定版)以及conntrack-tools 1.4.8。

第一章 問題場景與風險分析

1.1 事故背景與影響范圍

2024年第三季度,某互聯(lián)網(wǎng)公司運維團隊在一次例行安全加固過程中,工程師小李需要對一臺承載核心API服務的CentOS 7服務器優(yōu)化防火墻規(guī)則。該服務器部署在阿里云VPC環(huán)境中,運行著Java微服務集群,日均處理請求量約2000萬次。安全部門要求移除所有對公網(wǎng)直接暴露的非必要端口,僅保留負載均衡器的訪問權限。

小李在編寫iptables規(guī)則時,為了攔截來自惡意IP段的掃描流量,在filter表的INPUT鏈末尾添加了一條DROP規(guī)則:

iptables -A INPUT -s 10.0.0.0/8 -j DROP

小李的意圖是阻止10.0.0.0/8私有網(wǎng)段的非法訪問(當時認為所有內(nèi)部服務通信都應該通過更具體的規(guī)則放行)。然而,這條規(guī)則導致了災難性的后果:由于負載均衡器的后端服務器通信恰好使用10.244.0.0/16網(wǎng)段,且該通信流量的處理規(guī)則被放在了新規(guī)則之后,所有來自負載均衡器的健康檢查和流量轉發(fā)請求全部被這條DROP規(guī)則攔截。健康檢查連續(xù)失敗觸發(fā)自動摘除機制,服務在3分鐘內(nèi)從負載均衡池中被全部移除,導致前端收到大量502錯誤。

故障持續(xù)時間線如下:

時間點 事件描述
1400 工程師執(zhí)行iptables規(guī)則變更
1415 負載均衡器健康檢查首次失敗
1447 5次連續(xù)失敗觸發(fā)后端摘除
1412 前端開始出現(xiàn)大面積502錯誤
1433 運維人員通過VNC緊急登錄服務器
1400 規(guī)則回滾完成,服務恢復
1400 全部后端節(jié)點重新上線

這次事故的直接損失包括:約15分鐘的不可用時間、深夜緊急召集的故障復盤會議、以及次周的安全合規(guī)整改報告。更嚴重的是,這次事故在團隊內(nèi)部造成了信任危機,相關工程師面臨績效考核壓力。

1.2 iptables規(guī)則錯誤的不可見代價

與傳統(tǒng)應用故障不同,iptables配置錯誤的代價往往更加隱蔽且影響范圍更廣。這種不可見性體現(xiàn)在以下幾個維度。

狀態(tài)不可見是首要問題。當一個HTTP服務進程崩潰時,監(jiān)控系統(tǒng)的進程監(jiān)控模塊會立即捕獲到退出信號,告警信息在秒級時間內(nèi)推送到值班人員的通訊設備。然而,當iptables規(guī)則阻止了某個端口的流量時,服務進程本身依然保持運行狀態(tài),進程監(jiān)控不會觸發(fā)告警,應用的健康檢查接口可能仍然返回200狀態(tài)碼(如果健康檢查恰好綁定了本地回環(huán)地址)。唯一暴露問題的是用戶體驗層面的故障反饋,這種延遲反饋機制使得故障定位的難度大幅增加。

順序敏感性是iptables規(guī)則的核心特征,也是最容易出錯的設計缺陷。與路由表的最長前綴匹配原則不同,iptables對規(guī)則的處理采用首匹配機制(first match wins)。當一條規(guī)則被匹配后,后續(xù)規(guī)則將不再對該數(shù)據(jù)包進行檢查。這意味著在鏈的不同位置插入規(guī)則可能產(chǎn)生完全相反的效果。在本案例中,小李使用-A參數(shù)將規(guī)則追加到鏈末尾,但鏈中原本存在一條針對10.244.0.0/16網(wǎng)段放行的ACCEPT規(guī)則。由于ACCEPT規(guī)則在前,DROP規(guī)則永遠無法被命中。然而小李在后續(xù)操作中為了清理測試規(guī)則使用了-I參數(shù)(insert,插入到鏈首),這一操作導致DROP規(guī)則被移動到ACCEPT規(guī)則之前,從而使得原本應該被放行的流量被錯誤攔截。

回滾困難是生產(chǎn)環(huán)境的硬傷。當配置文件被錯誤編輯時,大多數(shù)場景可以通過版本控制系統(tǒng)的歷史記錄快速恢復。然而iptables規(guī)則通常通過命令行逐一添加,規(guī)則的保存和恢復雖然有iptables-save和iptables-restore工具支持,但在高壓力的故障處理場景下,操作人員往往因為緊張而忘記在變更前執(zhí)行備份。更加棘手的是,某些規(guī)則變更可能是通過配置管理工具(如Ansible、Puppet)批量下發(fā)的,單臺服務器的回滾可能波及整個集群的正常運行。

SSH連接的脆弱性是每個運維工程師必須深刻認識的風險。SSH是遠程管理的生命線,一旦規(guī)則配置錯誤導致SSH連接中斷,如果沒有預先準備的備用訪問通道(如ILO/DRAC遠程控制卡、串口console或跳板機),工程師將陷入"網(wǎng)絡已斷開但物理接觸不到服務器"的困境。本案例中幸虧該服務器開啟了阿里云控制臺的VNC遠程連接功能,工程師才得以在14分鐘內(nèi)完成緊急登錄和規(guī)則回滾。

1.3 常見踩坑場景歸納

通過分析大量線上案例和社區(qū)故障報告,iptables規(guī)則錯誤可以歸納為以下幾類高頻場景。

規(guī)則順序錯誤是最常見的問題類型。典型的錯誤模式是:管理員希望攔截某個IP段,在已有ACCEPT規(guī)則之后添加了DROP規(guī)則。由于iptables的首匹配機制,新增的DROP規(guī)則永遠不會生效,這就是為什么很多工程師抱怨"規(guī)則明明加了但就是不生效"。反過來,如果在不恰當?shù)奈恢貌迦肓诉^于寬泛的DROP規(guī)則,也會像本案例一樣誤傷正常流量。

接口混淆是另一個高頻錯誤。iptables定義了三個主要的內(nèi)置鏈:INPUT處理目的地為本地進程的數(shù)據(jù)包,F(xiàn)ORWARD處理需要通過本機路由轉發(fā)的數(shù)據(jù)包,OUTPUT處理本地生成的數(shù)據(jù)包。許多初學者容易混淆這些鏈的適用范圍,最常見的錯誤是在OUTPUT鏈上配置訪問控制規(guī)則,卻發(fā)現(xiàn)對入站流量無效。還有一種情況是在多網(wǎng)卡環(huán)境下,工程師希望僅對特定網(wǎng)卡進行過濾,但沒有正確使用-i(入站接口)或-o(出站接口)參數(shù)進行限定。

協(xié)議端口誤配包括多種細分錯誤。協(xié)議類型錯誤,如將UDP端口誤配置為TCP;端口號錯誤,如將80誤寫為8080或8000;多端口匹配錯誤,如使用了-m multiport --dports 80,443但漏掉了常見的SSH端口22;還有數(shù)量級錯誤,如將--dport 80誤寫為--dport 8000,后者匹配的是非標準端口。

信任范圍過大是安全合規(guī)審計中經(jīng)常發(fā)現(xiàn)的問題。使用-s 0.0.0.0/0或-d 0.0.0.0/0意味著接受來自或發(fā)往任意地址的流量,這在測試環(huán)境中雖然方便,但放在生產(chǎn)環(huán)境是嚴重的安全隱患。即便是看似無害的127.0.0.1本機回環(huán)地址,如果配置錯誤也可能導致本地服務被惡意利用。

狀態(tài)跟蹤問題在復雜網(wǎng)絡環(huán)境中尤為突出。連接追蹤模塊(conntrack)維護著會話狀態(tài)信息,NEW狀態(tài)表示新的連接請求,ESTABLISHED狀態(tài)表示已建立的連接,RELATED狀態(tài)表示與現(xiàn)有連接相關的另一個連接(如FTP數(shù)據(jù)傳輸連接)。如果只放行了ESTABLISHED狀態(tài)而遺漏了RELATED狀態(tài),被動模式下的FTP服務將無法傳輸數(shù)據(jù);如果完全依賴狀態(tài)跟蹤而沒有明確的默認策略,可能在連接追蹤表溢出時遭受拒絕服務攻擊。

默認策略風險涉及DROP與REJECT的選擇。將默認策略設置為DROP意味著所有未匹配規(guī)則的數(shù)據(jù)包都會被無聲丟棄,客戶端會一直等待超時而不了解連接被拒絕的原因;而REJECT會返回ICMP不可達或TCP RST包,讓客戶端立即知道連接被拒絕。從安全角度看,DROP略微優(yōu)于REJECT(因為不提供額外的信息反饋),但從運維角度看,REJECT的調試友好性使其成為更常見的選擇。

1.4 工具選擇的技術判斷

2026年的Linux防火墻生態(tài)與十年前相比已經(jīng)有了顯著變化。運維人員在選擇工具時需要考慮多個維度。

iptables與nftables的抉擇是當前最普遍的問題。iptables作為經(jīng)典的防火墻工具,擁有最廣泛的文檔支持、社區(qū)經(jīng)驗和生產(chǎn)環(huán)境部署案例。然而,iptables也存在一些固有缺陷:每個子表(如iptable_filter、iptable_nat)都有獨立的規(guī)則鏈,大量規(guī)則時存在重復遍歷開銷;語法一致性不足,不同表的不同鏈使用相同的匹配語法但行為略有差異;版本兼容性問題,某些iptables擴展在舊版本內(nèi)核上可能不可用。nftables從Linux 3.13開始引入,在Linux 5.6版本后獲得了顯著的性能提升和功能完善,提供了統(tǒng)一的表和鏈結構、簡化的語法、以及比iptables更高效的規(guī)則處理機制。Red Hat在RHEL 8發(fā)布時明確建議新部署使用nftables,Ubuntu和Debian也在后續(xù)版本中將nftables設為默認工具。然而,考慮到大多數(shù)運維人員對iptables的熟悉程度,以及大量現(xiàn)有腳本和配置管理的兼容性需求,短期內(nèi)大規(guī)模遷移到nftables仍需謹慎評估。

firewalld與iptables的關系在CentOS/RHEL系列發(fā)行版上尤為微妙。firewalld于2011年首次發(fā)布,從CentOS 7開始成為默認的防火墻管理前端。它提供了動態(tài)規(guī)則更新(無需重啟服務即可應用規(guī)則變更)、基于區(qū)域的策略管理、以及與NetworkManager的緊密集成等特性。但firewalld本質上只是iptables/nftables的前端包裝器,其底層仍然調用這些內(nèi)核模塊。許多習慣使用iptables命令的工程師會選擇禁用firewalld并直接使用iptables,這種做法在某些場景下是合理的,但需要注意systemd服務單元的依賴關系,以及某些需要firewalld特定特性的場景(如Podman容器網(wǎng)絡)。

云安全組與主機防火墻的邊界是云環(huán)境運維必須厘清的概念。阿里云、AWS、Azure等云服務商都提供了安全組(Security Group)功能作為虛擬防火墻的第一道防線。安全組作用于云平臺的虛擬交換機層面,負責控制云服務器實例之間的入站和出站流量。主機防火墻(如iptables)則作用在操作系統(tǒng)層面,控制著從網(wǎng)絡接口到本地進程的所有流量。兩者并非替代關系,而是互補關系:安全組通常用于粗粒度的邊界控制(如開放80端口給公網(wǎng)),主機防火墻則用于細粒度的訪問控制(如限制僅允許來自負載均衡器的流量訪問特定端口)。在某些故障場景下,安全組規(guī)則可能掩蓋主機防火墻的問題,或反之放大主機防火墻的配置錯誤。

Kubernetes NetworkPolicy的局限性在容器編排環(huán)境中尤為明顯。NetworkPolicy是Kubernetes提供的網(wǎng)絡策略資源,用于定義Pod之間的訪問控制。但NetworkPolicy的實現(xiàn)依賴于CNI插件(如Calico、Cilium、Flannel),不同插件的實現(xiàn)質量和功能覆蓋度參差不齊。更重要的是,NetworkPolicy僅能控制Pod級別的流量,無法覆蓋HostNetwork模式部署的工作負載、節(jié)點端口訪問、以及集群外部到Service的流量。在混合部署場景下,iptables/nftables仍然是不可或缺的補充工具。

第二章 核心原理與關鍵概念

2.1 iptables架構總覽

iptables是Linux內(nèi)核netfilter框架的用戶空間配置工具。netfilter是Linux內(nèi)核的網(wǎng)絡包過濾子系統(tǒng),嵌入在內(nèi)核網(wǎng)絡協(xié)議棧的關鍵位置,能夠在數(shù)據(jù)包經(jīng)過特定Hook點時進行檢查和處理。iptables通過命令行接口與內(nèi)核netfilter模塊通信,實現(xiàn)防火墻策略的下發(fā)和查詢。

理解netfilter的工作機制需要從數(shù)據(jù)包在協(xié)議棧中的流向說起。當一個網(wǎng)絡數(shù)據(jù)包到達主機時,首先經(jīng)過網(wǎng)卡驅動進入內(nèi)核網(wǎng)絡堆棧,在協(xié)議棧的多個位置設置了Hook點,數(shù)據(jù)包經(jīng)過這些Hook點時會被依次檢查,每個Hook點掛載的規(guī)則鏈會決定數(shù)據(jù)包的后續(xù)命運:繼續(xù)傳遞、修改、或者丟棄。數(shù)據(jù)包經(jīng)過全部Hook點處理后,根據(jù)路由決策或者送達本地進程、或者轉發(fā)到其他網(wǎng)絡接口、或者被本地消耗。

2.2 鉤子點詳解

netfilter定義了五個主要的Hook點,分別對應數(shù)據(jù)包在協(xié)議棧中的不同位置。

PREROUTING是數(shù)據(jù)包進入?yún)f(xié)議棧后經(jīng)過的第一個Hook點,位置在路由決策之前。所有入站流量,無論是發(fā)往本地進程還是需要轉發(fā)的,都會在PREROUTING點被處理。這個Hook點主要用于DNAT(目的地址轉換)和原始數(shù)據(jù)包處理。在filter表的語境下,PREROUTING沒有內(nèi)置鏈(因為filter表不處理需要路由決策之前的數(shù)據(jù)包),但在nat表和mangle表中,PREROUTING鏈用于修改數(shù)據(jù)包的目標地址或標記。

INPUT處理所有目的地為本地進程的數(shù)據(jù)包。當數(shù)據(jù)包經(jīng)過PREROUTING處理并完成路由決策后,如果目標是本地系統(tǒng),則會進入INPUT鏈。這個鏈是主機防火墻的核心,幾乎所有針對本地服務的訪問控制規(guī)則都配置在這里。在容器環(huán)境中,Pod的網(wǎng)絡流量也會經(jīng)過宿主機的INPUT鏈。

FORWARD處理需要通過本機轉發(fā)的數(shù)據(jù)包。當數(shù)據(jù)包經(jīng)過路由決策后,如果目標不是本地但需要本機協(xié)助轉發(fā)(如路由器場景),則會進入FORWARD鏈。在純服務器環(huán)境中,這個鏈通常用于處理NAT穿透、防火墻轉發(fā)等場景。

OUTPUT處理本地生成的所有數(shù)據(jù)包。本地進程發(fā)送的網(wǎng)絡數(shù)據(jù)無論是發(fā)往本機還是外部,都會經(jīng)過OUTPUT鏈。這個鏈常用于控制本地對外訪問,或在nat表中配置SNAT(源地址轉換)。

POSTROUTING是數(shù)據(jù)包離開協(xié)議棧前的最后一個Hook點,位置在路由決策和所有處理完成之后。所有出站數(shù)據(jù)包,無論是本地生成還是轉發(fā)的,都會經(jīng)過POSTROUTING。這個Hook點主要用于SNAT和數(shù)據(jù)包標記修改。

以下命令可以查看當前內(nèi)核編譯支持的Hook點:

# 查看netfilter模塊加載狀態(tài)
lsmod | grep -E'ip_tables|iptable_filter|ip_conntrack|nf_conntrack'

# 預期輸出示例:
# ip_tables         32768 3 iptable_filter,iptable_nat,iptable_mangle
# iptable_filter      16384 1
# iptable_nat        16384 1
# iptable_mangle      16384 1
# ip_conntrack       40960 1 nf_conntrack_ipv4
# nf_conntrack_ipv4     49152 1
# nf_conntrack       131072 4 ip_conntrack,nf_conntrack_ipv4,nf_nat,nf_nat_ipv4
# ip6_tables        28672 3 ip6table_filter,ip6table_mangle,ip6table_nat

2.3 表與鏈的層級關系

iptables架構中,"表"(Table)定義了不同功能的數(shù)據(jù)包處理方式,"鏈"(Chain)是規(guī)則的有序集合,數(shù)據(jù)包在經(jīng)過Hook點時被依次匹配。

filter表是iptables中最常用的表,負責數(shù)據(jù)包的過濾決策(允許或拒絕)。filter表包含三個內(nèi)置鏈:INPUT、FORWARD、OUTPUT。大多數(shù)主機防火墻配置都圍繞filter表展開。

nat表負責網(wǎng)絡地址轉換,包括SNAT(源地址轉換)、DNAT(目的地址轉換)和端口轉發(fā)。nat表包含PREROUTING、INPUT、OUTPUT、POSTROUTING四個內(nèi)置鏈。需要特別注意的是,nat表不應該用于過濾目的,iptables的連接追蹤機制會自動為NAT后的連接建立狀態(tài)跟蹤。

mangle表用于修改數(shù)據(jù)包的特定字段,如TTL、TOS、DSCP等。mangle表包含所有五個內(nèi)置鏈。由于mangle表在數(shù)據(jù)包處理流程中位置特殊,過度的mangle規(guī)則可能影響網(wǎng)絡性能。

raw表用于配置連接追蹤的例外規(guī)則,優(yōu)先級最高。raw表包含PREROUTING和OUTPUT兩個內(nèi)置鏈。通過在raw表中為特定連接設置NOTRACK標記,可以禁用該連接的狀態(tài)跟蹤,這在高性能場景下可以減少連接追蹤的開銷。

表的優(yōu)先級(處理順序,從高到低)為:raw > mangle > nat > filter。這就是為什么在raw表中標記為NOTRACK的連接不會進入conntrack表的原因。

2.4 規(guī)則匹配機制與計數(shù)器

iptables規(guī)則的匹配遵循"首匹配機制"。當數(shù)據(jù)包進入某條鏈時,iptables會從鏈的第一條規(guī)則開始依次檢查,一旦找到匹配當前數(shù)據(jù)包的規(guī)則,立即執(zhí)行該規(guī)則指定的目標動作(ACCEPT、DROP、REJECT等),不再繼續(xù)檢查后續(xù)規(guī)則。如果數(shù)據(jù)包不匹配任何規(guī)則,則執(zhí)行鏈的默認策略(Default Policy)。

每條iptables規(guī)則都維護兩個計數(shù)器:pkts表示匹配該規(guī)則的數(shù)據(jù)包數(shù)量,bytes表示匹配該規(guī)則的總字節(jié)數(shù)。計數(shù)器信息對于流量分析和故障排查非常重要,可以通過iptables -L -n -v命令查看。以下是計數(shù)器輸出的示例:

# 查看filter表INPUT鏈的詳細規(guī)則及計數(shù)器
iptables -L INPUT -n -v --line-numbers

# 預期輸出示例:
# Chain INPUT (policy DROP 0 packets, 0 bytes)
# pkts bytes target   prot opt in   out   source        destination
#  0   0 ACCEPT   all -- *   *    0.0.0.0/0      0.0.0.0/0      state RELATED,ESTABLISHED
#  0   0 ACCEPT   tcp -- *   *    10.0.0.0/8      0.0.0.0/0      tcp dpt:22
#  0   0 ACCEPT   tcp -- *   *    0.0.0.0/0      0.0.0.0/0      tcp dpt:80
#  0   0 LOG    all -- *   *    0.0.0.0/0      0.0.0.0/0      LOG flags 0 level 4 prefix "IPTables-Dropped: "
#  0   0 DROP    all -- *   *    0.0.0.0/0      0.0.0.0/0

# 說明:
# pkts: 該規(guī)則匹配的數(shù)據(jù)包個數(shù)
# bytes: 該規(guī)則匹配的總字節(jié)數(shù)
# target: 匹配后執(zhí)行的動作
# prot: 協(xié)議類型(tcp/udp/icmp/all)
# opt: IP選項(通常為--)
# in/out: 入站/出站網(wǎng)絡接口(*表示任意接口)
# source/destination: 源/目的IP地址或網(wǎng)段

2.5 連接狀態(tài)追蹤原理

連接追蹤(Connection Tracking,簡稱conntrack)是netfilter的核心組件之一,為防火墻提供了基于會話狀態(tài)的智能判斷能力。conntrack模塊維護著一個連接跟蹤表,記錄了所有已知連接的狀態(tài)信息,使得防火墻能夠基于連接上下文而非單個數(shù)據(jù)包做出決策。

連接追蹤支持四種主要狀態(tài):NEW表示主動發(fā)起的新連接請求,如三次握手中的第一個SYN包;ESTABLISHED表示已建立的連接,只有匹配了先前NEW狀態(tài)的響應包才會被標記為ESTABLISHED;RELATED表示與現(xiàn)有連接相關的另一個連接,如FTP數(shù)據(jù)通道、ICMP錯誤消息等;INVALID表示無法識別的數(shù)據(jù)包,可能屬于已過期的連接或畸形數(shù)據(jù)包。

以下命令可以查看當前系統(tǒng)連接追蹤表的狀態(tài):

# 查看連接追蹤表條目數(shù)
cat /proc/sys/net/netfilter/nf_conntrack_max

# 預期輸出:
# 262144

# 查看當前追蹤的連接數(shù)
cat /proc/net/nf_conntrack | wc -l

# 預期輸出示例:
# 15432

# 查看連接追蹤表的前20條記錄
cat /proc/net/nf_conntrack | head -20

# 預期輸出示例(經(jīng)過格式化,便于閱讀):
# ipv4   2 tcp   6 431999 ESTABLISHED src=10.244.0.15 dst=10.244.0.23 sport=443 dport=8080 src=10.244.0.23 dst=10.244.0.15 sport=8080 dport=443 [ASSURED] use=2
# ipv4   2 tcp   6 119 ESTABLISHED src=192.168.1.100 dst=192.168.1.10 sport=56342 dport=22 src=192.168.1.10 dst=192.168.1.100 sport=22 dport=56342 [ASSURED] use=1
# ipv4   2 udp   17 29 src=10.244.0.1 dst=10.244.0.10 sport=53 dport=41863 [UNREPLIED] src=10.244.0.10 dst=10.244.0.1 sport=41863 dport=53 use=1

conntrack-tools包提供了更友好的用戶空間工具來查看和管理連接追蹤狀態(tài):

# 使用conntrack命令行工具查看ESTABLISHED狀態(tài)的連接
conntrack -L ESTABLISHED | head -10

# 預期輸出示例:
# tcp   6 ESTABLISHED src=10.244.0.15 dst=10.244.0.23 sport=443 dport=8080 src=10.244.0.23 dst=10.244.0.15 sport=8080 dport=443 [ASSURED] mark=0 delta-time=120 use=1
# tcp   6 ESTABLISHED src=192.168.1.100 dst=192.168.1.10 sport=56342 dport=22 src=192.168.1.10 dst=192.168.1.100 sport=22 dport=56342 [ASSURED] mark=0 delta-time=86400 use=1

# 查看特定源IP的連接
conntrack -L -s 10.244.0.15

# 預期輸出示例:
# tcp   6 ESTABLISHED src=10.244.0.15 dst=10.244.0.23 sport=443 dport=8080 src=10.244.0.23 dst=10.244.0.15 sport=8080 dport=443 [ASSURED] mark=0 delta-time=125 use=1
# tcp   6 ESTABLISHED src=10.244.0.15 dst=10.244.0.23 sport=443 dport=8081 src=10.244.0.23 dst=10.244.0.15 sport=8081 dport=443 [ASSURED] mark=0 delta-time=118 use=1

在NAT環(huán)境下,連接追蹤扮演著至關重要的角色。當數(shù)據(jù)包經(jīng)過NAT處理時,conntrack模塊會記錄轉換前后的地址和端口信息,確保反向流量能夠正確地被轉換回來。如果連接追蹤表出現(xiàn)問題或溢出,NAT轉換將失敗,導致連接中斷。因此,監(jiān)控連接追蹤表的使用情況是生產(chǎn)環(huán)境運維的重要工作。

2.6 常見匹配條件詳解

iptables規(guī)則通過各種匹配條件來確定數(shù)據(jù)包是否與規(guī)則匹配。以下是生產(chǎn)環(huán)境中使用頻率最高的匹配條件。

源目地址匹配使用-s(source)和-d(destination)參數(shù):

# 匹配來自特定IP的流量
iptables -A INPUT -s 192.168.1.100 -j ACCEPT

# 匹配發(fā)往特定IP段的流量
iptables -A OUTPUT -d 10.0.0.0/8 -j DROP

# 匹配來自特定網(wǎng)段且發(fā)往另一個網(wǎng)段的流量
iptables -A FORWARD -s 172.16.0.0/12 -d 10.0.0.0/8 -j ACCEPT

協(xié)議匹配使用-p參數(shù),協(xié)議名稱不區(qū)分大小寫:

# 匹配TCP流量
iptables -A INPUT -p tcp -dport 22 -j ACCEPT

# 匹配UDP流量(通常用于DNS)
iptables -A INPUT -p udp -dport 53 -j ACCEPT

# 匹配ICMP流量(ping)
iptables -A INPUT -p icmp --icmp-typeecho-request -j ACCEPT

端口匹配使用--dport(目的端口)和--sport(源端口),必須與-p參數(shù)配合使用:

# 匹配特定目的端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# 匹配多個端口(需要使用multiport擴展)
iptables -A INPUT -p tcp -m multiport --dports 80,443,8080 -j ACCEPT

# 匹配端口范圍
iptables -A INPUT -p tcp --dport 8000:9000 -j ACCEPT

接口匹配使用-i(入站接口)和-o(出站接口)參數(shù):

# 僅對來自eth0的流量進行過濾
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT

# 限制出站流量僅從特定接口發(fā)出
iptables -A OUTPUT -o eth1 -j DROP

# 查看系統(tǒng)網(wǎng)絡接口
ip link show

# 預期輸出示例:
# 1: lo:  mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
#   link/loopback 000000:00 brd 000000:00
# 2: eth0:  mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
#   link/ether 520034:56 brd ffffff:ff
# 3: eth1:  mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
#   link/ether 520034:57 brd ffffff:ff

狀態(tài)匹配使用-m state --state或-m conntrack --ctstate參數(shù):

# 使用state模塊(舊語法,仍廣泛使用)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 使用conntrack模塊(新語法,功能更強)
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# 放行新的SSH連接但拒絕無效狀態(tài)
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT

速率限制使用-m limit擴展,可以用于防御DoS攻擊:

# 限制ICMP包速率(防止ping flood)
iptables -A INPUT -p icmp --icmp-typeecho-request -mlimit--limit1/second --limit-burst 4 -j ACCEPT
iptables -A INPUT -p icmp --icmp-typeecho-request -j DROP

# 查看limit擴展的幫助信息
iptables -mlimit--help

# 預期輸出(部分):
# limit match options:
# --limit avg     max average match rate [default: 3/hour]
# --limit-burst number     packets to match in a burst [default: 5]

recent模塊提供了會話管理能力,常用于防御暴力破解:

# SSH防護示例:每分鐘允許3次新連接
iptables -A INPUT -p tcp --dport 22 -m recent --set--name SSHCHECK --rsource
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --name SSHCHECK --rsource -j DROP
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT

# 查看recent列表
cat /proc/net/xt_recent/SSHCHECK

# 預期輸出示例:
# src=192.168.1.100 ttl: 128 last_seen: 4294967236 oldest_pkt: 1 2, 3, 4, 5, 6, 7, 8, 9, 10
# src=192.168.1.101 ttl: 128 last_seen: 4294967245 oldest_pkt: 1, 2, 3, 4

2.7 規(guī)則順序與性能優(yōu)化

默認策略是鏈級別的重要配置選項,定義了當數(shù)據(jù)包不匹配鏈中任何規(guī)則時的處理方式。建議在生產(chǎn)環(huán)境中將filter表的默認策略設置為DROP,而不是ACCEPT:

# 設置默認策略為DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 驗證默認策略
iptables -L | grep -E'^Chain'

# 預期輸出:
# Chain INPUT (policy DROP)
# Chain FORWARD (policy DROP)
# Chain OUTPUT (policy ACCEPT)

在規(guī)則順序方面,需要遵循"具體規(guī)則在前、通用規(guī)則在后"的原則。常用的放行規(guī)則應該盡量靠近鏈的起點,以減少遍歷次數(shù);危險的攔截規(guī)則(如本案例中的大范圍DROP)應該放在最后,或者明確排除需要放行的例外場景。

自定義鏈是組織復雜規(guī)則集的有效方式。通過將相關規(guī)則放在自定義鏈中,可以提高規(guī)則的可維護性,也能在一定程度上提升性能(因為跳轉到自定義鏈的檢查成本低于遍歷大量規(guī)則):

# 創(chuàng)建自定義鏈
iptables -N CUSTOM_WEB_SERVERS

# 為自定義鏈添加規(guī)則
iptables -A CUSTOM_WEB_SERVERS -s 10.0.0.0/8 -p tcp --dport 8080 -j ACCEPT
iptables -A CUSTOM_WEB_SERVERS -s 192.168.0.0/16 -p tcp --dport 8080 -j ACCEPT

# 從INPUT鏈引用自定義鏈
iptables -A INPUT -p tcp --dport 80 -j CUSTOM_WEB_SERVERS
iptables -A INPUT -p tcp --dport 443 -j CUSTOM_WEB_SERVERS

# 刪除自定義鏈(需要先移除所有引用)
iptables -X CUSTOM_WEB_SERVERS

規(guī)則數(shù)量對性能的影響在2026年的硬件條件下已經(jīng)不是主要瓶頸。以主流的Intel Xeon Gold或AMD EPYC處理器為例,每秒處理數(shù)百萬數(shù)據(jù)包的能力遠超過大多數(shù)服務器的網(wǎng)卡帶寬。然而,在某些特殊場景下(如DDoS防御、高并發(fā)低延遲交易系統(tǒng)),規(guī)則優(yōu)化的價值仍然顯著。通過使用ipset存儲大量IP黑名單、利用conntrack減少狀態(tài)檢查開銷、啟用硬件卸載(如ifb接口)等技術,可以進一步提升防火墻性能。

第三章 實戰(zhàn)步驟與常見排障路徑

3.1 事故現(xiàn)場的緊急響應

當iptables規(guī)則變更導致系統(tǒng)無法遠程訪問時,緊急響應的速度和質量直接決定了故障持續(xù)時間。以下是標準的緊急響應流程。

遠程操作的風險評估應該在任何規(guī)則變更之前完成。在執(zhí)行可能影響SSH連接的規(guī)則之前,必須確認當前會話不會因為規(guī)則變更而中斷。常用的防護措施包括:使用ssh -tt user@host "sudo iptables ..."強制分配偽終端以提高連接穩(wěn)定性;先測試規(guī)則是否會影響本地連接(如從同一網(wǎng)段的另一臺機器);配置TCP Keepalive檢測死連接。

然而,一旦SSH連接已經(jīng)斷開,遠程操作的可能性就非常有限了。此時需要依賴預先配置好的備用訪問通道。

串口連接和遠程控制卡是斷網(wǎng)情況下的最后防線。HP服務器的iLO、dell服務器的iDRAC、以及云服務商的VNC/SSH控制臺都提供了繞過網(wǎng)絡棧直接訪問服務器的能力。在日常運維中,務必確保這些接口的配置正確且Credentials有效:

# 檢查串口是否啟用(Ubuntu/Debian)
systemctl status serial-getty@ttyS0

# 預期輸出:
# ● serial-getty@ttyS0.service - Serial Getty on ttyS0
#   Loaded: loaded (/lib/systemd/system/serial-getty@ttyS0.service; enabled)
#  ...

# 檢查GRUB配置確保串口啟用
grep -E'GRUB_CMDLINE_LINUX.*console'/etc/default/grub

# 預期輸出示例:
# GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200"

阿里云VNC連接的使用步驟:登錄阿里云控制臺,選擇對應的ECS實例,點擊"遠程連接",選擇"VNC連接",輸入實例密碼即可進入。該連接通過實例自帶的VNC服務端實現(xiàn),不依賴SSH或網(wǎng)絡管理平面,因此即使iptables阻止了所有網(wǎng)絡流量,VNC連接仍然可用。

緊急恢復命令需要謹慎使用。iptables -F(flush)會清空指定鏈的所有規(guī)則,如果此時SSH會話剛好斷開,將徹底失去對服務器的控制。安全的做法是先備份當前規(guī)則,再使用iptables-restore恢復備份:

# 備份當前規(guī)則(推薦在每次變更前執(zhí)行)
iptables-save > /root/iptables-backup-$(date +%Y%m%d-%H%M%S).bak

# 如果已經(jīng)斷開連接,可以通過以下方式恢復
# 方法1:通過救援模式或VNC執(zhí)行
iptables-restore < /root/iptables-backup-latest.bak

# 方法2:臨時允許所有流量以便SSH恢復
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F

# 恢復原有規(guī)則后重新配置正確的限制策略

留存現(xiàn)場是故障分析的關鍵。在完成緊急恢復后,務必保留故障時的規(guī)則狀態(tài)、系統(tǒng)的日志信息、以及故障前后的配置差異。這些信息對于后續(xù)的根因分析和整改措施的制定至關重要:

# 導出故障時的完整規(guī)則(如果還能執(zhí)行命令)
iptables-save > /root/iptables-crash-state-$(date +%Y%m%d-%H%M%S).bak

# 查看內(nèi)核日志中的iptables相關記錄
dmesg | grep -i'iptables|netfilter|IN=|OUT='| tail -50

# 預期輸出示例:
# [1245897.234567] IPTABLES-Dropped: IN=eth0 OUT= MAC=520034ac48ab08:00 SRC=10.244.0.15 DST=10.244.0.23 LEN=60 TOS=0x00
# [1245897.234680] IPTables-Dropped: IN=eth0 OUT= MAC=520034ac48ab08:00 SRC=10.244.0.15 DST=10.244.0.23 LEN=60 TOS=0x00

# 查看系統(tǒng)日志中的認證失敗記錄(可能與規(guī)則變更相關)
journalctl -u sshd | tail -100

3.2 規(guī)則編寫規(guī)范與檢查

規(guī)范的編寫流程可以顯著降低配置錯誤的風險。本節(jié)介紹一套完整的規(guī)則編寫-檢查-發(fā)布流程。

編寫前的信息收集是確保規(guī)則正確性的第一步。需要收集的信息包括:服務器的網(wǎng)卡配置和IP地址、所有需要暴露的服務的協(xié)議和端口、客戶端的來源網(wǎng)段或IP地址、服務器與其他系統(tǒng)之間的依賴關系(如數(shù)據(jù)庫連接、緩存訪問、負載均衡器通信等):

# 查看當前網(wǎng)絡接口配置
ip addr show

# 預期輸出示例:
# 1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
#   link/loopback 000000:00 brd 000000:00
#   inet 127.0.0.1/8 scope host lo
#    valid_lft forever preferred_lft forever
# 2: eth0:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
#   link/ether 520034:56 brd ffffff:ff
#   inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
#    valid_lft forever preferred_lft forever
# 3: eth1:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
#   link/ether 520034:57 brd ffffff:ff
#   inet 192.168.1.100/24 brd 192.168.1.255 scope global noprefixroute eth1
#    valid_lft forever preferred_lft forever

# 查看當前監(jiān)聽的端口及綁定地址
ss -tlnp

# 預期輸出示例:
# State   Recv-Q   Send-Q   Local Address:Port   Peer Address:Port   Process
# LISTEN   0     128       0.0.0.0:22      0.0.0.0:*     users:(("sshd",pid=1234,fd=3))
# LISTEN   0     128       0.0.0.0:80      0.0.0.0:*     users:(("nginx",pid=5678,fd=6))
# LISTEN   0     128       0.0.0.0:443      0.0.0.0:*     users:(("nginx",pid=5678,fd=7))
# LISTEN   0     128       127.0.0.1:6379     0.0.0.0:*     users:(("redis-server",pid=9012,fd=6))
# LISTEN   0     128       0.0.0.0:3306     0.0.0.0:*     users:(("mysqld",pid=1011,fd=14))

# 查看服務器路由表
ip route show

# 預期輸出示例:
# default via 10.0.0.1 dev eth0 proto dhcp src 10.0.0.100 metric 100
# 10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.100
# 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.100

查看現(xiàn)有規(guī)則是理解當前安全邊界的基礎。在添加新規(guī)則之前,必須完整了解現(xiàn)有的規(guī)則結構:

# 以數(shù)字形式顯示規(guī)則(不解析服務名)
iptables -L -n

# 顯示完整的規(guī)則包括詳細參數(shù)
iptables -L -n -v --line-numbers

# 只查看filter表的規(guī)則
iptables -t filter -L -n -v --line-numbers

# 查看nat表的規(guī)則
iptables -t nat -L -n -v --line-numbers

# 預期輸出示例(filter表INPUT鏈):
# Chain INPUT (policy DROP 0 packets, 0 bytes)
# num  pkts bytes target   prot opt in   out   source        destination
# 1    0   0 ACCEPT   all -- lo   *    0.0.0.0/0      0.0.0.0/0
# 2    0   0 ACCEPT   all -- *   *    0.0.0.0/0      0.0.0.0/0      state RELATED,ESTABLISHED
# 3    0   0 ACCEPT   tcp -- *   *    10.0.0.0/24     0.0.0.0/0      tcp dpt:22
# 4    0   0 LOG    all -- *   *    0.0.0.0/0      0.0.0.0/0      LOG flags 0 level 4 prefix "IPTables-Input-Drop: "
# 5    0   0 DROP    all -- *   *    0.0.0.0/0      0.0.0.0/0

備份現(xiàn)有規(guī)則應該在任何變更操作前強制執(zhí)行:

# 備份為可讀的文本格式
iptables-save > /root/iptables-backup-$(date +%Y%m%d-%H%M%S).save

# 或者備份為更易于版本控制的格式
iptables-save | gzip > /root/iptables-backup-$(date +%Y%m%d).save.gz

# 驗證備份文件內(nèi)容
cat /root/iptables-backup-*.save | head -100

# 預期輸出示例:
# # Generated by iptables-save on Mon Apr 24 1000 2026
# *filter
# :INPUT DROP [0:0]
# :FORWARD DROP [0:0]
# :OUTPUT ACCEPT [0:0]
# -A INPUT -i lo -j ACCEPT
# -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# -A INPUT -s 10.0.0.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
# -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
# -A INPUT -j LOG --log-prefix "IPTables-Input-Drop: "
# -A INPUT -j DROP
# COMMIT

編寫規(guī)范是確保規(guī)則可維護性的關鍵。以下是一套推薦的結構:

# 建議的規(guī)則文件結構(/etc/sysconfig/iptables-apply規(guī)則文件)
# 遵循此模板編寫規(guī)則,便于review和版本控制

# ============================================
# 第一部分:模塊加載
# ============================================
*filter

# 提交前確保必要的模塊已加載
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

# ============================================
# 第二部分:本地回環(huán)流量放行
# ============================================
# 本地回環(huán)接口的所有流量必須放行,否則本地服務通信會出問題
-A INPUT -i lo -j ACCEPT

# ============================================
# 第三部分:已建立連接的流量放行
# ============================================
# 這是最重要的規(guī)則之一,必須放在顯式放行規(guī)則之后
# 如果位置錯誤,會導致已建立的連接被意外中斷
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# ============================================
# 第四部分:具體服務放行
# ============================================
# SSH服務(僅允許內(nèi)網(wǎng)訪問)
-A INPUT -p tcp -s 10.0.0.0/24 --dport 22 -m state --state NEW -j ACCEPT

# HTTP/HTTPS服務(公網(wǎng)訪問)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

# 僅允許特定后端網(wǎng)段訪問API端口
-A INPUT -p tcp -s 10.244.0.0/16 --dport 8080 -j ACCEPT

# ============================================
# 第五部分:日志記錄(可選)
# ============================================
# 記錄被拒絕的流量,便于事后分析
-A INPUT -mlimit--limit5/min -j LOG --log-prefix"iptables-INPUT-dropped: "--log-level 4

# ============================================
# 第六部分:最終拒絕
# ============================================
# 這條規(guī)則確保所有未匹配的流量被拒絕
-A INPUT -j DROP

COMMIT

語法檢查是上線前的最后一道防線。使用iptables-restore配合--test參數(shù)可以在不實際應用規(guī)則的情況下檢查語法錯誤:

# 創(chuàng)建規(guī)則文件
cat > /tmp/test-rules.v4 <

3.3 高頻踩坑場景與解決方案

本節(jié)詳細分析5個生產(chǎn)環(huán)境中出現(xiàn)頻率最高的iptables配置錯誤場景,提供完整的問題診斷思路和解決方案。

場景1:SSH連接斷開

這是最常見也最危險的配置錯誤。典型案例是工程師在配置防火墻時使用了過于嚴格的規(guī)則,導致自己的SSH連接被切斷,或者在重啟iptables服務后SSH規(guī)則未能正確加載。

問題原因分析:SSH使用TCP協(xié)議,TCP三次握手需要客戶端發(fā)送SYN包,服務器回復SYN-ACK包,客戶端再發(fā)送ACK包完成連接建立。如果SSH規(guī)則要求連接狀態(tài)為NEW且使用了--ctstate NEW進行匹配,但規(guī)則順序錯誤導致后續(xù)DROP規(guī)則先匹配了SYN包,則連接永遠無法建立。

錯誤的規(guī)則配置示例:

# 錯誤配置1:ACCEPT規(guī)則在DROP規(guī)則之后(永遠不生效)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP

# 錯誤配置2:狀態(tài)匹配放錯位置,導致NEW狀態(tài)連接無法建立
iptables -A INPUT -j DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT

# 錯誤配置3:沒有指定連接狀態(tài),導致只有已建立的連接能通行
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 上述規(guī)則看似正確,但如果沒有配合ESTABLISHED規(guī)則,TCP三次握手無法完成

正確的規(guī)則配置應該確保:ESTABLISHED/RELATED狀態(tài)的連接被放行、NEW狀態(tài)的SSH連接被放行、DROP規(guī)則在最后:

# 正確配置:先放行已建立連接,再放行新建連接
iptables -P INPUT DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT

解決方案與防御策略:使用帶接口限制的SSH規(guī)則可以增加一層保護,如iptables -A INPUT -i eth0 -p tcp --dport 22 -s 10.0.0.0/24 -j ACCEPT,確保SSH僅能從特定網(wǎng)卡和網(wǎng)段訪問;配置登錄源地址限制,即使SSH規(guī)則失效,還有系統(tǒng)級別的/etc/hosts.allow和/etc/hosts.deny作為備份防護;在關鍵服務器上配置Console或ILO/DRAC訪問,制作記錄SSH會話操作的審計日志。

場景2:Web服務端口無法訪問

當用戶報告無法訪問Web服務時,故障點可能在多個位置:服務器防火墻、負載均衡器安全組、云平臺網(wǎng)絡ACL、甚至是客戶端本地網(wǎng)絡。以下是系統(tǒng)化的排查流程。

首先確認是服務端問題還是網(wǎng)絡問題:

# 在客戶端執(zhí)行:測試TCP端口連通性(不依賴服務響應)
nc -zv web-server.example.com 80

# 預期輸出(可達):
# Connection to web-server.example.com 80 port [tcp/http] succeeded!

# 預期輸出(不可達):
# nc: connect to web-server.example.com port 80 (tcp) failed: Connection timed out

# 在服務端執(zhí)行:確認服務進程正在監(jiān)聽
ss -tlnp | grep -E':80|:443'

# 預期輸出:
# LISTEN 0 128 *:80 *:* users:(("nginx",pid=1234))
# LISTEN 0 128 *:443 *:* users:(("nginx",pid=5678))

# 在服務端執(zhí)行:確認服務綁定地址
netstat -tlnp | grep nginx

# 預期輸出:
# tcp 0 0 0.0.0.0:80  0.0.0.0:*  LISTEN  1234/nginx
# tcp 0 0 0.0.0.0:443  0.0.0.0:*  LISTEN  1234/nginx

# 常見問題:服務綁定到127.0.0.1導致外部無法訪問
# 預期輸出(問題狀態(tài)):
# tcp 0 0 127.0.0.1:80  0.0.0.0:*  LISTEN  1234/nginx

在服務端檢查iptables規(guī)則是否允許目標端口的流量:

# 查看filter表INPUT鏈規(guī)則,按行號顯示
iptables -L INPUT -n -v --line-numbers

# 測試規(guī)則是否能匹配特定流量(使用-t filter明確指定表)
iptables -t filter -C INPUT -p tcp --dport 80 -j ACCEPT 2>&1

# 如果規(guī)則已存在,命令返回0;否則返回非0錯誤碼
# 使用-I而非-C可以添加測試規(guī)則

# 常見錯誤:協(xié)議或端口配置錯誤
# 檢查規(guī)則時發(fā)現(xiàn):-p udp --dport 80(錯誤使用了UDP而非TCP)

檢查連接追蹤狀態(tài)是否影響新建連接:

# 查看是否有大量連接處于半開狀態(tài)(可能被誤判為攻擊)
cat /proc/net/nf_conntrack | grep'tcp.*NEW'| head -20

# 查看連接追蹤表當前條數(shù)
cat /proc/net/nf_conntrack | wc -l

# 查看連接追蹤表最大值
cat /proc/sys/net/netfilter/nf_conntrack_max

# 查看連接追蹤超時配置
cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_time_wait

# 常見問題:nf_conntrack_max設置過小導致連接追蹤失敗
# 解決方法:echo 524288 > /proc/sys/net/netfilter/nf_conntrack_max

場景3:內(nèi)部服務無法訪問外網(wǎng)

當服務器上的應用需要訪問外部API或下載資源時,如果iptables的OUTPUT鏈默認策略是DROP且缺少外訪規(guī)則,流量將無法發(fā)出。

首先確認路由是否正常:

# 查看默認路由
ip route show default

# 預期輸出:
# default via 10.0.0.1 dev eth0 proto dhcp src 10.0.0.100 metric 100

# 測試網(wǎng)關連通性
ping -c 3 10.0.0.1

# 預期輸出:
# PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
# 64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.3 ms
# 64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.4 ms
# 64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.4 ms

# --- 10.0.0.1 ping statistics ---
# 3 packets transmitted, 3 received, 0% packet loss, time 2000ms

# 測試外部DNS解析(如果ping外網(wǎng)IP正常但域名解析失?。?nslookup www.baidu.com

# 預期輸出:
# Server:  10.0.0.1
# Address:  10.0.0.1#53
# Non-authoritative answer:
# Name:   www.baidu.com
# Address:  220.181.38.149

檢查OUTPUT鏈的規(guī)則和策略:

# 查看OUTPUT鏈的規(guī)則和默認策略
iptables -L OUTPUT -n -v --line-numbers

# 預期輸出(正常狀態(tài)):
# Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
# pkts bytes target   prot opt in   out   source        destination
#  0   0 ACCEPT   all -- *   lo   0.0.0.0/0      0.0.0.0/0
#  0   0 ACCEPT   tcp -- *   eth0  0.0.0.0/0      0.0.0.0/0      tcp dpt:80
#  0   0 ACCEPT   tcp -- *   eth0  0.0.0.0/0      0.0.0.0/0      tcp dpt:443

# 如果OUTPUT策略是DROP,需要添加放行規(guī)則
iptables -P OUTPUT DROP
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT

如果服務器啟用了NAT并作為網(wǎng)關,還需要檢查POSTROUTING規(guī)則:

# 查看nat表的POSTROUTING鏈
iptables -t nat -L POSTROUTING -n -v --line-numbers

# 預期輸出(正常共享上網(wǎng)配置):
# Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
# pkts bytes target   prot opt in   out   source        destination
#  0   0 MASQUERADE all -- *   eth0  0.0.0.0/0      0.0.0.0/0

# 常見問題:MASQUERADE規(guī)則沒有指定出站接口
# 錯誤示例:-A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
# 正確示例:-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

# 驗證NAT是否生效(在內(nèi)網(wǎng)機器上執(zhí)行)
curl ifconfig.me

反向路徑過濾(rp_filter)可能導致合法數(shù)據(jù)包被丟棄:

# 檢查rp_filter配置
cat /proc/sys/net/ipv4/conf/all/rp_filter
cat /proc/sys/net/ipv4/conf/eth0/rp_filter

# 預期輸出(0表示禁用,1表示嚴格模式,2表示寬松模式):
# 0
# 1

# 寬松模式下允許從任何接口進入的數(shù)據(jù)包通過
echo2 > /proc/sys/net/ipv4/conf/all/rp_filter

# 或者僅對特定接口設置為寬松模式
echo2 > /proc/sys/net/ipv4/conf/eth0/rp_filter

# 永久配置需要在/etc/sysctl.conf中添加:
# net.ipv4.conf.all.rp_filter = 2
# net.ipv4.conf.eth0.rp_filter = 2

場景4:負載均衡后端節(jié)點全掛

這是本案例的核心場景,但類似的故障也頻繁發(fā)生在使用Keepalived、Nginx upstream、Docker Swarm等技術的生產(chǎn)環(huán)境中。核心問題是健康檢查或心跳信號被防火墻誤攔截。

檢查負載均衡器的健康檢查機制:

# 以Nginx upstream為例,檢查健康檢查配置
# Nginx需要使用upstreamcheck模塊或商業(yè)版的healthcheck功能

# 查看后端服務器的連接追蹤狀態(tài)
conntrack -L | grep -E':80|:443'| head -20

# 預期輸出(Nginx主動關閉連接):
# tcp   6 TIME_WAIT src=10.244.0.1 dst=10.244.0.15 sport=12345 dport=80 src=10.244.0.15 dst=10.244.0.1 sport=80 dport=12345 [ASSURED] use=2

# 查看是否有大量來自負載均衡器IP的健康檢查請求被DROP
iptables -L INPUT -n -v | grep 10.244.0.1

# 預期輸出(如果規(guī)則正確):
# 12345 1234567 ACCEPT   tcp -- *   *    10.244.0.1     0.0.0.0/0      tcp dpt:80

Keepalived VRRP組播被阻的問題排查:

# 檢查VRRP組播是否被阻塞
# Keepalived使用224.0.0.18作為VRRP組播地址

# 查看iptables是否阻斷了組播
iptables -L INPUT -n -v | grep 224.0.0.18

# 如果沒有輸出,說明規(guī)則不存在或被DROP規(guī)則阻止

# 檢查是否有針對多播地址的DROP規(guī)則
iptables -L INPUT -n -v | grep -E'224.0.0|MULTICAST'

# 解決方法:放行VRRP組播流量
iptables -A INPUT -d 224.0.0.18 -p vrrp -j ACCEPT

# 查看VRRP日志(如果使用Ubuntu/Debian)
journalctl -u keepalived | tail -50

# 預期輸出(正常狀態(tài)):
# Apr 24 1000 lb-server Keepalived_vrrp[12345]: VRRP_Instance(vip) Entering BACKUP state
# Apr 24 1005 lb-server Keepalived_vrrp[12345]: VRRP_Instance(vip) Received higher prio advert
# Apr 24 1005 lb-server Keepalived_vrrp[12345]: VRRP_Instance(vip) Entering MASTER state

反向路徑過濾在負載均衡場景下的問題:

# 檢查是否有來自負載均衡器VIP的流量被rp_filter丟棄
# 當負載均衡器使用DSR(直接服務器返回)模式時尤為常見

# 查看內(nèi)核日志中的rp_filter丟棄記錄
dmesg | grep -i'rp_filter|反向路徑'

# 預期輸出(如果有丟棄):
# [1245897.234567] perf: inference took too long ()
# [UFW BLOCK] IN=eth0 OUT= SRC=10.244.0.1 DST=10.244.0.15

# 解決方法:設置rp_filter為寬松模式
echo2 > /proc/sys/net/ipv4/conf/all/rp_filter

場景5:容器網(wǎng)絡流量異常

Docker、Kubernetes等容器平臺依賴iptables進行網(wǎng)絡隔離和流量路由。當容器無法訪問外網(wǎng)或容器間通信失敗時,iptables往往是罪魁禍首。

Docker的iptables集成問題:

# 查看Docker添加的iptables規(guī)則
iptables -L -n -v --line-numbers | grep -E'DOCKER|docker'

# 預期輸出:
# Chain DOCKER (1 references)
# pkts bytes target   prot opt in   out   source        destination
#  0   0 ACCEPT   all -- !docker0 docker0 0.0.0.0/0      172.17.0.0/16
# Chain DOCKER-ISOLATION (1 references)
#  0   0 DOCKER-ISOLATION all -- *   docker0 0.0.0.0/0      0.0.0.0/0

# 常見問題:手動添加的iptables規(guī)則與Docker規(guī)則沖突
# Docker默認會將其規(guī)則插入到filter表的頂端
# 如果手動規(guī)則需要插入到特定位置,需要使用-I參數(shù)或修改Docker配置

# 禁止Docker管理iptables(需要在/etc/docker/daemon.json中配置)
# {
#  "iptables": false
# }

Kubernetes的iptables代理模式問題:

# 查看kube-proxy添加的規(guī)則
iptables -L -n -v | grep -E'KUBE|KUBERNETES'

# 查看KUBE-SERVICES鏈
iptables -L KUBE-SERVICES -n -v --line-numbers | head -30

# 預期輸出:
# Chain KUBE-SERVICES (2 references)
# pkts bytes target   prot opt in   out   source        destination
#  0   0 KUBE-MARK-MASQ all -- *   *    0.0.0.0/0      0.0.0.0/0      /* default/kubernetes */ match-match tcp dpt:443 match-set KUBE-CLUSTER-IP dst,! src

# Pod間通信問題排查
# 確認cni0網(wǎng)橋的iptables規(guī)則是否存在
iptables -L FORWARD -n -v | grep -E'cni0|KUBE-'

# 預期輸出(正常狀態(tài)):
#  0   0 ACCEPT   all -- *   cni0  0.0.0.0/0      0.0.0.0/0      state RELATED,ESTABLISHED
#  0   0 ACCEPT   all -- cni0  *    0.0.0.0/0      0.0.0.0/0      state RELATED,ESTABLISHED
#  0   0 KUBE-FORWARD all -- *   *    0.0.0.0/0      0.0.0.0/0

3.4 排障命令實戰(zhàn)匯總

本節(jié)整理了日常運維中使用頻率最高的iptables排障命令,按功能分類說明。

查看規(guī)則列表是最基礎的排障操作:

# 基本列表(數(shù)字格式,不解析服務名)
iptables -L -n

# 帶計數(shù)器的詳細列表
iptables -L -n -v

# 帶行號的完整規(guī)則
iptables -L -n -v --line-numbers

# 僅查看filter表
iptables -t filter -L -n -v

# 查看特定鏈
iptables -L INPUT -n -v --line-numbers
iptables -L OUTPUT -n -v --line-numbers
iptables -L FORWARD -n -v --line-numbers

# 預期輸出示例:
# Chain INPUT (policy DROP 0 packets, 0 bytes)
# num  pkts bytes target   prot opt in   out   source        destination
# 1    0   0 ACCEPT   all -- lo   *    0.0.0.0/0      0.0.0.0/0
# 2    0   0 ACCEPT   all -- *   *    0.0.0.0/0      0.0.0.0/0      state RELATED,ESTABLISHED
# 3    0   0 ACCEPT   tcp -- *   *    10.0.0.0/24     0.0.0.0/0      tcp dpt:22

導出和導入規(guī)則用于備份和批量修改:

# 導出當前規(guī)則到文件
iptables-save > /tmp/iptables-backup.txt

# 從文件恢復規(guī)則
iptables-restore < /tmp/iptables-backup.txt

# 查看導出的規(guī)則文件
cat /tmp/iptables-backup.txt

# 預期輸出示例:
# # Generated by iptables-save
# *filter
# :INPUT DROP [0:0]
# :FORWARD DROP [0:0]
# :OUTPUT ACCEPT [0:0]
# -A INPUT -i lo -j ACCEPT
# -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# COMMIT
# # Completed

查看連接追蹤表用于診斷有狀態(tài)連接的異常:

# 查看所有追蹤連接
cat /proc/net/nf_conntrack | head -10

# 預期輸出示例(格式化后):
# ipv4   2 tcp   6 431999 ESTABLISHED src=10.244.0.15 dst=10.244.0.23 sport=443 dport=8080 src=10.244.0.23 dst=10.244.0.15 sport=8080 dport=443 [ASSURED] use=2

# 按協(xié)議過濾查看
cat /proc/net/nf_conntrack | grep tcp | head -10
cat /proc/net/nf_conntrack | grep udp | head -10

# 統(tǒng)計各狀態(tài)的連接數(shù)
cat /proc/net/nf_conntrack | awk'{print $4}'| sort | uniq -c

# 預期輸出示例:
# 1234 ESTABLISHED
# 56 TIME_WAIT
# 23 CLOSE_WAIT
# 5 LISTEN

# 實時監(jiān)控新建連接速率
watch -n1'cat /proc/net/nf_conntrack | wc -l'

# 使用conntrack-tools查看更詳細的信息
conntrack -L -p tcp --state ESTABLISHED | head -10

# 預期輸出:
# tcp   6 ESTABLISHED src=10.244.0.15 dst=10.244.0.23 sport=443 dport=8080 src=10.244.0.23 dst=10.244.0.15 sport=8080 dport=443 [ASSURED] mark=0 delta-time=3600 use=2

實時監(jiān)控規(guī)則匹配用于性能調優(yōu)和問題定位:

# 使用watch監(jiān)控計數(shù)器變化(找出活躍規(guī)則)
watch -n1'iptables -L INPUT -n -v --line-numbers | head -20'

# 在另一個終端執(zhí)行測試流量觸發(fā)規(guī)則匹配
# 同時觀察計數(shù)器是否增加

# 監(jiān)控DROP規(guī)則的命中情況
watch -n1'iptables -L INPUT -n -v | grep DROP'

# 如果DROP規(guī)則的pkts計數(shù)持續(xù)增加,說明有流量被誤攔截或確實在攔截攻擊

測試規(guī)則語法和效果:

# 語法檢查(不實際應用)
iptables-restore --test< /tmp/rules.txt

# 使用-C參數(shù)測試規(guī)則是否存在
iptables -C INPUT -p tcp --dport 80 -j ACCEPT

# 如果規(guī)則存在,命令返回0;如果不存在,返回非0
echo?$?
# 0表示規(guī)則已存在
# 1表示語法錯誤或不支持的參數(shù)
# 2表示規(guī)則不存在

# 使用-I參數(shù)臨時插入規(guī)則測試(重啟后失效)
iptables -I INPUT 1 -p tcp --dport 8888 -j ACCEPT

# 使用-D參數(shù)刪除規(guī)則
iptables -D INPUT -p tcp --dport 8888 -j ACCEPT

3.5 事故復盤模板與改進措施

每一起iptables配置事故都應該成為團隊經(jīng)驗積累的素材。以下是推薦的事故復盤模板。

事故復盤文檔結構:

一、事故概述
 1. 事故時間線
 2. 影響范圍和損失評估
 3. 應急響應過程

二、根因分析
 1. 直接原因:具體是哪條規(guī)則導致的
 2. 根本原因:為什么這條規(guī)則會被錯誤添加
 3. 深層原因:流程和機制層面的問題

三、整改措施
 1. 短期措施(立即生效,防止同類問題)
 2. 中期措施(流程改進,提升可靠性)
 3. 長期措施(架構優(yōu)化,根除問題)

四、行動項跟蹤
 1. 具體Action項
 2. 責任人
 3. 完成時間

五、經(jīng)驗教訓
 1. 技術層面學到的經(jīng)驗
 2. 流程層面需要改進的地方
 3. 團隊能力提升方向

針對本案例的整改措施示例:

短期措施(1周內(nèi)完成):建立iptables變更前的強制備份機制,所有規(guī)則變更必須先執(zhí)行iptables-save備份;添加ILO/DRAC/VNC等備用訪問通道的可用性檢查到日常巡檢清單;修改Ansible Playbook,在應用iptables規(guī)則前自動檢測是否存在SSH訪問風險。

中期措施(1個月內(nèi)完成):引入規(guī)則變更的同行評審機制(Peer Review),雙人確認后才能執(zhí)行生產(chǎn)變更;部署基于ipset的黑名單管理系統(tǒng),替代直接在iptables中維護大量IP規(guī)則;建立規(guī)則變更的灰度發(fā)布機制,先在非核心服務器上應用規(guī)則,觀察無異常后再批量發(fā)布。

長期措施(3個月內(nèi)完成):評估并實施向nftables的遷移計劃,利用nftables的原子性規(guī)則更新避免增量變更的風險;將iptables規(guī)則納入Git版本控制,實現(xiàn)規(guī)則的聲明式管理和變更追蹤;搭建防火墻規(guī)則自動化測試平臺,在規(guī)則發(fā)布前通過模擬流量驗證規(guī)則正確性。

第四章 生產(chǎn)環(huán)境最佳實踐

4.1 規(guī)則設計原則

生產(chǎn)環(huán)境的iptables規(guī)則設計應該遵循以下核心原則,這些原則是無數(shù)故障案例總結出的血淚教訓。

最小權限原則是信息安全的基本法則,在防火墻規(guī)則設計中體現(xiàn)為"默認拒絕、顯式放行"。所有未明確允許的流量都應該被拒絕,而不是依賴默認策略的意外行為。具體實現(xiàn)方式是:首先將內(nèi)置鏈的默認策略設置為DROP,然后為每一種需要允許的流量添加明確的ACCEPT規(guī)則。這種設計的好處是規(guī)則變更的影響范圍可預測:如果某條ACCEPT規(guī)則被刪除,相關服務會立即中斷(可被發(fā)現(xiàn)),而如果某條DROP規(guī)則被刪除,至少不會造成未預期的放行。

以下是一個遵循最小權限原則的filter表配置示例:

# 重置所有規(guī)則到初始狀態(tài)
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

# 設置嚴格的默認策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 第一條規(guī)則:放行本地回環(huán)流量(必須)
iptables -A INPUT -i lo -j ACCEPT

# 第二條規(guī)則:放行已建立連接(必須)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 第三條規(guī)則:按需放行具體服務
# SSH僅允許從管理網(wǎng)段訪問
iptables -A INPUT -p tcp -s 10.0.0.0/24 --dport 22 -m state --state NEW -j ACCEPT

# HTTP/HTTPS服務允許公網(wǎng)訪問
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 僅允許特定后端網(wǎng)段訪問API
iptables -A INPUT -p tcp -s 10.244.0.0/16 --dport 8080 -j ACCEPT

# 記錄未被匹配的流量(用于排障)
iptables -A INPUT -mlimit--limit5/min -j LOG --log-prefix"iptables-INPUT-no-match: "

# 最終拒絕所有未匹配的流量(顯式DRO)
iptables -A INPUT -j DROP

分層防御原則要求在多個層面設置訪問控制,而不是依賴單一防火墻層。典型的分層部署包括:云平臺安全組作為第一道防線(邊界控制)、主機iptables作為第二道防線(精細控制)、應用層防火墻(如nginx的allow/deny)作為第三道防線(深度防護)。這種設計的容錯性在于:即使某一層的配置出現(xiàn)錯誤,其他層仍可能提供基本保護。

可審計性原則要求所有規(guī)則變更都必須有記錄可查。規(guī)則變更應該通過配置管理工具(如Ansible、Puppet)而非手動命令行執(zhí)行,變更記錄自動寫入變更管理系統(tǒng);規(guī)則配置應該納入版本控制,變更前后的差異應該能夠被清晰地對比;定期審計實際運行的規(guī)則與版本控制系統(tǒng)中的配置是否一致。

易于理解原則要求規(guī)則設計應該清晰、可預測、易于維護。具體做法包括:為每條規(guī)則添加注釋說明其目的;在規(guī)則文件中使用結構化的分組和空白行分隔不同功能的規(guī)則集;避免過于復雜的單條規(guī)則,將復雜邏輯分解為多條規(guī)則或自定義鏈;保持規(guī)則的有序性,按照邏輯順序(如先放行本地、再放行特定服務、最后攔截)組織規(guī)則。

4.2 自動化運維實踐

手動管理iptables規(guī)則在規(guī)?;瘓鼍跋率遣豢山邮艿摹1竟?jié)介紹如何將iptables規(guī)則納入自動化管理體系。

Ansible管理iptables規(guī)則是當前最流行的方案之一。Ansible提供了iptables模塊,可以編寫聲明式的Playbook來管理規(guī)則:

# ansible-playbook示例:部署Web服務器防火墻規(guī)則
# 文件:roles/iptables/tasks/main.yml

---
-name:Backupexistingiptablesrules
command:iptables-save>/root/iptables-backup-{{ansible_date_time.iso8601}}.save
changed_when:false

-name:Ensureiptablesserviceisinstalled
package:
 name:iptables
 state:present

-name:Setdefaultpolicies
iptables:
 chain:"{{ item.chain }}"
 policy:"{{ item.policy }}"
loop:
 -{chain:'INPUT',policy:'DROP'}
 -{chain:'FORWARD',policy:'DROP'}
 -{chain:'OUTPUT',policy:'ACCEPT'}

-name:Allowloopbackinterface
iptables:
 chain:'INPUT'
 in_interface:'lo'
 action:'accept'

-name:Allowestablishedandrelatedconnections
iptables:
 chain:'INPUT'
 ctstate:'ESTABLISHED,RELATED'
 action:'accept'

-name:AllowSSHfrommanagementnetwork
iptables:
 chain:'INPUT'
 protocol:'tcp'
 destination_port:'22'
 source:'10.0.0.0/24'
 ctstate:'NEW'
 action:'accept'

-name:AllowHTTPandHTTPS
iptables:
 chain:'INPUT'
 protocol:'tcp'
 destination_port:'{{ item }}'
 action:'accept'
loop:
 -'80'
 -'443'

-name:Enableiptablesservice
systemd:
 name:iptables
 state:started
 enabled:yes

執(zhí)行Playbook:

# 語法檢查
ansible-playbook --syntax-check site.yml

# 預覽變更(dry-run)
ansible-playbook site.yml --check --diff

# 執(zhí)行部署
ansible-playbook site.yml

# 預期輸出:
# PLAY [Web Servers] ************************************************************
# TASK [Gathering Facts] *********************************************************
# ok: [web-server-01]
# ok: [web-server-02]
# TASK [Backup existing iptables rules] ****************************************
# changed: [web-server-01]
# changed: [web-server-02]
# ...
# PLAY RECAP ********************************************************************
# web-server-01       : ok=15  changed=2  unreachable=0  failed=0
# web-server-02       : ok=15  changed=2  unreachable=0  failed=0

Git管理規(guī)則配置可以實現(xiàn)規(guī)則變更的完整審計和快速回滾。推薦的目錄結構如下:

iptables-config/
├── group_vars/
│  └── web_servers.yml     # 變量定義(端口、網(wǎng)段等)
├── roles/
│  └── iptables/
│    ├── templates/
│    │  └── iptables.rules.j2 # 規(guī)則模板
│    └── tasks/
│      └── main.yml
├── inventory
│  └── hosts
├── site.yml           # 主Playbook
└── README.md

規(guī)則模板示例(iptables.rules.j2):

# Firewall rules for {{ inventory_hostname }}
# Generated by Ansible on {{ ansible_date_time.iso8601 }}
# DO NOT EDIT MANUALLY

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

# Loopback
-A INPUT -i lo -j ACCEPT

# Established connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH access from management network
{%ifansible_hostingroups['db_servers'] %}
-A INPUT -p tcp -s 10.0.0.0/24 --dport 22 -m state --state NEW -j ACCEPT
{%else%}
-A INPUT -p tcp -s 10.0.0.0/24 --dport 22 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -s {{ mgmt_vip }} --dport 22 -m state --state NEW -j ACCEPT
{% endif %}

# Web services
{%forportinweb_ports %}
-A INPUT -p tcp --dport {{ port }} -j ACCEPT
{% endfor %}

# Backend API access
{%if'web_servers'ingroup_names %}
-A INPUT -p tcp -s {{ backend_network }} --dport 8080 -j ACCEPT
{% endif %}

# Logging
-A INPUT -mlimit--limit5/min -j LOG --log-prefix"iptables-dropped: "

# Final DROP
-A INPUT -j DROP

COMMIT

變更流程:dev -> staging -> production是避免生產(chǎn)事故的關鍵機制。所有iptables規(guī)則變更應該遵循以下流程:

開發(fā)環(huán)境(dev):
 - 在本地VM或開發(fā)服務器上編寫和測試規(guī)則
 - 使用Vagrant等工具模擬多服務器場景
 - 單元測試:驗證規(guī)則語法正確性

預發(fā)布環(huán)境(staging):
 - 使用與生產(chǎn)環(huán)境相同的拓撲結構
 - 加載生產(chǎn)數(shù)據(jù)的一部分進行端到端測試
 - 執(zhí)行完整的集成測試(負載均衡、健康檢查、監(jiān)控告警)
 - 使用流量復制工具(如TCPCopy)進行真實流量測試

生產(chǎn)環(huán)境(production):
 - 獲得變更審批(如果是SRE流程則需要On-Call批準)
 - 確認備份和回滾方案就緒
 - 在業(yè)務低峰期執(zhí)行變更
 - 執(zhí)行后的健康檢查和功能驗證
 - 持續(xù)監(jiān)控15-30分鐘確認無異常

回滾機制是變更安全的最后保障。建議的回滾機制包括:變更前自動備份規(guī)則到多個位置(本地磁盤、NFS存儲、甚至對象存儲);記錄變更前后的規(guī)則md5sum,用于快速對比;使用帶有超時限制的自動回滾腳本,如果變更后一定時間內(nèi)未確認成功則自動回滾;提供手動回滾的快捷命令,降低緊急情況下的操作復雜度。

自動回滾腳本示例:

#!/bin/bash
# 文件:/usr/local/bin/iptables-rollback.sh
# 功能:自動回滾到上次備份的iptables規(guī)則

BACKUP_DIR="/root/iptables-backups"
TIMEOUT=300 # 變更后確認超時時間(秒)
ALERT_EMAIL="ops-team@example.com"

# 獲取最新的備份文件
LATEST_BACKUP=$(ls -t${BACKUP_DIR}/iptables-*.save 2>/dev/null | head -1)

if[ -z"$LATEST_BACKUP"];then
 echo"ERROR: No backup found in${BACKUP_DIR}"
 exit1
fi

echo"INFO: Rolling back to${LATEST_BACKUP}"

# 執(zhí)行回滾
iptables-restore 

4.3 監(jiān)控與告警體系

完善的監(jiān)控和告警體系可以及早發(fā)現(xiàn)問題,避免故障影響擴大。

防火墻規(guī)則變更監(jiān)控可以通過以下方式實現(xiàn):

# 方法1:監(jiān)控/etc/sysconfig/iptables文件的md5sum變化
# 在crontab中配置
# */5 * * * * /usr/local/bin/check-iptables-checksum.sh

#!/bin/bash
# 文件:/usr/local/bin/check-iptables-checksum.sh
CHECKSUM_FILE="/var/lib/iptables/checksum"
CURRENT_CHECKSUM=$(md5sum /etc/sysconfig/iptables | awk'{print $1}')

if[ -f${CHECKSUM_FILE}];then
  OLD_CHECKSUM=$(cat${CHECKSUM_FILE})
 if["$CURRENT_CHECKSUM"!="$OLD_CHECKSUM"];then
   echo"WARNING: iptables configuration changed"| tee /var/log/iptables-monitor.log
   # 發(fā)送告警
    /usr/local/bin/send-alert.sh"iptables規(guī)則發(fā)生變更"
 fi
fi

mkdir -p $(dirname${CHECKSUM_FILE})
echo${CURRENT_CHECKSUM}>${CHECKSUM_FILE}

異常流量告警基于規(guī)則計數(shù)器的突變:

#!/bin/bash
# 文件:/usr/local/bin/check-iptables-drops.sh
# 功能:監(jiān)控DROP規(guī)則的匹配增長,發(fā)現(xiàn)異常

DROP_THRESHOLD=1000 # 5分鐘內(nèi)DROP包超過此閾值則告警
LOG_FILE="/var/log/iptables-drop-monitor.log"

# 提取INPUT鏈DROP規(guī)則的包計數(shù)
DROP_PKTS=$(iptables -L INPUT -n -v | grep -E'^s+[0-9]+s+[0-9]+s+DROP'| awk'{sum+=$1} END {print sum}')

if[ -n"$DROP_PKTS"] && ["$DROP_PKTS"-gt"$DROP_THRESHOLD"];then
  TIMESTAMP=$(date'+%Y-%m-%d %H:%M:%S')
 echo"${TIMESTAMP}: WARNING: INPUT DROP packets exceed threshold:${DROP_PKTS}">>${LOG_FILE}

 # 記錄被DROP的流量詳情
  iptables -L INPUT -n -v | grep DROP >>${LOG_FILE}

 # 發(fā)送告警
  /usr/local/bin/send-alert.sh"防火墻DROP包數(shù)量異常:${DROP_PKTS}"
fi

連接追蹤表滿的預警至關重要,因為conntrack表溢出會導致NAT故障:

#!/bin/bash
# 文件:/usr/local/bin/check-conntrack.sh
# 功能:監(jiān)控連接追蹤表使用率

MAX_CONNECTIONS=$(cat /proc/sys/net/netfilter/nf_conntrack_max)
CURRENT_CONNECTIONS=$(cat /proc/net/nf_conntrack | wc -l)
USAGE_PERCENT=$((CURRENT_CONNECTIONS * 100 / MAX_CONNECTIONS))

WARN_THRESHOLD=80
CRITICAL_THRESHOLD=90

LOG_FILE="/var/log/conntrack-monitor.log"
TIMESTAMP=$(date'+%Y-%m-%d %H:%M:%S')

if[${USAGE_PERCENT}-ge${CRITICAL_THRESHOLD}];then
 echo"${TIMESTAMP}: CRITICAL: Conntrack table${USAGE_PERCENT}% full (${CURRENT_CONNECTIONS}/${MAX_CONNECTIONS})">>${LOG_FILE}
  /usr/local/bin/send-alert.sh"連接追蹤表即將滿:${USAGE_PERCENT}%"
elif[${USAGE_PERCENT}-ge${WARN_THRESHOLD}];then
 echo"${TIMESTAMP}: WARNING: Conntrack table${USAGE_PERCENT}% full (${CURRENT_CONNECTIONS}/${MAX_CONNECTIONS})">>${LOG_FILE}
fi

# 查看conntrack表占用最多的協(xié)議
echo"Top protocols by connection count:">>${LOG_FILE}
cat /proc/net/nf_conntrack | awk'{print $4}'| sort | uniq -c | sort -rn | head -5 >>${LOG_FILE}

將上述監(jiān)控腳本加入crontab:

# /etc/cron.d/iptables-monitoring
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# 每5分鐘檢查iptables規(guī)則變更
*/5 * * * * root /usr/local/bin/check-iptables-checksum.sh

# 每5分鐘檢查DROP包異常
*/5 * * * * root /usr/local/bin/check-iptables-drops.sh

# 每5分鐘檢查conntrack表使用率
*/5 * * * * root /usr/local/bin/check-conntrack.sh

4.4 nftables遷移指南(2026年建議)

截至2026年,nftables已經(jīng)足夠成熟,可以作為生產(chǎn)環(huán)境的選擇。以下是何時考慮遷移以及如何遷移的指南。

nftables相比iptables的優(yōu)勢體現(xiàn)在多個方面。性能方面,nftables使用更高效的數(shù)據(jù)結構(Red-Black Tree替代線性列表),規(guī)則查找復雜度從O(n)降低到O(log n);原子性方面,nftables支持事務性規(guī)則更新,避免了iptables增量更新時的競爭條件;一致性方面,nftables提供統(tǒng)一的表和鏈結構,不同協(xié)議的語法更一致;功能性方面,nftables原生支持集合(sets)、字典(maps)、拒絕追蹤(notrack)等高級特性。

遷移時機判斷建議滿足以下條件之一:運行較新的Linux發(fā)行版(Ubuntu 22.04+、Debian 12+、RHEL 9+);內(nèi)核版本5.6或更高;現(xiàn)有的iptables規(guī)則復雜度已經(jīng)難以維護;需要更精細的流量控制能力;現(xiàn)有系統(tǒng)面臨性能瓶頸需要優(yōu)化。

iptables到nftables的遷移路徑有兩種策略。策略一是使用兼容層,nftables提供了iptables-nftables-translate工具可以將iptables規(guī)則自動轉換為nftables規(guī)則:

# 查看iptables規(guī)則并轉換為nftables語法
iptables-save | iptables-nftables-translate > /tmp/nft-rules-save

# 或者直接使用translate命令轉換單條規(guī)則
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 轉換為:
# nft add rule ip filter INPUT tcp dport 22 accept

# 測試翻譯后的規(guī)則(dry-run)
nft -f /tmp/nft-rules-save -c

# 應用翻譯后的規(guī)則
nft -f /tmp/nft-rules-save

策略二是手動重寫規(guī)則,利用nftables的高級特性重新設計規(guī)則集。這種方式工作量大但能充分利用nftables的優(yōu)勢。

nftables基礎配置示例:

# 查看nftables版本
nft --version

# 預期輸出:
# nftables v1.0.9

# 查看當前規(guī)則
nft list ruleset

# 預期輸出(空規(guī)則集時):
# (empty)

# 基礎配置示例
# 創(chuàng)建filter表
nft add table ip filter

# 創(chuàng)建鏈
nft add chain ip filter INPUT {typefilter hook input priority 0 ; policy drop ; }
nft add chain ip filter FORWARD {typefilter hook forward priority 0 ; policy drop ; }
nft add chain ip filter OUTPUT {typefilter hook output priority 0 ; policy accept ; }

# 添加規(guī)則
# 放行本地回環(huán)
nft add rule ip filter INPUT iif lo accept

# 放行已建立連接
nft add rule ip filter INPUT ct state established,related accept

# 放行SSH
nft add rule ip filter INPUT ip saddr 10.0.0.0/24 tcp dport 22 ct state new accept

# 放行Web服務
nft add rule ip filter INPUT tcp dport { 80, 443 } accept

# 保存規(guī)則到文件
nft list ruleset > /etc/nftables.conf

# 啟用nftables服務
systemctlenablenftables
systemctl start nftables

# 查看完整的規(guī)則集
nft list ruleset

# 預期輸出:
# table ip filter {
#   chain INPUT {
#     type filter hook input priority 0; policy drop;
#     iif lo accept
#     ct state established,related accept
#     ip saddr 10.0.0.0/24 tcp dport 22 ct state new accept
#     tcp dport { 80, 443 } accept
#   }
#   chain FORWARD {
#     type filter hook forward priority 0; policy drop;
#   }
#   chain OUTPUT {
#     type filter hook output priority 0; policy accept;
#   }
# }

兼容層的問題與局限需要注意。iptables-nftables-translate轉換工具雖然能處理大多數(shù)常見規(guī)則,但并非所有iptables擴展都有等價實現(xiàn);部分邊界情況可能無法正確轉換;轉換后的規(guī)則性能可能不如手工優(yōu)化的nftables規(guī)則。因此,對規(guī)則轉換結果進行充分測試是必要的。

第五章 擴展閱讀與證據(jù)鏈

5.1 官方文檔與權威資料

以下是本文涉及技術的官方文檔鏈接,建議讀者深入閱讀以獲得更完整的理解。

Netfilter/iptables官方文檔:訪問https://www.netfilter.org/projects/iptables/index.html可以獲得iptables的最新文檔、下載鏈接和項目狀態(tài)。該網(wǎng)站提供了iptables(8)手冊頁的完整內(nèi)容,包括所有命令選項的詳細說明。

nftables官方文檔:https://www.netfilter.org/projects/nftables/index.html 提供了nftables的完整參考手冊,包括nft(8)、nft(8)鏈和表的配置語法、以及各種匹配擴展的用法。

Red Hat firewalld文檔:對于使用RHEL/CentOS系統(tǒng)的讀者,Red Hat官方文檔提供了firewalld的詳細說明,包括從iptables遷移的指南。地址為https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/securing_networks/index。

Linux內(nèi)核網(wǎng)絡文檔:https://www.kernel.org/doc/Documentation/networking/nf_conntrack-sysctl.txt 提供了連接追蹤子系統(tǒng)的詳細說明,包括所有sysctl參數(shù)的含義。

Arch Wiki iptables頁面:https://wiki.archlinux.org/title/iptables 被廣泛認為是社區(qū)維護的最詳盡的iptables教程,包含了大量實戰(zhàn)經(jīng)驗和故障排除案例。

5.2 關鍵配置文件參考

/etc/sysconfig/iptables是CentOS/RHEL系統(tǒng)的默認規(guī)則保存位置:

# /etc/sysconfig/iptables
# Generated by iptables-save
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -j LOG --log-prefix"IPTables-Input-Drop: "
-A INPUT -j DROP
COMMIT

/etc/nftables.conf是nftables的默認配置位置(Ubuntu/Debian):

# /etc/nftables.conf
#!/usr/sbin/nft -f

# 清除所有現(xiàn)有規(guī)則
flush ruleset

table inet filter {
  chain INPUT {
   typefilter hook input priority 0; policy drop;

   # 放行本地回環(huán)
    iif lo accept

   # 放行已建立連接
    ct state established,related accept

   # 放行ICMP
    ip protocol icmp accept

   # SSH(限管理網(wǎng)段)
    ip saddr 10.0.0.0/24 tcp dport 22 accept

   # HTTP/HTTPS
    tcp dport { 80, 443 } accept

   # 記錄被拒流量
   logprefix"nftables-dropped: "counter
  }

  chain FORWARD {
   typefilter hook forward priority 0; policy drop;
  }

  chain OUTPUT {
   typefilter hook output priority 0; policy accept;
  }
}

5.3 Docker iptables集成說明

Docker默認會管理宿主機的iptables規(guī)則,這一行為可以通過配置修改:

# /etc/docker/daemon.json
{
 "iptables":true,
 "ip-forward":true,
 "ip-masq":true,
 "ipv6":false,
 "bridge":"docker0"
}

# 查看Docker插入的規(guī)則
iptables -L -n -v | grep DOCKER

# 預期輸出:
# Chain DOCKER (1 references)
# pkts bytes target   prot opt in   out   source        destination
#  0   0 ACCEPT   all -- !docker0 docker0 0.0.0.0/0      172.17.0.0/16

如果需要阻止Docker修改iptables,將"iptables": false添加到daemon.json,但需要手動管理Docker網(wǎng)絡所需的NAT規(guī)則。

5.4 Kubernetes iptables架構

Kubernetes使用iptables作為kube-proxy的默認模式,理解其生成的規(guī)則對故障排查非常重要:

# 查看KUBE-SERVICES鏈中的服務定義
iptables -L KUBE-SERVICES -n -v --line-numbers | head -30

# 查看KUBE-NODEPORTS鏈(NodePort服務)
iptables -L KUBE-NODEPORTS -n -v --line-numbers

# 查看KUBE-EXTERNAL-SERVICES(外部訪問策略)
iptables -L KUBE-EXTERNAL-SERVICES -n -v --line-numbers

# 查看KUBE-FORWARD鏈(轉發(fā)規(guī)則)
iptables -L KUBE-FORWARD -n -v --line-numbers

# 預期輸出(KUBE-FORWARD):
# Chain KUBE-FORWARD (1 references)
# pkts bytes target   prot opt in   out   source        destination
#  0   0 ACCEPT   all -- *   *    0.0.0.0/0      0.0.0.0/0      ctstate RELATED,ESTABLISHED
#  0   0 ACCEPT   all -- *   *    0.0.0.0/0      0.0.0.0/0      fragments
#  0   0 DROP    all -- *   *    0.0.0.0/0      0.0.0.0/0      ctstate INVALID
#  0   0 ACCEPT   all -- cni0  *    0.0.0.0/0      0.0.0.0/0      /* rule to explicitly ACCEPT all traffic that complies with network policy */
#  0   0 ACCEPT   all -- *   cni0  0.0.0.0/0      0.0.0.0/0      /* rule to explicitly ACCEPT all traffic that complies with network policy */

第六章 自檢清單

本清單用于在每次iptables規(guī)則變更前進行自我檢查,確保沒有遺漏關鍵步驟。

變更前檢查項:

[ ] 已閱讀現(xiàn)有iptables規(guī)則,理解其結構和邏輯
[ ] 已收集變更所需的信息(端口、協(xié)議、源地址等)
[ ] 已執(zhí)行規(guī)則備份:iptables-save
[ ] 已確認備用訪問通道(VNC/ILO/Console)可用
[ ] 已確認變更在業(yè)務低峰期執(zhí)行
[ ] 已制定回滾方案并確認回滾步驟
[ ] 變更方案已經(jīng)過同行評審(如適用)
[ ] 已通知相關方(業(yè)務方、監(jiān)控團隊)變更計劃

規(guī)則編寫檢查項:

[ ] 默認策略已設置為DROP(filter表的INPUT和FORWARD鏈)
[ ] 本地回環(huán)接口(lo)的流量已放行
[ ] ESTABLISHED和RELATED狀態(tài)的連接已放行
[ ] 規(guī)則順序正確:先放行、后攔截
[ ] 規(guī)則使用了具體的源地址而非0.0.0.0/0(除非必要)
[ ] 端口號和協(xié)議類型已核實
[ ] 包含必要的注釋說明規(guī)則用途
[ ] 使用了iptables-restore --test驗證語法

變更后檢查項:

[ ] 從另一臺機器驗證SSH連接正常
[ ] 驗證所有需要暴露的服務端口可達
[ ] 檢查iptables -L -n -v的計數(shù)器是否有異常變化
[ ] 確認監(jiān)控告警正常觸發(fā)
[ ] 持續(xù)觀察至少15分鐘確認無異常
[ ] 將變更結果通知相關方
[ ] 更新文檔記錄本次變更

回滾檢查項(如發(fā)現(xiàn)異常):

[ ] 確認回滾命令正確
[ ] 執(zhí)行回滾后驗證服務恢復
[ ] 記錄故障現(xiàn)象和回滾操作詳情
[ ] 安排故障復盤

附錄A:常用iptables命令速查

# 查看規(guī)則
iptables -L -n -v --line-numbers     # 完整規(guī)則(帶計數(shù))
iptables -t nat -L -n -v         # NAT表規(guī)則
iptables-save               # 導出所有規(guī)則

# 基礎操作
iptables -A CHAIN rule -j TARGET     # 追加規(guī)則
iptables -I CHAIN [num] rule -j TARGET  # 插入規(guī)則
iptables -D CHAIN [num]          # 刪除規(guī)則
iptables -F CHAIN             # 清空鏈
iptables -P CHAIN TARGET         # 設置默認策略

# 備份與恢復
iptables-save > /path/to/backup.rules   # 備份
iptables-restore < /path/to/backup.rules ? ?# 恢復
iptables-restore --test?< /path/to/rules ??# 語法檢查

# 連接追蹤
cat /proc/net/nf_conntrack ? ? ? ? ? ? ? ??# 查看連接追蹤表
conntrack -L ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??# 使用conntrack工具
conntrack -L -p tcp --state ESTABLISHED ? ?# 查看已建立連接

# 監(jiān)控
watch -n1?'iptables -L -n -v | head -20'? ?# 實時監(jiān)控規(guī)則變化
cat /proc/net/nf_conntrack | wc -l ? ? ? ??# 統(tǒng)計連接數(shù)

附錄B:常見錯誤與解決方案對照表

錯誤現(xiàn)象 可能原因 解決方案
SSH連接斷開 SSH規(guī)則順序錯誤或默認策略DROP 通過VNC/Console登錄,使用iptables -I INPUT -p tcp --dport 22 -j ACCEPT恢復
服務端口無法訪問 規(guī)則未放行該端口 添加iptables -A INPUT -p tcp --dport PORT -j ACCEPT
只能訪問IP不能訪問域名 DNS端口(53)未放行 添加UDP 53端口放行規(guī)則
負載均衡健康檢查失敗 健康檢查IP段未放行 檢查負載均衡器IP段,添加白名單規(guī)則
外部無法訪問服務 OUTPUT鏈默認DROP且未放行 將OUTPUT默認策略改為ACCEPT或添加相關放行規(guī)則
連接追蹤導致性能下降 連接追蹤表滿 調大nf_conntrack_max或禁用不需要的連接追蹤
容器無法訪問外網(wǎng) Docker iptables規(guī)則與手動規(guī)則沖突 檢查DOCKER鏈規(guī)則,使用--dport匹配時注意位置
FTP傳輸失敗 RELATED狀態(tài)未放行 確保ctstate RELATED,ESTABLISHED的規(guī)則存在

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    88

    文章

    11821

    瀏覽量

    219598
  • 服務器
    +關注

    關注

    14

    文章

    10371

    瀏覽量

    91768
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1434

    瀏覽量

    83782

原文標題:一條寫錯的iptables規(guī)則,讓我差點提桶跑路

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Linux系統(tǒng)iptables和firewall防火墻的配置方法

    防火墻就是根據(jù)系統(tǒng)管理員設定的規(guī)則來控制數(shù)據(jù)包的進出,主要是保護內(nèi)網(wǎng)的安全,目前 Linux 系統(tǒng)的防火墻類型主要有兩種:分別是 [iptables] 和 firewalld
    發(fā)表于 07-17 10:34 ?2060次閱讀
    Linux系統(tǒng)<b class='flag-5'>iptables</b>和firewall防火墻的<b class='flag-5'>配置</b>方法

    nuc972如何啟動iptables?

    我已經(jīng)移植好iptables在開發(fā)板,可以設置iptables規(guī)則,但是如何啟動,因為新塘的不支持service iptables start的service指令,請問還需要移植哪些
    發(fā)表于 01-17 07:10

    iptables 工具常用命令規(guī)則有哪些

    iptables 是 Linux 上用于配置 IPv4 數(shù)據(jù)包過濾和 NAT 規(guī)則的工具。它可以讓您控制數(shù)據(jù)包如何在您的 Linux 服務器上進行轉發(fā)、過濾和修改。下面是一些基本的 iptab
    發(fā)表于 06-12 15:42

    Linux的iptables配置文件

    1.使用vi或者vim打開iptables配置文件;vi /etc/sysconfig/iptables2.在編輯頁面新增加信任端口;
    發(fā)表于 07-16 07:39

    請問如何自動加載iptables的防火墻規(guī)則

    系統(tǒng)啟動后,如何自動加載iptables的防火墻規(guī)則?
    發(fā)表于 01-07 08:46

    nuc972如何啟動iptables?

    我已經(jīng)移植好iptables在開發(fā)板,可以設置iptables規(guī)則,但是如何啟動,因為新塘的不支持service iptables start的service指令,請問還需要移植哪些
    發(fā)表于 06-25 08:38

    nuc972如何啟動iptables?

    我已經(jīng)移植好iptables在開發(fā)板,可以設置iptables規(guī)則,但是如何啟動,因為新塘的不支持service iptables start的service指令,請問還需要移植哪些
    發(fā)表于 09-05 08:17

    linux下IPTABLES配置詳解

    當超出了IPTABLES里filter表里的兩個鏈規(guī)則(INPUT,F(xiàn)ORWARD)時,不在這兩個規(guī)則里的數(shù)據(jù)包怎么處理呢,那就是DROP(放棄)。應該說這樣配置是很安全的。我們要控制
    發(fā)表于 05-16 16:19 ?1303次閱讀

    Iptables的移植步驟

    Linux下支持netfilter機制的配置工具就是iptables,它也就相當與一個應用程序,可以對netfilter進行配置(包過濾規(guī)則,NAT等等)。所以要實現(xiàn)netfilter
    發(fā)表于 08-18 09:01 ?2930次閱讀

    Iptables移植到嵌入式Linux系統(tǒng)

    Linux下支持netfilter機制的配置工具就是iptables,它也就相當與一個應用程序,可以對netfilter進行配置(包過濾規(guī)則,NAT等等)。所以要實現(xiàn)netfilter
    發(fā)表于 11-02 14:51 ?1次下載
    <b class='flag-5'>Iptables</b>移植到嵌入式Linux系統(tǒng)

    arduino開發(fā)實戰(zhàn)指南

    arduino開發(fā)實戰(zhàn)指南
    發(fā)表于 02-22 14:56 ?0次下載

    Linux防火墻配置(iptables和firewalld)

    防火墻就是根據(jù)系統(tǒng)管理員設定的規(guī)則來控制數(shù)據(jù)包的進出,主要是保護內(nèi)網(wǎng)的安全,目前 Linux 系統(tǒng)的防火墻類型主要有兩種:分別是 [iptables] 和 firewalld
    的頭像 發(fā)表于 03-31 10:09 ?2161次閱讀

    Linux系統(tǒng)iptables防火墻配置案例

    1、防火墻是一層層過濾的,就是按照配置規(guī)則的順序從上到下,從前到后進行過濾的。 2、如果匹配上了相應的規(guī)則,即明確表明是阻止還是通過,此時數(shù)據(jù)包就不再向下匹配新的規(guī)則了。
    發(fā)表于 10-07 11:35 ?3499次閱讀
    Linux系統(tǒng)<b class='flag-5'>iptables</b>防火墻<b class='flag-5'>配置</b>案例

    Linux系統(tǒng)中iptables防火墻配置詳解

    iptables是Linux內(nèi)核中用于配置防火墻規(guī)則的工具。它基于Netfilter框架,可以對通過網(wǎng)絡接口的數(shù)據(jù)包進行過濾、修改等操作。通過設置一系列規(guī)則,
    的頭像 發(fā)表于 06-18 15:25 ?1275次閱讀

    iptables防火墻的核心架構與性能優(yōu)化指南

    本文將從實際生產(chǎn)環(huán)境出發(fā),通過真實案例剖析企業(yè)級iptables規(guī)則的設計思路和優(yōu)化技巧。無論你是剛接觸Linux運維的新手,還是有一定經(jīng)驗但想深入學習的工程師,這篇文章都會讓你收獲滿滿。
    的頭像 發(fā)表于 09-08 09:37 ?737次閱讀
    临武县| 太谷县| 海盐县| 望都县| 霍林郭勒市| 齐齐哈尔市| 汽车| 普宁市| 红安县| 综艺| 昭平县| 上蔡县| 溧水县| 铁岭县| 天祝| 东明县| 虎林市| 西充县| 宜兰市| 武穴市| 荣昌县| 巩义市| 阿克| 定陶县| 克拉玛依市| 临泽县| 德令哈市| 井研县| 红桥区| 宿松县| 普格县| 石嘴山市| 灵璧县| 三台县| 沐川县| 鸡西市| 桃源县| 镇雄县| 黎平县| 通江县| 牙克石市|