iptables中的四表五链问题
【摘要】 iptables 作为 Linux 系统中经典的防火墙工具,其核心逻辑围绕 “四表五链” 展开 —— 表定义规则的功能维度,链定义规则的执行时机,二者结合构成 Linux 内核层的数据包过滤体系。本文从底层原理、四表五链核心逻辑、规则匹配流程到企业级实战配置,全方位拆解 iptables 的核心架构,帮助运维人员掌握高可用场景下的防火墙配置思路。一、iptables 核心本质:内核态的数据包...
iptables 作为 Linux 系统中经典的防火墙工具,其核心逻辑围绕 “四表五链” 展开 —— 表定义规则的功能维度,链定义规则的执行时机,二者结合构成 Linux 内核层的数据包过滤体系。本文从底层原理、四表五链核心逻辑、规则匹配流程到企业级实战配置,全方位拆解 iptables 的核心架构,帮助运维人员掌握高可用场景下的防火墙配置思路。
一、iptables 核心本质:内核态的数据包处理框架
iptables 并非独立的防火墙程序,而是 Linux 内核 netfilter 子系统的用户态管理工具 —— 所有防火墙规则最终会被加载到内核空间,对进出服务器的数据包进行 “过滤、修改、转发” 等操作。其核心设计逻辑是:通过 “表” 分类规则功能,通过 “链” 定位规则执行时机,数据包流经内核网络栈时,会按预设的链顺序匹配规则,最终执行 “允许(ACCEPT)、拒绝(DROP)、转发(FORWARD)” 等动作。
二、iptables 四表:规则的功能分类维度
表(Table)是 iptables 对规则功能的逻辑划分,不同表对应不同的数据包处理能力,优先级从高到低为:
raw → mangle → nat → filter。1. raw 表:禁用连接追踪(最高优先级)
- 核心作用:控制数据包的连接追踪机制(conntrack),仅在数据包进入内核时生效,可跳过后续的连接状态跟踪,提升高性能服务器(如高并发电商服务)的网络处理效率。
- 适用场景:DDoS 防护、大流量 UDP 服务(如视频流)、需要禁用连接追踪的场景。
- 关联链:仅作用于
PREROUTING和OUTPUT链。 - 示例规则:
# 对10.0.0.0/24网段禁用连接追踪,提升转发性能 iptables -t raw -A PREROUTING -s 10.0.0.0/24 -j NOTRACK
2. mangle 表:修改数据包标记 / 属性
- 核心作用:修改数据包的 IP 头信息(如 TOS 字段、TTL、MARK 标记),用于流量整形、QoS(服务质量)控制,不涉及地址转换或过滤。
- 适用场景:带宽限速、数据包标记(供后续路由 / 过滤规则识别)、调整 TTL 避免路由环路。
- 关联链:
PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING(全链路覆盖)。 - 示例规则:
# 给访问80端口的数据包添加MARK标记100,用于后续QoS调度 iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 100
3. nat 表:网络地址转换
- 核心作用:修改数据包的源 / 目的 IP 地址或端口,实现 SNAT(源地址转换,如内网访问外网)、DNAT(目的地址转换,如外网访问内网服务)、端口映射。
- 适用场景:服务器多网卡转发、内网服务对外暴露、网关 NAT 转发(如企业出口网关)。
- 关联链:
PREROUTING:修改入站数据包的目的地址(DNAT);POSTROUTING:修改出站数据包的源地址(SNAT);OUTPUT:修改本机发起的数据包的目的地址。
- 示例规则:
# SNAT:内网192.168.1.0/24通过eth0出口访问外网,转换为网关公网IP iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.10 # DNAT:外网访问公网8080端口,转发到内网192.168.1.100的80端口 iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
4. filter 表:数据包过滤(最常用)
- 核心作用:默认表(不指定 - t 时默认操作此表),负责数据包的允许 / 拒绝 / 转发,是服务器防火墙的核心表。
- 适用场景:端口访问控制、IP 黑白名单、服务访问限制(如仅允许指定 IP 访问 SSH)。
- 关联链:
INPUT:处理进入本机的数据包(如外网访问本机 80 端口);FORWARD:处理本机转发的数据包(如网关服务器转发内网数据包);OUTPUT:处理本机发起的数据包(如本机访问外网 80 端口)。
- 示例规则:
# 允许本机回环地址通信 iptables -t filter -A INPUT -i lo -j ACCEPT # 拒绝192.168.1.200访问本机22端口(SSH) iptables -t filter -A INPUT -s 192.168.1.200 -p tcp --dport 22 -j DROP
三、iptables 五链:规则的执行时机维度
链(Chain)是数据包在内核网络栈中流经的 “检查点”,不同链对应数据包处理的不同阶段,规则按顺序匹配,一旦匹配到某条规则即执行对应动作(除非规则指定
CONTINUE)。1. PREROUTING(路由前)
- 执行时机:数据包进入内核后,先经过此链(尚未进行路由决策,即未判断数据包是发给本机还是转发)。
- 核心作用:修改目的地址(DNAT)、禁用连接追踪、修改数据包标记。
- 关联表:raw、mangle、nat。
- 典型场景:外网访问内网服务的端口映射(DNAT)、对入站数据包做标记。
2. INPUT(入站)
- 执行时机:路由决策后,确定数据包发给本机时执行。
- 核心作用:过滤进入本机的数据包(如控制哪些 IP 可访问本机端口)。
- 关联表:mangle、filter(核心)。
- 典型场景:限制 SSH / 数据库端口的访问 IP、允许本机接收 80/443 端口的 HTTP 请求。
3. FORWARD(转发)
- 执行时机:路由决策后,确定数据包需要通过本机转发时执行(仅网关 / 路由器服务器生效)。
- 核心作用:过滤转发的数据包,控制内网之间 / 内网与外网的转发规则。
- 关联表:mangle、filter(核心)。
- 典型场景:禁止内网 192.168.1.0/24 访问外网特定 IP、允许转发 HTTP 数据包。
4. OUTPUT(出站)
- 执行时机:本机发起的数据包(如应用访问外网),在离开本机前执行。
- 核心作用:过滤本机发起的数据包、修改本机发起数据包的目的地址。
- 关联表:raw、mangle、nat、filter。
- 典型场景:禁止本机访问外网恶意 IP、修改本机发起数据包的端口。
5. POSTROUTING(路由后)
- 执行时机:数据包即将离开本机时执行(最后一个检查点)。
- 核心作用:修改源地址(SNAT)、完成地址转换的最终步骤。
- 关联表:mangle、nat(核心)。
- 典型场景:内网服务器通过网关访问外网时,转换为网关公网 IP。
四、四表五链的核心匹配流程
数据包流经 iptables 的完整路径(以外网访问本机 80 端口为例):
- 数据包进入网卡 → 经过
PREROUTING链(raw→mangle→nat 表),完成 DNAT / 标记等操作; - 内核进行路由决策:确定数据包发给本机 → 进入
INPUT链(mangle→filter 表),匹配过滤规则(如允许 80 端口访问); - 本机处理数据包后,若需响应 → 发起出站数据包,经过
OUTPUT链(raw→mangle→nat→filter 表); - 响应数据包离开本机前,经过
POSTROUTING链(mangle→nat 表),完成 SNAT 等操作 → 离开网卡。
转发场景补充:若数据包需转发(如网关服务器),步骤 2 后进入
FORWARD链(mangle→filter 表),再经过POSTROUTING链。五、企业级实战:四表五链的组合配置
场景 1:电商服务器基础防火墙配置(filter 表核心)
需求:仅允许 22(SSH)、80(HTTP)、443(HTTPS)端口访问,拒绝其他所有端口,允许本机出站请求。
# 清空现有规则
iptables -F
iptables -X
# 设置默认策略(拒绝入站,允许出站)
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
# 允许回环地址
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立连接的入站数据包(响应本机请求)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许22端口(仅指定IP段访问)
iptables -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j ACCEPT
# 允许80/443端口全网访问
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
场景 2:网关服务器 NAT 转发(nat+filter 表组合)
需求:内网 192.168.1.0/24 通过网关(eth0:公网 203.0.113.10,eth1:内网 192.168.1.1)访问外网,同时将外网 8080 端口转发到内网 192.168.1.100 的 80 端口。
# 开启内核转发
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-source 203.0.113.10
# DNAT:外网8080端口转发到内网192.168.1.100:80
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
# filter表允许转发
iptables -A FORWARD -s 192.168.1.0/24 -o eth0 -j ACCEPT
iptables -A FORWARD -d 192.168.1.100 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
场景 3:高并发服务优化(raw 表禁用连接追踪)
需求:电商秒杀场景下,UDP 大流量服务(如直播弹幕)需禁用连接追踪,提升性能。
# raw表禁用10.0.0.0/24网段的连接追踪
iptables -t raw -A PREROUTING -s 10.0.0.0/24 -p udp --dport 5000 -j NOTRACK
iptables -t raw -A OUTPUT -d 10.0.0.0/24 -p udp --sport 5000 -j NOTRACK
# filter表允许该端口访问
iptables -A INPUT -p udp --dport 5000 -j ACCEPT
六、关键注意事项
- 规则顺序:iptables 规则按 “从上到下” 匹配,优先级高的规则(如 IP 黑白名单)需放在前面;
- 默认策略:
DROP与REJECT的区别 ——DROP直接丢弃数据包(无响应),REJECT拒绝并返回错误包(适合需要明确告知客户端的场景); - 连接状态:
-m state --state ESTABLISHED,RELATED是核心优化,避免重复匹配已建立连接的数据包; - 持久化规则:CentOS 7/8 需通过
iptables-save > /etc/sysconfig/iptables保存规则,避免重启失效。
总结
iptables 的四表五链是 Linux 防火墙的核心骨架:表划分 “做什么”(过滤、转换、修改),链定义 “什么时候做”(路由前、入站、转发等)。掌握二者的匹配逻辑,可灵活应对企业级场景中的端口控制、NAT 转发、性能优化等需求。在实际运维中,需结合业务场景(如电商高并发、网关转发、安全防护),优先使用 filter 表做基础过滤,nat 表做地址转换,raw/mangle 表做性能 / 标记优化,构建分层的防火墙规则体系。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)