iptables 是 Linux 核心網路封包過濾框架 (Netfilter) 的用戶空間管理工具,掌握核心命令與持久化機制是伺服器安全基線。
/etc/sysconfig/iptables (RHEL/CentOS) 或 /etc/iptables/rules.v4 (Debian/Ubuntu iptables-persistent)。iptables (IPv4)、ip6tables (IPv6)。
# 查看規則 (含行號、計數器)
iptables -nvL --line-numbers
# 開放 TCP 埠 (例: Oracle 1521)
iptables -A INPUT -p tcp --dport 1521 -j ACCEPT
# 建議加上狀態匹配,僅允許新連線
iptables -A INPUT -m state --state NEW -p tcp --dport 1521 -j ACCEPT
# 開放 UDP 埠 (例: DNS 53)
iptables -A INPUT -p udp --dport 53 -j ACCEPT
# 允許特定 IP 存取 SSH
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
# 拒絕預設政策 (謹慎使用,確保已放行 SSH)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 刪除規則 (按行號)
iptables -D INPUT 5
# 插入規則 (優先順序靠前)
iptables -I INPUT 1 -i lo -j ACCEPT
# SysVinit
service iptables stop|start|restart|status
/sbin/service iptables save # 將記憶體規則寫入配置檔
# systemd
systemctl stop|start|restart|status iptables
systemctl enable iptables # 開機自動載入規則
# 手動持久化
iptables-save > /etc/sysconfig/iptables
# 或
iptables-save > /etc/iptables/rules.v4
# 確保 ipchains 服務關閉並禁用
service ipchains stop
chkconfig ipchains off
# systemd
systemctl stop ipchains
systemctl disable ipchains
# 多埠 (multiport 模組)
iptables -A INPUT -p tcp -m multiport --dports 80,443,8080 -j ACCEPT
# 連線速率限制 (limit 模組,防暴力破解)
iptables -A INPUT -p tcp --dport 22 -m limit --limit 3/min --limit-burst 5 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
# 近期連線模組 (recent,SSH 防暴力)
iptables -A INPUT -p tcp --dport 22 -m recent --name sshattack --set
iptables -A INPUT -p tcp --dport 22 -m recent --name sshattack --update --seconds 60 --hitcount 4 -j DROP
# 觀察封包匹配計數器
watch -n 1 'iptables -nvL INPUT --line-numbers'
# 追蹤特定封包流經鏈 (需核心支援 NFLOG/NFQUEUE)
iptables -A INPUT -p tcp --dport 22 -j NFLOG --nflog-group 1
# 用戶空間工具 ulogd2 接收日誌
nft list ruleset、nft add rule 等命令取代 iptables/ip6tables/arptables/ebtables。iptables 命令透過 iptables-nft 相容層轉譯。iptables 雖歷經二十年仍是主流生產環境標準,熟練「開放埠 → 持久化 → 驗證」三步驟,配合 fail2ban、ufw/firewalld 高層工具,構建纵深防禦體系。