R / Richie全部文章 ↑

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 — 拒绝并回 ICMP
  • LOG — 记录后继续

实战:白名单起步

# 清空
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 看翻译结果

参考