目录
Linux iptables 协议详解文档
1. iptables 概述
iptables 是 Linux 系统基于内核 netfilter 框架实现的防火墙工具,工作于用户空间,用于管理网络数据包的过滤、转发与地址转换等操作。它通过定义规则,对进入、流出或经过系统的数据包执行允许、拒绝、丢弃等动作,是 Linux 系统网络安全防护的核心工具。
iptables 仅支持 IPv4 协议,核心功能包括:数据包过滤(如限制特定 IP、端口的访问)、网络地址转换(NAT,如端口转发、IP 伪装)、数据包标记与修改等,可灵活适配个人主机、服务器及路由器等不同场景的网络安全需求。
1.1netfilter/iptables关系
netfilter:属于“内核态”又称内核空间(kernel space)的防火墙功能体系。
是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables :属于“用户态”(User Space, 又称为用户空间)的防火墙管理体系。是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables目录下。netfilter/iptables后期简称为iptables。iptables是基于内核的防火墙,其中内置了raw、mangle、 nat和filter四个规则表。表中所有规则配置后,立即生效,不需要重启服务。
2. iptables 的四表
iptables 的 “表” 用于分类不同功能的规则,共包含 4 个核心表,各表功能与适用场景明确:
2.1 filter 表
filter 表是最常用的表,专注于数据包过滤,决定是否允许数据包通过,包含 INPUT(处理目标为本机的数据包)、OUTPUT(处理本机发出的数据包)、FORWARD(处理本机转发的数据包)3 条链,是实现基础访问控制的核心表。
2.2 nat 表
nat 表(Network Address Translation)用于网络地址转换,解决内网主机访问外网及外网访问内网服务的地址映射问题,包含 PREROUTING(路由前修改目标地址,如 DNAT 端口转发)、POSTROUTING(路由后修改源地址,如 SNAT IP 伪装)、OUTPUT(修改本机数据包目标地址)3 条链。
2.3 mangle 表
mangle 表用于修改数据包头部信息(如 TTL 值、TOS 字段),或为数据包设置标记(供后续规则匹配),支持 PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING 5 条链,主要用于精细化数据包处理。
2.4 raw 表
raw 表用于控制数据包的连接跟踪,可避免特定数据包被内核连接跟踪机制监控,减少系统资源占用,仅包含 PREROUTING(处理进入本机的数据包)、OUTPUT(处理本机发出的数据包)2 条链,适用于对性能要求高的场景。
3. iptables 的五链
iptables 的 “链” 是数据包在网络协议栈中经过的预设处理节点,共 5 条核心链,对应数据包流转的不同阶段:
3.1 PREROUTING 链
数据包刚进入本机,尚未进行路由判断(未确定是发给本机还是转发)时触发,主要用于 nat 表的 DNAT(修改目标地址)和 mangle 表的数据包头部修改。
3.2 INPUT 链
数据包经过路由判断后,确定目标为本机时触发,属于 filter 表的核心链,用于控制是否允许外部数据包进入本机(如允许 SSH、Web 服务端口的访问)。
3.3 FORWARD 链
数据包经过路由判断后,确定需转发至其他主机(本机作为路由器)时触发,仅在 filter 表中生效,用于控制是否允许数据包在不同网络间转发。
3.4 OUTPUT 链
本机应用程序生成的数据包即将发送,尚未进行路由判断时触发,可在 filter 表(控制本机发出的数据包)、nat 表(修改目标地址)中配置规则。
3.5 POSTROUTING 链
数据包经过路由判断后,即将离开本机时触发,主要用于 nat 表的 SNAT(修改源地址,如内网主机通过本机 IP 访问外网),也支持 mangle 表的最终数据包修改。
4. 表的优先顺序
当数据包经过某条链时,iptables 会按固定优先级依次检查该链所属的表,优先级从高到低为:
raw 表:最高优先级,先于其他表处理数据包,主要用于关闭连接跟踪,减少后续处理开销。
mangle 表:优先级次之,在 raw 表之后、nat 表之前执行,完成数据包头部修改或标记设置。
nat 表:优先级低于 mangle 表,负责地址转换,确保数据包在路由前 / 后完成地址映射。
filter 表:最低优先级,最后对数据包进行过滤判断(允许 / 拒绝),是网络访问控制的最终环节。
例如,外部访问本机 Web 服务的数据包,会先经过 raw 表 PREROUTING 链,再到 mangle 表 PREROUTING 链,接着到 nat 表 PREROUTING 链,最后进入 filter 表 INPUT 链判断是否允许访问。
5. 数据包匹配顺序
iptables 的数据包匹配遵循 “按规则顺序执行,匹配即停止” 的原则,具体分为链内规则匹配和链间流转匹配:
5.1 链内规则匹配顺序
同一链(如 filter 表 INPUT 链)中的规则按配置顺序排列,数据包从第一条规则开始依次匹配:
- 若数据包满足某条规则的条件(如匹配特定 IP、端口),则执行该规则定义的动作(如 ACCEPT 允许、DROP 丢弃),默认不再检查后续规则。
- 若数据包不匹配所有规则,则执行该链的默认策略(如 INPUT 链默认策略为 DROP,即未匹配规则的数据包被丢弃)。
例如,filter 表 INPUT 链中,第一条规则 “允许 192.168.1.100 访问 22 端口”,第二条规则 “拒绝所有 IP 访问 22 端口”,则 192.168.1.100 的 SSH 连接会匹配第一条规则被允许,其他 IP 的连接会匹配第二条规则被拒绝。
5.2 链间流转匹配顺序
数据包按网络流转路径触发不同链,以常见场景为例:
- 本机接收数据包:PREROUTING 链 → INPUT 链;
- 本机发送数据包:OUTPUT 链 → POSTROUTING 链;
- 本机转发数据包:PREROUTING 链 → FORWARD 链 → POSTROUTING 链。
每个链在流转时,均按 “raw→mangle→nat→filter” 的表优先级检查规则,确保数据包按逻辑流程完成处理。
6. 编写防火墙规则
6.1 iptabes 安装
CentOS7默认使用firewalld防火墙,没有安装iptables,若想使用iptables防火墙。必须先关闭firewalld防火墙,再安装iptables
关闭firewalld防火墙,输入systemctl stop firewalld.service,关闭它

然后安装iptables,然后启动,输入yum -y install iptables iptables-services和systemctl start iptables.service,然后输入systemctl status iptables.service,检查是否开启

这个就是以经开启的状态
6.2 iptabes 语法构成
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
其中,表名、链名用来指定 iptables 命令所操作的表和链,未指定表名时将默认使用 filter 表;
管理选项:表示iptables规则的操作方式,如插入、增加、删除、查看等;
匹配条件:用来指定要处理的数据包的特征,不符合指定条件的数据包将不会处理;
控制类型指的是数据包的处理方式,如允许、拒绝、丢弃等。
6.3 iptabes 常见控制类型
对于防火墙,数据包的控制类型非常关键,直接关系到数据包的放行、封堵及做相应的日志记录等。在 iptables 防火墙体系中,最常用的几种控制类型如下。
ACCEPT:允许数据包通过。
DROP:直接丢弃数据包,不给出任何回应信息。
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息。
LOG:在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则。
SNAT:修改数据包的源地址。
DNAT:修改数据包的目的地址。
MASQUERADE:伪装成一个非固定公网IP地址。
6.4 iptabes 命令的常用管理选项
-A :在指定链末尾追加一条规则
-I :在指定链中插入一条新的规则,未指定序号默认作为第一条 -P:指定默认规则
-D:删除某条规则
-R:修改、替换某一条规则
-L:查看某条链的规则
-n:所有字段以数字形式显示
-v:查看时显示更详细信息,常跟-L一起使用
6.5 iptabes 命令添加新的规则
若要在 filter 表 INPUT 链的末尾添加一条不允许任何主机ping本主机防火墙规则,可以执行以下操作:输入:iptables -t filter -A INPUT -p icmp -j REJECT,其中这些参数分别解释一下
Iptables :Linux 系统中用于配置 IPv4 防火墙规则的工具。
-t filter:-t指定要操作的表,filter是默认的表,用于过滤数据包。如果省略 -t filter,命令默认也会操作 filter表。
-A INPUT:-A表示追加一条规则到指定链的末尾。INPUT是链的名称,表示处理传入本机的数据包
-p icmp:-p指定协议,这里是 ICMP。ICMP 常用于 ping 和 traceroute 等网络诊断工具。
-j REJECT-j指定动作,这里是 REJECT。(拒绝数据包通过,会给数据发送端一个响应信息。)
这条规则会拒绝所有传入的 ICMP 数据包(如 ping 请求),并向发送方返回一个拒绝响应。
然后我们输入命令:iptables -t filter -A INPUT -p icmp -j REJECT

然后输入iptables -vnL,查看是否添加成功

这里显示添加成功了,然后用另一台电脑ping本主机

发现端口不可达,说明这条规则已经添加完成
Linux iptables 协议核心内容总结
iptables 是基于内核 netfilter 框架的用户态防火墙工具,仅支持 IPv4,核心功能包括数据包过滤、网络地址转换(NAT)及数据包标记修改,规则配置后即时生效,无需重启服务。其中,netfilter 属于内核态,负责数据包过滤规则的执行;iptables 属于用户态,提供规则管理的命令接口,运维人员主要关注用户态操作。
iptables 的四表各有明确功能:filter 表是最常用的基础表,专注数据包过滤,含 INPUT、OUTPUT、FORWARD 三链;nat 表用于网络地址转换,解决地址映射问题,含 PREROUTING、POSTROUTING、OUTPUT 三链;mangle 表侧重修改数据包头部信息或设置标记,支持全部五链,适用于精细化处理;raw 表用于控制数据包连接跟踪,仅含 PREROUTING、OUTPUT 两链,可减少高并发场景下的系统资源占用。
五链对应数据包流转的不同阶段:PREROUTING 在数据包进入本机未路由判断时触发;INPUT 在数据包确定目标为本机时触发;FORWARD 在数据包需转发时触发;OUTPUT 在本机数据包待发送未路由判断时触发;POSTROUTING 在数据包待离开本机时触发,各链分别承载不同阶段的规则处理。
表的优先级从高到低为 raw 表、mangle 表、nat 表、filter 表,确保数据包先完成连接跟踪控制、头部修改与地址转换,最后进行过滤判断。数据包匹配遵循 “按序匹配、匹配即停” 原则,链内规则按配置顺序执行,未匹配规则则执行链的默认策略;链间按数据包流转路径触发,本机接收、发送、转发数据包分别对应不同的链间流转顺序,且每个链均按表优先级检查规则,保障处理逻辑的合理性与安全性。
iptables 通过四表五链的结构与明确的优先级、匹配规则,构建了灵活且高效的 Linux 网络安全防护体系,是实现网络访问控制与地址转换的核心工具。
1791

被折叠的 条评论
为什么被折叠?



