在 Debian 上用 iptables 写脚本,本质就是写一个 Shell 脚本(bash),里面调用 iptables 命令,并在系统启动时自动加载。下面给你一个从入门到可用的说明。
新建文件,比如 /usr/local/bin/iptables.sh:
#!/bin/bash
# 清除旧规则
iptables -F
iptables -X
iptables -Z
# 默认策略(推荐)
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
保存后赋予执行权限:
chmod +x /usr/local/bin/iptables.sh
手动执行:
/usr/local/bin/iptables.sh
iptables-persistent(最简单 ✅)apt update
apt install iptables-persistent
netfilter-persistent save
规则会保存到:
/etc/iptables/rules.v4
系统启动时会自动加载 rules.v4
✅ 推荐生产环境使用
创建 service 文件:
nano /etc/systemd/system/iptables-custom.service
内容:
[Unit]
Description=Custom iptables rules
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/iptables.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
启用:
systemctl daemon-reload
systemctl enable iptables-custom
systemctl start iptables-custom
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
iptables -A INPUT -s 1.2.3.4 -j DROP
iptables -L -n -v
iptables -S
✅ 新手必开 SSH 白名单或本地 console
✅ 改规则前先 iptables -P INPUT ACCEPT 防锁死
✅ Debian 新版本可考虑 nftables
如果你愿意,我可以:
你打算用在什么场景?