下面从基础概念 → 示例脚本 → 实用模板 → 开机自启一步步说明,如何在 Debian 下写一个可用的 iptables 脚本。
Debian 通常使用:
iptables(传统)nftables(新默认,但 iptables 仍可用)本文以 iptables(最常见、资料最多)为例。
一个标准脚本一般包含:
/usr/local/sbin/iptables.sh
#!/bin/bash
# 清空规则
iptables -F
iptables -X
# 默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 允许回环
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# SSH(重要!别锁自己)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# HTTP / HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 允许 ping(可选)
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# 日志(可选)
# iptables -A INPUT -j LOG --log-prefix "iptables-deny: "
保存后:
chmod +x /usr/local/sbin/iptables.sh
./usr/local/sbin/iptables.sh
#!/bin/bash
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 基础允许
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# SSH(建议限制 IP)
# iptables -A INPUT -p tcp -s 1.2.3.4 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Web
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# DNS(如果本机跑解析)
iptables -A INPUT -p udp --dport 53 -j ACCEPT
# 防爆破(示例)
iptables -A INPUT -p tcp --dport 22 -m recent --set
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 10 -j DROP
apt update
apt install iptables-persistent
保存规则:
netfilter-persistent save
或:
iptables-save > /etc/iptables/rules.v4
开机自动恢复 ✅
systemctl enable rc-local
或写 service(略复杂,不推荐新手)
iptables -L -n -v
iptables -S
iptables -F # 清规则(紧急时用)
❌ 忘了允许 SSH → 被锁外面
❌ 没保存规则 → 重启失效
❌ FORWARD DROP 影响 Docker / 虚拟机
❌ 用 nftables 系统却写 iptables(仍可用但混乱)
你可以告诉我:
我可以直接给你定制版脚本。