IPTables 是 Linux 核心內建的封包過濾框架,透過定義規則鏈來控制網路流量。本文將從檢視現有規則、清除預設配置、設定預設政策、新增允許/拒絕規則,到儲存與重啟服務,完整說明如何打造一套安全的主機防火牆。
iptables -L -n
若安裝時啟用防火牆,通常會看到預設開放 SSH(22)、HTTP(80)、SMTP(25) 等規則,以及一條最終拒絕所有的 REJECT 規則。若未啟用,則三條主鏈 (INPUT、FORWARD、OUTPUT) 均為空、政策為 ACCEPT。
iptables -F # 清除 filter 表所有內建鏈規則
iptables -X # 刪除使用者自訂鏈
執行後再次檢視,所有鏈應恢復為空狀態。注意:命令列下的修改重啟即失效,需持久化儲存。
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
警告: 若透過 SSH 遠端管理,輸入第一條 `INPUT DROP` 瞬間連線即會中斷。請在本機主控台操作,或先添加 SSH 允許規則再改政策。
基本語法:iptables -A INPUT -p 協定 --dport 埠號 -j ACCEPT
| 服務 | 協定 | 埠號 | 命令範例 |
|---|---|---|---|
| SSH | tcp | 22 | |
| HTTP | tcp | 80 | |
| HTTPS | tcp | 443 | |
| SMTP | tcp | 25 | |
| POP3 | tcp | 110 | |
| FTP | tcp | 20, 21 | |
| DNS | tcp/udp | 53 |
# 允許 ICMP (ping)
iptables -A INPUT -p icmp -j ACCEPT
# 允許 Loopback 介面 (本機溝通必備)
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT # SSH 回應
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT # HTTP 回應
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
此規則允許回應封包與相關聯流量 (如 FTP 資料連線) 通過,極大簡化規則撰寫,建議放在鏈首部。
service iptables save # 寫入 /etc/sysconfig/iptables
service iptables restart # 重載規則
或使用 `iptables-save > /etc/sysconfig/iptables` 手動儲存。
IPTables 雖然底層複雜,但掌握「預設拒絕、按需開放、狀態檢測、持久化儲存」四大原則,即可構建穩健的主機防火牆。建議在測試環境驗證無誤後再套用至生產機器。