Linux iptables 命令詳解

唐青枫發表於2024-11-27

簡介

iptables 是一個在 Linux 中的管理防火牆規則的命令列工具,它作為 Linux 核心的 netfilter 框架的一部分執行,以控制傳入和傳出的網路流量。

firewalld 相比

  • iptables 是基於規則的,每個規則必須獨立定義,firewalld 是基於區域的,規則適用於預定義或自定義區域。
  • iptables 適合高度精細和手動的配置,firewalld 動態規則更簡單且更加使用者友好。
  • iptables 需要重新整理或重新啟動才能應用更改,firewalld 支援不間斷的即時更改。
  • iptables 對於靜態、簡單的配置來說非常高效,firewalld 由於抽象層,速度稍微慢一些,但大多數情況下可以忽略不計。

    基礎概念

Chains

處理資料包的一組規則
  • INPUT: 控制傳入資料包。
  • FORWARD: 控制透過系統轉發的資料包。
  • OUTPUT: 控制傳出的資料包。

Tables

規則處理類別
  • filter: 基本資料包過濾的預設表。
  • nat: 處理網路地址轉換(NAT)。
  • mangle: 改變資料包。
  • raw: 在連線跟蹤之前配置資料包。

Rules

對資料包應用的操作,例如:ACCEPTDROP

常用操作

列出所有鏈的規則

sudo iptables -L

列出帶行號的規則

sudo iptables -L --line-numbers

列出特定表中的規則

sudo iptables -t nat -L

允許指定埠傳入流量

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# -A INPUT: 追加到 INPUT鏈

# -p tcp: 指定協議為 TCP

# --dport 80: 指定目標埠為80

# -j ACCEPT: 接受資料包

阻止來自指定IP的流量

sudo iptables -A INPUT -s 192.168.1.100 -j DROP

# -s 192.168.1.100: 指定源IP地址

允許來自子網的流量

sudo iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT

允許埠 22 (SSH) 上的傳出流量

sudo iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT

在網路之間轉發流量

sudo iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

按行號刪除規則

sudo iptables -D INPUT 2

# -D INPUT 2: 刪除 INPUT 鏈的第二個規則

將傳入流量的預設策略設定為 DROP

sudo iptables -P INPUT DROP

將傳出流量的預設策略設定為 ACCEPT

sudo iptables -P OUTPUT ACCEPT

儲存當前規則到指定檔案

sudo iptables-save > /etc/iptables.rules

從檔案中恢復規則

sudo iptables-restore < /etc/iptables.rules

將埠 8080 轉發至 80

sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80

偽裝流量(NAT)

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

轉發流量到其他IP

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT 
--to-destination 192.168.1.200:80

記錄丟棄的資料包

sudo iptables -A INPUT -j LOG --log-prefix "Dropped Packet: " --log-level 4

記錄已接受的資料包

sudo iptables -A INPUT -j LOG --log-prefix "Accepted Packet: " --log-level 4

檢視資料包和位元組數

sudo iptables -L -v

重置計數器

sudo iptables -Z

重新整理所有規則

sudo iptables -F

在指定的 Table 上重新整理規則

sudo iptables -t nat -F

刪除所有使用者定義的 Chains

sudo iptables -X

常用選項

  • -A:追加到規則到鏈中
  • -D:從鏈中刪除一個規則
  • -P:為鏈設定預設策略
  • -F:重新整理鏈中的所有規則
  • -L:列出鏈中的所有規則
  • -t [table]:指定 table
  • -i:指定輸入介面,例如:eth0
  • -o:指定輸出介面
  • -s:指定源IP地址
  • -d:指定目標IP地址
  • -p:指定協議型別,例如:tcpudpicmp

相關文章