Debian 上启用 iptables 的正确做法
一 准备与检查
- 确认系统是否已安装 iptables:运行命令查看版本或现有规则
sudo iptables -V
sudo iptables -L -n -v
- 如未安装,先更新索引并安装:
sudo apt update && sudo apt install iptables
- 规划规则顺序与策略:务必先放行回环、已建立连接,再放行业务端口,最后再设置默认丢弃,避免把自己锁在外面(尤其是远程 SSH 场景)。
二 快速启用并持久化规则
- 写入基础规则(示例,按需调整端口与策略)
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -j DROP
- 保存规则(两种常用方式,二选一或都做)
- 使用 iptables-persistent(推荐)
sudo apt install iptables-persistent
安装过程中选择“是”保存当前规则;后续可用:
sudo netfilter-persistent save
sudo netfilter-persistent restart
- 手动保存与开机恢复
sudo iptables-save > /etc/iptables/rules.v4
创建开机加载脚本:
echo ‘#!/bin/sh’ | sudo tee /etc/network/if-pre-up.d/iptables
echo ‘/sbin/iptables-restore < /etc/iptables/rules.v4’ | sudo tee -a /etc/network/if-pre-up.d/iptables
sudo chmod +x /etc/network/if-pre-up.d/iptables
- 说明
- 某些教程会创建 /etc/iptables.rules 并配合 if-pre-up.d 脚本加载,这与使用 /etc/iptables/rules.v4 的做法等价,关键是路径与加载脚本一致。
- 不建议直接用“iptables 服务”方式管理,Debian 官方更常用 netfilter-persistent 或手工脚本持久化。
三 常用维护命令
- 查看规则与计数器:
sudo iptables -L -n -v
- 临时清空规则(谨慎):
sudo iptables -F
- 保存当前运行规则:
sudo iptables-save > /etc/iptables/rules.v4
- 从文件恢复规则:
sudo iptables-restore < /etc/iptables/rules.v4
- 持久化保存/重载(使用 netfilter-persistent):
sudo netfilter-persistent save
sudo netfilter-persistent restart
- 如需重启防火墙逻辑:
sudo systemctl restart netfilter-persistent。
四 安全与排错建议
- 远程操作务必先放行 SSH(如端口 22/TCP),再设置默认丢弃;必要时在本地控制台或带外管理可用时再收紧策略。
- 变更前备份规则:
sudo iptables-save > /root/iptables-$(date +%F).bak
- 需要放行 ICMP(ping)可添加:
sudo iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
- 若使用 firewalld/ufw 等其他前端,请避免与 iptables 规则混用,以免策略冲突。