iptables 規則僅存在記憶體,重啟失效。持久化靠 iptables-save 導出規則集,iptables-restore 載入。Ubuntu 傳統採用 /etc/network/interfaces 掛載 pre-up 鉤子實現開機自動套用。
sudo iptables-save > /etc/iptables.up.rules
# 必須用 root shell:sudo -i 然後執行,直接 sudo iptables-save > file 會因重導向權限失敗
編輯 /etc/network/interfaces:
auto eth0
iface eth0 inet dhcp
pre-up iptables-restore < /etc/iptables.up.rules
pre-up 在介面啟動前執行,確保規則生效早於網路流量。
auto eth0
iface eth0 inet dhcp
pre-up iptables-restore < /etc/iptables.up.rules
post-down iptables-restore < /etc/iptables.down.rules
post-down 在介面關閉後執行,可切換到限制更嚴格的規則集。
auto eth0
iface eth0 inet dhcp
pre-up iptables-restore < /etc/iptables.up.rules
post-down iptables-save > /etc/iptables.up.rules
每次介面關閉自動備份當前規則,下次開機直接套用最新狀態。
sudo iptables-save > /etc/iptables.test.rulessudo vim /etc/iptables.test.rules 編輯(實際是修改指令流)sudo iptables-restore < /etc/iptables.test.rules 熱載入測試sudo iptables-save > /etc/iptables.up.rules 覆蓋生產規則# Generated by iptables-save v1.6.0
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp --dport 22 -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j DROP
COMMIT
# Completed
每行對應一條 iptables 指令,省略了 iptables 關鍵字。
sudo apt update && sudo apt install netfilter-persistent iptables-persistent
# 安裝過程會詢問是否保存當前 IPv4/IPv6 規則
# 之後自動在開機時載入 /etc/iptables/rules.v4 和 rules.v6
優點:系統級服務管理、支援 IPv6、配置標準化、無需手動編輯 interfaces。
| 操作 | 指令 |
|---|---|
| 備份 IPv4 | |
| 備份 IPv6 | |
| 還原 IPv4 | |
| 查看當前規則 | |
| 清空規則 |
sudo iptables-save > file 以當前用戶寫入,需 sudo sh -c 'iptables-save > file' 或 sudo -iinterfaces 格式錯誤導致網路啟動失敗DOCKER-USER 鏈管理自定義規則