iptables 是 Linux 核心層級的封包過濾框架,掌握其核心規則編寫能力,是伺服器安全防護的基石。本文提供一份生產環境可用的規則範本,涵蓋預設拒絕策略、常見服務埠開放、SSH 來源限制、ICMP 防禦、SYN Flood 緩解、NAT 偽裝轉發等實戰場景。
iptables -F # 清空現有規則
iptables -P INPUT DROP # 預設拒絕所有入站連線
原則:先拒絕全部,再按需放行(最小權限原則)。
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS
iptables -A INPUT -p tcp --dport 25 -j ACCEPT # SMTP
iptables -A INPUT -p tcp --dport 110 -j ACCEPT # POP3
iptables -A INPUT -p tcp --dport 21 -j ACCEPT # FTP
iptables -A INPUT -p tcp --dport 53 -j ACCEPT # DNS TCP
iptables -A INPUT -p udp --dport 53 -j ACCEPT # DNS UDP
iptables -A INPUT -p tcp -s 202.106.12.130 --dport 22 -j ACCEPT
建議搭配 fail2ban 或修改 sshd_config 禁用密碼登入,雙重防護。
iptables -A INPUT -p icmp --icmp-type echo-request -i eth1 -j DROP
丟棄來自外網介面 eth1 的 ICMP Echo Request,防止 Ping 洪水攻擊。內網介面可保留允許。
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
利用 limit 模組限制每秒僅接受 1 個 SYN 封包,緩解資源耗盡攻擊。高流量場景建議改用 synproxy 或雲端 WAF。
# 內網 192.168.0.226 經 eth1 出網(完整偽裝)
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.0.226 -j MASQUERADE
# 內網 192.168.0.4 僅允許經 eth0 存取外網 SMTP 埠
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.4 -p tcp --dport 25 -j MASQUERADE
# CentOS 7+
service iptables save
# 或
iptables-save > /etc/sysconfig/iptables
iptables -nvL --line-numbers # 顯示規則編號與計數器
iptables -nvL INPUT # 僅檢視 INPUT 鏈
watch -n1 'iptables -nvL' # 即時監控封包匹配數
將上述規則整合至部署腳本,並定期審計日誌(/var/log/messages 或 journalctl -u iptables),即可構建基礎且有效的主機防火牆防線。