簡介
iptables
是一個在 Linux
中的管理防火牆規則的命令列工具,它作為 Linux
核心的 netfilter
框架的一部分執行,以控制傳入和傳出的網路流量。
與 firewalld
相比
iptables
是基於規則的,每個規則必須獨立定義,firewalld
是基於區域的,規則適用於預定義或自定義區域。iptables
適合高度精細和手動的配置,firewalld
動態規則更簡單且更加使用者友好。iptables
需要重新整理或重新啟動才能應用更改,firewalld
支援不間斷的即時更改。iptables
對於靜態、簡單的配置來說非常高效,firewalld
由於抽象層,速度稍微慢一些,但大多數情況下可以忽略不計。基礎概念
Chains
處理資料包的一組規則
INPUT
: 控制傳入資料包。FORWARD
: 控制透過系統轉發的資料包。OUTPUT
: 控制傳出的資料包。
Tables
規則處理類別
filter
: 基本資料包過濾的預設表。nat
: 處理網路地址轉換(NAT)。mangle
: 改變資料包。raw
: 在連線跟蹤之前配置資料包。
Rules
對資料包應用的操作,例如:ACCEPT
、DROP
常用操作
列出所有鏈的規則
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
:指定協議型別,例如:tcp
、udp
、icmp