欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linux之iptables命令的使用方式

 更新時(shí)間:2025年07月07日 08:52:42   作者:言之。  
這篇文章主要介紹了Linux之iptables命令的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

iptables命令:作用與常用參數(shù)

1. iptables 的作用

iptables 是 Linux 系統(tǒng)上最常用的 防火墻工具,用于配置內(nèi)核的 netfilter 包過(guò)濾框架,主要功能包括:

  • 包過(guò)濾(Packet Filtering):允許/拒絕網(wǎng)絡(luò)數(shù)據(jù)包(如防火墻規(guī)則)。
  • 網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT):實(shí)現(xiàn) SNAT(源地址轉(zhuǎn)換)、DNAT(目標(biāo)地址轉(zhuǎn)換)。
  • 端口轉(zhuǎn)發(fā)(Port Forwarding):將外部請(qǐng)求轉(zhuǎn)發(fā)到內(nèi)部服務(wù)器。
  • 流量統(tǒng)計(jì)(Traffic Accounting):記錄數(shù)據(jù)包和字節(jié)計(jì)數(shù)。
  • 流量整形(Traffic Shaping):結(jié)合 tc 實(shí)現(xiàn) QoS。

2. iptables 的 5 個(gè)關(guān)鍵鏈(Chains)

iptables 規(guī)則基于 表(Tables)鏈(Chains) 組織,默認(rèn)有 5 個(gè)鏈:

鏈名作用
INPUT處理 進(jìn)入本機(jī) 的數(shù)據(jù)包(如 SSH、HTTP 請(qǐng)求)。
OUTPUT處理 從本機(jī)發(fā)出 的數(shù)據(jù)包(如 ping、curl 請(qǐng)求)。
FORWARD處理 經(jīng)過(guò)本機(jī)路由 的數(shù)據(jù)包(如網(wǎng)關(guān)服務(wù)器)。
PREROUTING在路由決策前修改數(shù)據(jù)包(DNAT、端口轉(zhuǎn)發(fā))。
POSTROUTING在數(shù)據(jù)包離開(kāi)前修改源地址(SNAT、MASQUERADE)。

3. iptables 的 4 個(gè)核心表(Tables)

表名作用
filter默認(rèn)表,用于包過(guò)濾(允許/拒絕流量)。
nat用于網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)。
mangle修改數(shù)據(jù)包內(nèi)容(如 TTL、TOS)。
raw繞過(guò)連接跟蹤(conntrack),用于高性能場(chǎng)景。

4. iptables 常用參數(shù)

(1)通用參數(shù)

參數(shù)作用
-t <表名>指定操作的表(如 -t nat、-t filter,默認(rèn) filter)。
-A <鏈名>追加 規(guī)則到鏈尾(如 -A INPUT)。
-I <鏈名> [規(guī)則號(hào)]插入 規(guī)則到鏈?zhǔn)谆蛑付ㄎ恢茫ㄈ?-I INPUT 2)。
-D <鏈名> <規(guī)則號(hào)>刪除 指定規(guī)則(如 -D INPUT 3)。
-L列出 規(guī)則(-L INPUT 查看特定鏈)。
-F清空 鏈中的所有規(guī)則(-F INPUT 清空 INPUT 鏈)。
-P <鏈名> <動(dòng)作>設(shè)置鏈的默認(rèn)策略(如 -P INPUT DROP)。
-v顯示詳細(xì)信息(如數(shù)據(jù)包計(jì)數(shù) pkts 和字節(jié) bytes)。
-n禁用 DNS 反向解析,加快輸出速度。

(2)規(guī)則匹配參數(shù)

參數(shù)作用
-p <協(xié)議>匹配協(xié)議(如 -p tcp、-p udp、-p icmp)。
--dport <端口>匹配目標(biāo)端口(需配合 -p tcp/udp,如 --dport 80)。
--sport <端口>匹配源端口(如 --sport 22)。
-s <IP>匹配源 IP(如 -s 192.168.1.100)。
-d <IP>匹配目標(biāo) IP(如 -d 10.0.0.1)。
-i <網(wǎng)卡>匹配輸入網(wǎng)卡(如 -i eth0)。
-o <網(wǎng)卡>匹配輸出網(wǎng)卡(如 -o wlan0)。
-m <模塊>使用擴(kuò)展模塊(如 -m state --state ESTABLISHED)。

(3)動(dòng)作(Target)參數(shù)

參數(shù)作用
-j ACCEPT允許數(shù)據(jù)包通過(guò)。
-j DROP丟棄數(shù)據(jù)包(無(wú)響應(yīng))。
-j REJECT拒絕數(shù)據(jù)包(返回 ICMP 拒絕消息)。
-j LOG記錄日志(/var/log/messages)。
-j DNAT目標(biāo)地址轉(zhuǎn)換(如 -j DNAT --to-destination 192.168.1.2:80)。
-j SNAT源地址轉(zhuǎn)換(如 -j SNAT --to-source 1.2.3.4)。
-j MASQUERADE動(dòng)態(tài) SNAT(適用于撥號(hào)或 DHCP 獲取 IP)。

5. 常用示例

(1)查看規(guī)則

iptables -L -n -v          # 查看 filter 表規(guī)則(默認(rèn))
iptables -t nat -L -n -v   # 查看 nat 表規(guī)則
iptables -L INPUT -n -v    # 查看 INPUT 鏈規(guī)則

(2)允許/拒絕流量

iptables -A INPUT -p tcp --dport 22 -j ACCEPT   # 允許 SSH
iptables -A INPUT -p tcp --dport 80 -j DROP    # 拒絕 HTTP
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT  # 允許局域網(wǎng)訪問(wèn)

(3)NAT 與端口轉(zhuǎn)發(fā)

# SNAT(內(nèi)網(wǎng)機(jī)器通過(guò)網(wǎng)關(guān)訪問(wèn)外網(wǎng))
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# DNAT(將外網(wǎng) 80 端口轉(zhuǎn)發(fā)到內(nèi)網(wǎng) 192.168.1.2)
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.1.2:80

(4)保存與恢復(fù)規(guī)則

iptables-save > /etc/iptables.rules   # 保存規(guī)則
iptables-restore < /etc/iptables.rules # 恢復(fù)規(guī)則

心得:

iptables 核心功能:包過(guò)濾、NAT、端口轉(zhuǎn)發(fā)、流量統(tǒng)計(jì)。

關(guān)鍵表與鏈filter、nat、mangle、raw + INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING。

高頻參數(shù)

  • -A(追加規(guī)則)、-I(插入規(guī)則)、-D(刪除規(guī)則)。
  • -p(協(xié)議)、--dport(端口)、-s/-d(IP)。
  • -j ACCEPT/DROP/REJECT/DNAT/SNAT。

進(jìn)階建議

  • 學(xué)習(xí) nftablesiptables 的下一代替代品)。
  • 使用 fail2ban 動(dòng)態(tài)封禁惡意 IP。
  • 結(jié)合 conntrack 監(jiān)控連接狀態(tài)。

iptables 頻繁查詢(xún)對(duì)系統(tǒng)性能的影響及優(yōu)化建議

頻繁執(zhí)行該命令可能會(huì)對(duì)系統(tǒng)性能(尤其是 DNS 服務(wù)器)造成負(fù)面影響

1. iptables -t nat -nvL 的 CPU 開(kāi)銷(xiāo)

1.1 命令執(zhí)行過(guò)程

iptables -t nat -nvL 是一個(gè)只讀查詢(xún)命令,主要功能是:

  • 遍歷 nat 表的所有規(guī)則(DNAT/SNAT 等)。
  • 計(jì)算并顯示每個(gè)規(guī)則的 數(shù)據(jù)包計(jì)數(shù)(pkts)字節(jié)計(jì)數(shù)(bytes)。

1.2 CPU 資源占用分析

規(guī)則遍歷開(kāi)銷(xiāo)

  • 如果 nat 表規(guī)則較多(如數(shù)千條),每次執(zhí)行 iptables -nvL 都需要遍歷整個(gè)規(guī)則鏈,消耗 CPU 時(shí)間。

原子計(jì)數(shù)器讀取

  • iptablespkts/bytes 計(jì)數(shù)器是原子變量(atomic),內(nèi)核需要安全讀取這些值,可能觸發(fā) CPU 緩存同步(尤其在多核系統(tǒng)上)。

1.3 對(duì) DNS 服務(wù)器的影響

DNS 服務(wù)器(如 BIND、CoreDNS)通常是 CPU 密集型 服務(wù),依賴(lài)快速處理 UDP 查詢(xún)。如果 iptables -nvL 高頻執(zhí)行(如每秒多次),可能導(dǎo)致:

  • CPU 時(shí)間片爭(zhēng)搶:DNS 工作線(xiàn)程的 CPU 時(shí)間被 iptables 占用。
  • 查詢(xún)延遲增加:DNS 響應(yīng)時(shí)間從毫秒級(jí)上升,甚至觸發(fā)客戶(hù)端超時(shí)重試,進(jìn)一步加劇負(fù)載。

示例量化分析

  • 假設(shè) nat 表有 1000 條規(guī)則,單次 iptables -nvL 耗時(shí) 5ms。
  • 每秒執(zhí)行 10 次 → 占用 50ms CPU 時(shí)間/秒(約 5% 單核 CPU)。
  • 高負(fù)載 DNS 服務(wù)器 上,額外 5% CPU 占用可能導(dǎo)致 尾延遲(P99)顯著上升。

2. iptables 的內(nèi)核鎖競(jìng)爭(zhēng)問(wèn)題

2.1 xtables 鎖機(jī)制

iptables 通過(guò)內(nèi)核的 xt_table 鎖(互斥鎖) 保護(hù)規(guī)則表的讀寫(xiě)一致性:

  • 讀操作(如 iptables -L)和 寫(xiě)操作(如 iptables -A)會(huì)競(jìng)爭(zhēng)同一把鎖。
  • 舊版內(nèi)核(< 5.3)使用全局鎖,所有 iptables 操作串行化,即使只是查詢(xún)也會(huì)阻塞規(guī)則更新。

2.2 鎖競(jìng)爭(zhēng)對(duì) DNS 的影響

如果 DNS 服務(wù)器與 iptables 規(guī)則管理運(yùn)行在同一臺(tái)機(jī)器上,可能出現(xiàn):

DNS 線(xiàn)程阻塞

  • 當(dāng) iptables -nvL 執(zhí)行時(shí),若后臺(tái)有腳本修改規(guī)則(如 iptables -A),查詢(xún)線(xiàn)程會(huì)被阻塞,直到鎖釋放。
  • 表現(xiàn):DNS 查詢(xún)延遲波動(dòng)(如 P99 從 10ms 升至 100ms)。

極端情況:丟包或超時(shí)

  • 若規(guī)則更新極頻繁(如 Kubernetes kube-proxy 動(dòng)態(tài)調(diào)整規(guī)則),iptables -L 可能長(zhǎng)時(shí)間阻塞,甚至導(dǎo)致 DNS 查詢(xún)超時(shí)。

如何檢測(cè)鎖競(jìng)爭(zhēng)?

# 使用 perf 監(jiān)控 xtables 鎖等待(需內(nèi)核支持)
perf probe -a 'xt_table_lock'
perf stat -e 'probe:xt_table_lock' -a sleep 10

3. 優(yōu)化建議

3.1 降低查詢(xún)頻率

避免每秒多次查詢(xún),改為 每分鐘 1 次僅在需要時(shí)執(zhí)行

# 示例:Crontab 每分鐘記錄一次
* * * * * /sbin/iptables -t nat -nvL >> /var/log/iptables-nat.log

3.2 使用更高效的工具

改用 nftables(現(xiàn)代 Linux 默認(rèn)防火墻,鎖機(jī)制更高效):

nft list table ip nat  # 替代 iptables -t nat -nvL

使用 conntrack 監(jiān)控連接狀態(tài)(避免遍歷規(guī)則):

conntrack -L -j  # 以 JSON 格式顯示 NAT 會(huì)話(huà)

3.3 優(yōu)化系統(tǒng)環(huán)境

減少 iptables 規(guī)則規(guī)模

  • 合并冗余規(guī)則,使用 ipset 優(yōu)化大型規(guī)則集。

分離關(guān)鍵服務(wù)

  • 將 DNS 服務(wù)器與 iptables 管理節(jié)點(diǎn)隔離,避免資源競(jìng)爭(zhēng)。

監(jiān)控與告警

  • 使用 htopdstat 觀察 CPU 和鎖競(jìng)爭(zhēng)情況:
dstat -tc --top-cpu  # 查看 CPU 占用最高的進(jìn)程

心得:

問(wèn)題影響解決方案
CPU 占用高DNS 查詢(xún)延遲增加,可能超時(shí)降低查詢(xún)頻率,改用 nftables
內(nèi)核鎖競(jìng)爭(zhēng)DNS 線(xiàn)程阻塞,響應(yīng)變慢或丟包減少規(guī)則規(guī)模,分離 DNS 與防火墻節(jié)點(diǎn)
I/O 壓力日志寫(xiě)入沖突,可能耗盡磁盤(pán)限制日志大小,使用 logrotate

最終建議

  • 偶爾查詢(xún) iptables -t nat -nvL 無(wú)影響,但避免高頻執(zhí)行。
  • 長(zhǎng)期優(yōu)化:遷移到 nftables,提升查詢(xún)效率并減少鎖競(jìng)爭(zhēng)。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論