Linux · 3 分钟阅读
iptables 基础
2026 年现状:nftables 已成 Linux 主线默认,
iptables仍能用(多数发行版做了兼容 shim),新规则推荐直接写 nft。Kubernetes / 容器场景下基本被 Cilium / Calico 替代。
防火墙分类
| 类别 | 工作层 | 特点 |
|---|---|---|
| 包过滤(L3/L4) | 网络层 | 处理快,基于 IP/端口 |
| 应用层(L7) | 应用层 | 能识别协议内容,灵活但慢 |
iptables 是 L3/L4 包过滤,挂在 Linux netfilter 框架上。
netfilter 钩子点
PREROUTING → INPUT → 本机进程
↓
FORWARD
↓
PREROUTING → OUTPUT → POSTROUTING
| 钩子 | 时机 |
|---|---|
PREROUTING |
包进入路由前 |
INPUT |
流入本机进程 |
FORWARD |
转发 |
OUTPUT |
本机发出 |
POSTROUTING |
离开路由后 |
表与链
| 表 | 用途 | 常用链 |
|---|---|---|
filter |
过滤(默认) | INPUT / FORWARD / OUTPUT |
nat |
地址转换 | PREROUTING / OUTPUT / POSTROUTING |
mangle |
改包 | 全部 |
raw |
关闭连接跟踪 | PREROUTING / OUTPUT |
匹配顺序:raw → mangle → nat → filter,链内规则从上到下。
动作
ACCEPT— 放行DROP— 静默丢弃REJECT— 拒绝并回 ICMPLOG— 记录后继续
实战:白名单起步
# 清空
iptables -F
# 默认策略
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
# 业务端口
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
防 DDoS(粗粒度)
iptables -A INPUT -p tcp --syn -m connlimit --connlimit-above 50 -j DROP
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
持久化
# RHEL / Alma
yum install -y iptables-services
systemctl enable --now iptables
iptables-save > /etc/sysconfig/iptables
# Debian / Ubuntu
apt install -y iptables-persistent
netfilter-persistent save
一些经验
- 改规则前先开一个长 ping/tail 日志——把自己挡在外面就完了
- 默认策略
INPUT DROP+ 显式放行比ACCEPT加黑名单安全 - 多用
-m comment --comment "..."给规则加注释 - 切到 nftables 时先
iptables-translate看翻译结果