自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

90%人沒理清的 iptables 核心:七表五鏈實(shí)戰(zhàn)指北

云計(jì)算 云原生
在 Kubernetes 集群中,當(dāng)某個(gè)節(jié)點(diǎn)突然無法轉(zhuǎn)發(fā)流量時(shí),你可能會(huì)在日志中看到?iptables rules conflict?的報(bào)錯(cuò)——這背后隱藏的是 Linux 網(wǎng)絡(luò)層最核心的流量控制機(jī)制:iptables。作為 Linux 內(nèi)核級(jí)防火墻工具,iptables 通過?七張表(Tables)?和?五條鏈(Chains)?的組合,實(shí)現(xiàn)了從網(wǎng)絡(luò)層到應(yīng)用層的精細(xì)化流量控制。

引言

今天就圍繞這個(gè)問題,來探討下,這個(gè)問題能完全回答上來的沒有幾個(gè)。工作中用到的不多,但是這是每一個(gè) Linux 工程師都需要知道的底層知識(shí)。

開始

在 Kubernetes 集群中,當(dāng)某個(gè)節(jié)點(diǎn)突然無法轉(zhuǎn)發(fā)流量時(shí),你可能會(huì)在日志中看到 iptables rules conflict 的報(bào)錯(cuò)——這背后隱藏的是 Linux 網(wǎng)絡(luò)層最核心的流量控制機(jī)制:iptables。作為 Linux 內(nèi)核級(jí)防火墻工具,iptables 通過 七張表(Tables) 和 五條鏈(Chains) 的組合,實(shí)現(xiàn)了從網(wǎng)絡(luò)層到應(yīng)用層的精細(xì)化流量控制。本文將從底層原理、核心架構(gòu)、實(shí)戰(zhàn)命令三個(gè)維度,拆解 iptables 的設(shè)計(jì)哲學(xué)。

一、先導(dǎo)知識(shí):數(shù)據(jù)包的“人生旅程”

當(dāng)一個(gè)數(shù)據(jù)包進(jìn)入Linux系統(tǒng)時(shí),它會(huì)經(jīng)歷多個(gè)“檢查站”,每個(gè)檢查站都有不同的決策規(guī)則。這個(gè)過程類似于快遞分揀:

1. 入境檢查(PREROUTING):判斷包裹是否要轉(zhuǎn)運(yùn)(NAT)或直接派送。

2. 本地派送(INPUT):決定是否簽收(交給本機(jī)應(yīng)用)。

3. 跨境運(yùn)輸(FORWARD):中轉(zhuǎn)包裹到其他機(jī)器。

4. 出境準(zhǔn)備(OUTPUT):處理本機(jī)發(fā)出的包裹。

5. 出境登記(POSTROUTING):記錄包裹最終去向。

二、七張表:不同職能的“決策部門”

注意:傳統(tǒng)說法中的“七表”實(shí)際是歷史版本的概念,現(xiàn)代Linux內(nèi)核(4.x+)常用五張表:raw、filter、nat、mangle、security。此處以生產(chǎn)環(huán)境常用表解析。

1. raw表(原始數(shù)據(jù)裁決所)

? 職能:在連接跟蹤(conntrack)之前處理數(shù)據(jù)包,決定是否跳過狀態(tài)跟蹤。

? 應(yīng)用場景:

對(duì)特定流量禁用連接跟蹤(如高并發(fā)場景優(yōu)化性能)。

標(biāo)記不需要NAT的流量。

# 禁用對(duì)80端口的連接跟蹤
iptables -t raw -A PREROUTING -p tcp --dport 80 -j NOTRACK

2. filter表(流量安檢門)

? 職能:決定是否允許數(shù)據(jù)包通過(ACCEPT/DROP/REJECT)。

? 核心鏈:INPUT、FORWARD、OUTPUT。

? 經(jīng)典規(guī)則:

# 允許已建立的連接
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 阻止所有入站SSH暴力破解
iptables -A INPUT -p tcp --dport 22 -m recent --name SSH --set
iptables -A INPUT -p tcp --dport 22 -m recent --name SSH --update --seconds 60 --hitcount 3 -j DROP

3. nat表(地址翻譯局)

? 職能:修改數(shù)據(jù)包的源/目標(biāo)地址(SNAT/DNAT)。

? 核心鏈:PREROUTING、OUTPUT、POSTROUTING。

? 典型配置:

# 將外部訪問1.1.1.1:80轉(zhuǎn)發(fā)到內(nèi)網(wǎng)10.0.0.2:80(DNAT)
iptables -t nat -A PREROUTING -d 1.1.1.1 -p tcp --dport 80 -j DNAT --to 10.0.0.2:80
# 內(nèi)網(wǎng)機(jī)器通過網(wǎng)關(guān)上網(wǎng)(SNAT)
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 2.2.2.2

4. mangle表(數(shù)據(jù)整形科)

? 職能:修改數(shù)據(jù)包頭部信息(如TTL、TOS、MARK)。

? 應(yīng)用場景:

基于QoS標(biāo)記流量優(yōu)先級(jí)。

實(shí)現(xiàn)策略路由(結(jié)合iproute2)。

# 標(biāo)記所有HTTP流量為優(yōu)先級(jí)1
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 1

5. security表(強(qiáng)制安檢室)

? 職能:實(shí)現(xiàn)強(qiáng)制訪問控制(如SELinux策略)。

? 使用頻率低:多數(shù)企業(yè)依賴上層防火墻或AppArmor/SELinux。

三、五條鏈:數(shù)據(jù)包的“必經(jīng)關(guān)卡”

1. PREROUTING鏈(入境登記處)

? 觸發(fā)時(shí)機(jī):數(shù)據(jù)包進(jìn)入網(wǎng)卡后,路由決策前。

? 常用表:raw、nat、mangle。

? 典型操作:DNAT、流量標(biāo)記。

2. INPUT鏈(本地簽收臺(tái))

? 觸發(fā)時(shí)機(jī):數(shù)據(jù)包目標(biāo)為本機(jī)進(jìn)程。

? 常用表:filter、mangle。

? 經(jīng)典防御:過濾惡意掃描、限制ICMP洪水攻擊。

3. FORWARD鏈(跨境中轉(zhuǎn)站)

? 觸發(fā)時(shí)機(jī):數(shù)據(jù)包需要轉(zhuǎn)發(fā)到其他機(jī)器。

? 常用表:filter、mangle。

? 核心用途:實(shí)現(xiàn)Linux網(wǎng)關(guān)或容器網(wǎng)絡(luò)流量控制。

4. OUTPUT鏈(出境安檢口)

? 觸發(fā)時(shí)機(jī):本機(jī)進(jìn)程發(fā)出的數(shù)據(jù)包。

? 常用表:raw、filter、mangle、nat。

? 特殊場景:限制本機(jī)程序?qū)ν庠L問(如禁止MySQL客戶端連接外網(wǎng))。

5. POSTROUTING鏈(出境登記處)

? 觸發(fā)時(shí)機(jī):數(shù)據(jù)包發(fā)送到網(wǎng)卡前,路由決策后。

? 常用表:nat、mangle。

? 核心操作:SNAT(源地址轉(zhuǎn)換)。

四、優(yōu)先級(jí)與規(guī)則執(zhí)行順序

1. 表的處理順序(從高到低)

raw → mangle → nat → filter → security

2. 鏈的執(zhí)行流程

[ 數(shù)據(jù)包進(jìn)入網(wǎng)卡 ]
        │
        ▼
   PREROUTING鏈
        │
        ▼
 路由決策(判斷去向)
        │
        ├─目標(biāo)為本機(jī)─────→ INPUT鏈 ───→ 本地應(yīng)用
        │
        └─需要轉(zhuǎn)發(fā)─────→ FORWARD鏈 ───→ POSTROUTING鏈
        │
[ 本地應(yīng)用發(fā)送數(shù)據(jù)包 ] 
        │
        ▼
    OUTPUT鏈
        │
        ▼
   POSTROUTING鏈
        │
        ▼
[ 數(shù)據(jù)包離開網(wǎng)卡 ]

五、生產(chǎn)環(huán)境實(shí)戰(zhàn)案例

案例 1:Kubernetes 節(jié)點(diǎn)流量轉(zhuǎn)發(fā)異常

? 現(xiàn)象:Pod 跨節(jié)點(diǎn)通信失敗,iptables-save 顯示大量 KUBE-SVC 規(guī)則

? 根因:nf_conntrack 表滿導(dǎo)致丟包

? 解決方案:

# 調(diào)整 conntrack 表大小
echo 524288 > /proc/sys/net/netfilter/nf_conntrack_max

# 添加 raw 表規(guī)則繞過跟蹤(需評(píng)估安全影響)
iptables -t raw -A PREROUTING -p tcp --dport 80 -j NOTRACK

案例 2:防御 SSH 暴力破解

? 動(dòng)態(tài)封禁策略:

# 使用 recent 模塊記錄攻擊者 IP
iptables -A INPUT -p tcp --dport 22 -m recent --name ssh_attack --update --seconds 3600 -j DROP
iptables -A INPUT -p tcp --dport 22 -m recent --name ssh_attack --set -j ACCEPT

六、性能優(yōu)化技巧

1. 減少規(guī)則數(shù)量

? 合并同類規(guī)則,如用IP集合(ipset)替代多個(gè)-s參數(shù):

ipset create blacklist hash:ip
ipset add blacklist 192.168.1.100
iptables -A INPUT -m set --match-set blacklist src -j DROP

2. 調(diào)整表優(yōu)先級(jí)

? 高頻規(guī)則放在raw或mangle表,盡早攔截?zé)o效流量:

# 在raw表丟棄無效連接
iptables -t raw -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP

3. 關(guān)閉不需要的功能

? 停用無用的內(nèi)核模塊(如nf_conntrack_ftp)以減少計(jì)算開銷:

echo 0 > /proc/sys/net/netfilter/nf_conntrack_helper

七、常見誤區(qū)與排坑指南

誤區(qū)1:“規(guī)則順序無所謂”

? 問題:iptables規(guī)則按從上到下的順序匹配。

? 反例:先ACCEPT all再DROP ssh會(huì)導(dǎo)致SSH未被阻斷。

? 正解:嚴(yán)格規(guī)則在前,通用規(guī)則在后。

誤區(qū)2:“DROP比REJECT更安全”

? 陷阱:DROP會(huì)靜默丟棄數(shù)據(jù)包,導(dǎo)致客戶端長時(shí)間等待。

? 建議:對(duì)已知惡意IP用DROP,對(duì)誤操作用戶用REJECT。

誤區(qū)3:“nat表能過濾流量”

? 真相:nat表僅用于地址轉(zhuǎn)換,過濾必須依賴filter表。

? 錯(cuò)誤配置:

iptables -t nat -A POSTROUTING -s 10.0.0.5 -j DROP  # 無效!

結(jié)語

當(dāng)你在 Kubernetes 集群中看到 kube-proxy 生成的數(shù)千條 iptables 規(guī)則時(shí),不必感到恐懼——這正是七表五鏈設(shè)計(jì)靈活性的體現(xiàn)。掌握本文內(nèi)容后,你可以:

1. 精準(zhǔn)定位生產(chǎn)環(huán)境中的網(wǎng)絡(luò)策略沖突

2. 為特定業(yè)務(wù)定制高性能流量控制規(guī)則

3. 寫出比 Kubernetes 默認(rèn)實(shí)現(xiàn)更優(yōu)雅的 CNI 插件

責(zé)任編輯:武曉燕 來源: 云原生運(yùn)維圈
相關(guān)推薦

2023-04-04 08:14:45

2024-11-13 14:27:48

2011-03-31 13:19:24

mysql外鏈

2011-12-01 15:39:33

企業(yè)級(jí)移動(dòng)應(yīng)用

2023-09-26 10:42:46

AIAIGC

2011-03-16 09:05:34

iptablesnat

2011-09-07 09:21:04

2015-12-15 17:21:47

運(yùn)維產(chǎn)品能力分層體系

2012-10-09 16:47:19

2013-09-30 10:54:46

2011-09-27 11:09:13

2018-03-13 07:05:10

區(qū)塊鏈中心化比特幣

2011-03-15 15:47:34

netfilteriptables

2018-07-09 14:24:32

區(qū)塊鏈

2018-11-26 09:00:14

2023-03-05 18:40:39

iptables防火墻軟件

2018-03-13 10:23:49

2020-04-06 20:11:26

區(qū)塊鏈分布式核心技術(shù)

2018-08-06 14:35:05

區(qū)塊鏈數(shù)字貨幣比特幣

2020-08-27 11:05:08

大數(shù)據(jù)互聯(lián)網(wǎng)數(shù)字
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)