一、安裝
# CentOS/RHEL
yum -y install iptables iptables-services
# Debian/Ubuntu
apt -y install iptables iptables-persistent
二、清空現有規則 (乾淨起步)
iptables -F
iptables -X
iptables -Z
三、基礎信任規則 (必加,否則鎖死自己)
# 1. 本地回環
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
# 2. 已建立/相關連接放行 (核心!)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 3. 本機向外全放行
iptables -A OUTPUT -j ACCEPT
四、開放業務端口 (按需增減)
# SSH (建議改非 22)
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
# HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# FTP (主動/被動模式需額外模組)
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
# 自定義端口
# iptables -A INPUT -p tcp --dport XXXX -j ACCEPT
五、默認拒絕策略 (關鍵一步)
# 方法 1: DROP (靜默丟棄,掃描端口顯示 filtered)
iptables -A INPUT -p tcp -j DROP
iptables -A FORWARD -j DROP
# 方法 2: REJECT (返回 icmp-port-unreachable,掃描顯示 closed)
# iptables -A INPUT -j REJECT
# iptables -A FORWARD -j REJECT
六、封禁 IP / IP 段
# 單 IP
iptables -I INPUT -s 203.0.113.100 -j DROP
# 整個 /8 (A 類)
iptables -I INPUT -s 203.0.0.0/8 -j DROP
# /16 (B 類)
iptables -I INPUT -s 198.51.0.0/16 -j DROP
# /24 (C 類)
iptables -I INPUT -s 192.0.2.0/24 -j DROP
# 封禁輸出到某 IP (防止內部連接惡意外聯)
iptables -I OUTPUT -d 198.51.100.50 -j DROP
七、查看規則
iptables -L -n -v --line-numbers
# -n: 不解析域名
# -v: 顯示封包/位元組計數
# --line-numbers: 顯示行號 (便於刪除)
八、刪除規則
# 按行號刪除 (如刪除 INPUT 第 5 條)
iptables -D INPUT 5
# 按匹配刪除 (需完整複製原規則)
iptables -D INPUT -s 203.0.113.100 -j DROP
九、保存與持久化
| 發行版 | 保存命令 | 開機自動載入 |
| CentOS 6/7 | service iptables save | chkconfig iptables on / systemctl enable iptables |
| CentOS 8+/RHEL 8+ | iptables-save > /etc/sysconfig/iptables | systemctl enable --now iptables (需安裝 iptables-services) |
| Debian/Ubuntu | iptables-save > /etc/iptables/rules.v4 | 安裝 iptables-persistent 套件自動生成 systemd 服務 |
十、標準化規則模板 (可直接 iptables-restore)
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
# Loopback
-A INPUT -i lo -j ACCEPT
# Established/Related
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Business Ports
-A INPUT -p tcp --dport 2222 -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -p tcp --dport 21 -j ACCEPT
-A INPUT -p tcp --dport 20 -j ACCEPT
# ICMP (允許 ping, 需求可關)
-A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# Drop rest (已由 DEFAULT POLICY DROP 生效)
COMMIT
載入:iptables-restore < /etc/iptables/rules.v4
總結
iptables 核心邏輯:信任回環 → 放行已建立 → 開放業務 → 默認拒絕。牢記 -A 追加、-I 插入 (優先級高)、-D 刪除、-L -n -v --line-numbers 查看。生產環境務必持久化並納入版控,變更走流水線部署。