iptables 是 Linux 核心網路封包過濾框架 Netfilter 的用戶空間管理工具,功能強大且靈活,是伺服器安全防線的核心組件。本文將以 filter 表為例,帶你從零構建一套生產級防火牆規則集,涵蓋規則查看、清理、預設策略、常見服務放行、持久化與遠程管理避坑指南。
⚠️ 關鍵提醒:若你正在通過 SSH 遠程管理伺服器,務必先在本地機器或具備 OOB(帶外管理)權限的情況下操作。錯誤的
INPUT DROP規則會瞬間切斷你的連線,導致無法挽回的停機事故。
filter(預設,過濾), nat(地址轉換), mangle(修改封包標記), raw(繞過連線追蹤)。INPUT(進站), OUTPUT(出站), FORWARD(轉發), PREROUTING, POSTROUTING。ACCEPT(允許), DROP(丟棄無回應), REJECT(拒絕並回應), LOG(記錄)。# 查看現有規則(含行號)
iptables -L -n -v --line-numbers
# 備份現有規則
iptables-save > /root/iptables_bak_$(date +%F).rules
iptables -F # 清空預設表所有鏈的規則
iptables -X # 刪除所有用戶自定義鏈
# 驗證
iptables -L -n
# 輸入/轉發預設丟棄,輸出預設允許
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
原則解讀:
INPUT/FORWARD採用「白名單機制」(明確允許其餘拒絕),OUTPUT採用「黑名單機制」(預設信任本機發出流量)。若極高安全需求,三鏈皆可設DROP,但規則維護成本指數級上升。
# 1. 允許本地回環介面(關鍵!許多本地服務依賴 lo)
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# 2. 允許已建立/相關連線的返回流量(狀態檢測核心)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 3. 允許 ICMP(ping, traceroute, MTU 發現等網路診斷必需)
iptables -A INPUT -p icmp -j ACCEPT
# 4. 防禦常見掃描/攻擊(可選,建議開啟)
# 限制新連線速率防 SYN Flood
iptables -A INPUT -p tcp --syn -m limit --limit 5/s --limit-burst 10 -j ACCEPT
# 記錄並丟棄無效封包
iptables -A INPUT -m state --state INVALID -j DROP
# SSH (預設 22,強烈建議修改非標準埠並限制來源 IP)
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
# 生產環境建議:
# iptables -A INPUT -p tcp --dport 2222 -s 203.0.113.0/24 -m state --state NEW -j ACCEPT
# HTTP/HTTPS
iptables -A INPUT -p tcp -m multiport --dports 80,443 -m state --state NEW -j ACCEPT
# MySQL (僅內網存取)
iptables -A INPUT -p tcp --dport 3306 -s 10.0.0.0/8 -m state --state NEW -j ACCEPT
# 自訂應用埠
# iptables -A INPUT -p tcp --dport 8080 -m state --state NEW -j ACCEPT
# 記錄被 DROP 的封包(限制頻率避免日誌洪水)
iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "IPTables-DROPPED: " --log-level 4
# 方法一:service 指令 (RHEL/CentOS 6/7, 部分舊版)
service iptables save
service iptables restart
# 方法二:iptables-save 重導向 (通用, 需配合啟動腳本/systemd)
iptables-save > /etc/sysconfig/iptables # RHEL 系
# 或
iptables-save > /etc/iptables/rules.v4 # Debian/Ubuntu 系 (需安裝 iptables-persistent)
# 驗證生效規則
iptables -L -n -v --line-numbers
screen/tmux 會話或第二個 SSH 連線備用。# 5 分鐘後自動恢復預設允許策略(測試新規則時的安全網)
echo "iptables -P INPUT ACCEPT; iptables -F" | at now + 5 minutes
iptables -I INPUT ... 臨時插入測試,確認無誤再 -A 固化。| 現象 | 可能原因 | 排查指令 |
|---|---|---|
| SSH 連不上 | 缺少 ESTABLISHED,RELATED 規則或 SSH 埠未放行 | 本地主機檢查 iptables -L -n -v |
| 網頁打不開 | 80/443 埠未放行或 OUTPUT 鏈限制 | iptables -L OUTPUT -n -v |
| Docker/容器網路不通 | FORWARD 鏈 DROP 或缺少 Docker 所需規則 | 檢查 DOCKER-USER 鏈 |
| 規則重啟失效 | 未持久化或持久化路徑錯誤 | 確認 iptables-save 輸出檔案位置 |

iptables 繼任者。iptables-nft 兼容層可平滑遷移。ufw allow 22/tcp)。掌握
iptables 底層邏輯,無論遷移至何種上層工具,皆能游刃有餘。安全無絕對,唯有持續審計、最小權限、纵深防禦,方能築牢防線。