亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Linux之iptables命令的使用方式

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

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

1. iptables 的作用

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

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

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

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

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

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

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

4. iptables 常用參數(shù)

(1)通用參數(shù)

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

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

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

(3)動作(Target)參數(shù)

參數(shù)作用
-j ACCEPT允許數(shù)據(jù)包通過。
-j DROP丟棄數(shù)據(jù)包(無響應(yīng))。
-j REJECT拒絕數(shù)據(jù)包(返回 ICMP 拒絕消息)。
-j LOG記錄日志(/var/log/messages)。
-j DNAT目標地址轉(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動態(tài) SNAT(適用于撥號或 DHCP 獲取 IP)。

5. 常用示例

(1)查看規(guī)則

iptables -L -n -v          # 查看 filter 表規(guī)則(默認)
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)訪問

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

# SNAT(內(nèi)網(wǎng)機器通過網(wǎng)關(guā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 核心功能:包過濾、NAT、端口轉(zhuǎn)發(fā)、流量統(tǒng)計。

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

高頻參數(shù)

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

進階建議

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

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

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

1. iptables -t nat -nvL 的 CPU 開銷

1.1 命令執(zhí)行過程

iptables -t nat -nvL 是一個只讀查詢命令,主要功能是:

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

1.2 CPU 資源占用分析

規(guī)則遍歷開銷

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

原子計數(shù)器讀取

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

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

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

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

示例量化分析

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

2. iptables 的內(nèi)核鎖競爭問題

2.1 xtables 鎖機制

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

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

2.2 鎖競爭對 DNS 的影響

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

DNS 線程阻塞

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

極端情況:丟包或超時

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

如何檢測鎖競爭?

# 使用 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 降低查詢頻率

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

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

3.2 使用更高效的工具

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

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

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

conntrack -L -j  # 以 JSON 格式顯示 NAT 會話

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

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

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

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

  • 將 DNS 服務(wù)器與 iptables 管理節(jié)點隔離,避免資源競爭。

監(jiān)控與告警

  • 使用 htop、dstat 觀察 CPU 和鎖競爭情況:
dstat -tc --top-cpu  # 查看 CPU 占用最高的進程

心得:

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

最終建議

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

總結(jié)

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

相關(guān)文章

最新評論