温馨提示×

Debian iptables如何设置规则

小樊
43
2026-07-29 17:36:09
栏目: 智能运维

在 Debian 系统中,iptables 是常用的防火墙工具。下面从基础概念 → 常用操作 → 示例规则 → 持久化保存几个方面说明如何设置 iptables 规则。


一、iptables 基本概念

iptables 由 表(tables)链(chains) 组成:

常见表

表名 作用
filter 默认表,用于过滤数据包
nat 网络地址转换(NAT)
mangle 修改数据包
raw 连接跟踪

常用链

链名 含义
INPUT 进入本机的数据包
OUTPUT 本机发出的数据包
FORWARD 转发的数据包

二、查看当前规则

iptables -L -n -v

查看指定表:

iptables -t nat -L -n -v

三、基本规则设置

1️⃣ 设置默认策略(非常推荐)

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

含义:

  • 入站默认拒绝
  • 转发默认拒绝
  • 出站默认允许

⚠️ 注意:设置 DROP 前,确保已允许 SSH,否则可能断连。


2️⃣ 允许本地回环接口

iptables -A INPUT -i lo -j ACCEPT

3️⃣ 允许已建立的和相关的连接

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

4️⃣ 允许 SSH(非常重要)

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

✅ 建议限制 IP:

iptables -A INPUT -p tcp -s 1.2.3.4 --dport 22 -j ACCEPT

5️⃣ 允许 HTTP / HTTPS

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

6️⃣ 允许 ping(ICMP)

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

四、删除 / 插入规则

删除某条规则

iptables -D INPUT -p tcp --dport 22 -j ACCEPT

按编号删除

iptables -L INPUT --line-numbers
iptables -D INPUT 3

插入规则(放到最前面)

iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT

五、NAT 示例(共享上网)

开启 IP 转发

echo 1 > /proc/sys/net/ipv4/ip_forward

SNAT(固定公网 IP)

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 1.2.3.4

MASQUERADE(动态 IP,如拨号)

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

六、清空所有规则(慎用)

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

七、iptables 规则持久化(非常重要)

Debian 重启后规则会丢失,需要保存。

方法一:使用 iptables-persistent(推荐)

安装

apt update
apt install iptables-persistent

保存规则

netfilter-persistent save

规则保存在:

/etc/iptables/rules.v4
/etc/iptables/rules.v6

恢复规则

netfilter-persistent reload

八、一个常见安全规则示例(推荐)

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

九、建议

  • Debian 10+ 可同时考虑 nftables(iptables 的替代)
  • 云服务器务必先放行 SSH 再改规则
  • 测试环境可先用 iptables -P INPUT ACCEPT

如果你愿意,我可以: ✅ 帮你写一套 生产服务器 iptables 规则 ✅ 帮你 迁移到 nftables ✅ 针对 Docker / K8s / 内网 NAT 场景配置

只要告诉我你的使用场景即可。

0