iptables 过滤过程理解(四表五链)

参考

浅析

netfilter/iptables

netfilter 是内核的一个子系统,其工作在内核空间,核心是一个报文过滤架构,它包含了一组分布在报文处理各个阶段的钩子函数,报文经过网络协议栈时进入 netfilter 处理架构,会调用其他模块在各个阶段注册的钩子函数,并返回处理结果,netfilter 根据返回结果进行不同的处理。

报文处理的五个不同阶段:

  • (1)pre-routing: 经过 ip 合法性检查的报文
  • (2)local-input: 经过选路后,目的地址指向本机的报文
  • (3)forward: 经过选路需要转发出去的报文
  • (4)local-output: 从本协议栈发送出去的报文
  • (5)post-routing: 经过选路后需要转发出去的报文,最终送给这个钩子函数处理

iptables 工作在用户空间,用于设置、维护和检查信息包的过滤规则,其是一个与 netfilter 子系统交互的工具,它使插入、修改和除去信息包过滤表中的规则变得容易。由于在使用过程中通常只接触 iptables 这个命令工具,所以通常所说的 iptables 即指 netfilter 子系统与 iptables 工具组成的信息包过滤系统。

四表五链工作流程

在这里插入图片描述

所以,根据上图,我们能够想象出某些常用场景中,报文的流向:

  • 到本机某进程的报文:PREROUTING –> INPUT

  • 由本机转发的报文:PREROUTING –> FORWARD –> POSTROUTING

  • 由本机的某进程发出报文(通常为响应报文):OUTPUT –> POSTROUTING

五链含有哪些表(链表对应关系)

在这里插入图片描述

链的规则存放于哪些表中(从链到表的对应关系):

  • PREROUTING 的规则可以存在于:raw表,mangle表,nat表。

  • INPUT 的规则可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)。

  • FORWARD 的规则可以存在于:mangle表,filter表。

  • OUTPUT 的规则可以存在于:raw表mangle表,nat表,filter表。

  • POSTROUTING 的规则可以存在于:mangle表,nat表。

四表含有哪些链(表链对应关系)

img

表中的规则可以被哪些链使用(从表到链的对应关系):

  • raw 表中的规则可以被哪些链使用:PREROUTING,OUTPUT

  • mangle 表中的规则可以被哪些链使用:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

  • nat 表中的规则可以被哪些链使用:PREROUTING,OUTPUT,POSTROUTING(centos7中还有INPUT,centos6中没有)

  • filter 表中的规则可以被哪些链使用:INPUT,FORWARD,OUTPUT

规则的处理动作

处理动作(target) 也分为基本动作和扩展动作。以下列举一些常用的动作:

  • ACCEPT: 允许数据包通过
  • DROP: 直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应
  • QUEUE: 将数据包移交到用户空间
  • RETURN: 停止执行当前链中的后续规则,并返回到调用链(The Calling Chain)中
  • REJECT: 拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息
  • DNAT: 目标地址转换
  • SNAT: 源地址转换,解决内网用户用同一个公网地址上网的问题
  • MASQUERADE: 是 SNAT 的一种特殊形式,适用于动态的、临时会变的 ip 上
  • REDIRECT: 在本机做端口映射
  • LOG: 记录日志信息,除记录外不对数据包做任何其他操作,仍然匹配下一条规则

原理

iptables 是 Linux 系统上的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器,则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤,其可以说是 Linux 的网络防火墙。广义上的 iptables 实际上是由 netfilteriptables 两个组件组成。而狭义上的 iptables 是指一个命令行工具,用于配置管理信息包的过滤规则。真正起到信息包过滤作用的是 netfilter 组件。

netfilter/iptables

netfilter 是内核的一个子系统,其工作在内核空间,核心是一个报文过滤架构,它包含了一组分布在报文处理各个阶段的钩子函数,报文经过网络协议栈时进入 netfilter 处理架构,会调用其他模块在各个阶段注册的钩子函数,并返回处理结果,netfilter 根据返回结果进行不同的处理。

报文处理的五个不同阶段:

  • (1)pre-routing: 经过 ip 合法性检查的报文
  • (2)local-input: 经过选路后,目的地址指向本机的报文
  • (3)forward: 经过选路需要转发出去的报文
  • (4)local-output: 从本协议栈发送出去的报文
  • (5)post-routing: 经过选路后需要转发出去的报文,最终送给这个钩子函数处理

iptables 工作在用户空间,用于设置、维护和检查信息包的过滤规则,其是一个与 netfilter 子系统交互的工具,它使插入、修改和除去信息包过滤表中的规则变得容易。由于在使用过程中通常只接触 iptables 这个命令工具,所以通常所说的 iptables 即指 netfilter 子系统与 iptables 工具组成的信息包过滤系统。

表/链/规则

使用 iptables 需要先理解表(table)、链(chain)、规则(rule)这三个概念。netfilter/iptables 系统可以理解成是 的容器,这也是它被称为 iptables 的原因,而表则是 的容器,即所有的链都属于其对应的表,链又是 规则 的容器。

表(tables)

iptables 大致有 raw, filter, nat, mangle, security 等五类表,常用的表有 filter、nat、mangle 三个表。

  • raw 表: 用于配置数据包,raw 中的数据包不会被系统跟踪。其优先级最高,设置 raw 时一般是为了不再让 iptables 做数据包的链接跟踪处理,提高性能
  • filter 表: 为 iptables 默认的表,在操作时如果没有指定使用哪个表,iptables 默认使用 filter 表来执行所有的命令。filter 表根据预定义的一组规则过滤符合条件的数据包。在 filter 表中只允许对数据包进行接收、丢弃的操作,而无法对数据包进行更改
  • nat 表: 即 Network Address Translation,主要是用于网络地址转换(例如:端口转发),该表可以实现一对一、一对多、多对多等 NAT 工作
  • mangle 表: 主要用于对指定包的传输特性进行修改。某些特殊应用可能需要改写数据包的一些传输特性,例如更改数据包的 TTL 和 TOS 等
  • security 表: 用于强制访问控制网络规则(例如: SELinux)

在大多数使用情况下都不会用到 raw 和 security 表,而 filter 和 nat 表则是会常用到的,mangle 表次之。

链(chains)

链(chains)是数据包传输的路径,对应着前面提到的报文处理的五个阶段,也相当于是五个不同的关卡:

  • INPUT: 处理入站数据包,当接收到访问本机地址的数据包(入站)时,应用此链中的规则
  • OUTPUT: 处理出站数据包,当本机向外发送数据包(出站)时,应用此链中的规则
  • FORWARD: 处理转发数据包,当接收到需要通过本机发送给其他地址的数据包(转发)时,应用此链中的规则
  • PREROUTING: 在对数据包作路由选择之前,应用此链中的规则
  • POSTROUTING: 在对数据包作路由选择之后,应用此链中的规则

链是规则的容器,一条链中可能包含着众多的规则,当一个数据包到达一个链时,iptables 就会从链中第一条规则开始匹配,如果满足该规则的条件,系统就会根据该条规则所定义的方法处理该数据包,否则将继续匹配下一条规则,如果该数据包不符合链中任一条规则,iptables 就会根据该链预先定义的默认策略来处理数据包。

INPUT, OUTPUT 链更多的应用在本机的网络控制中,即主要针对本机进出数据的安全控制。而 FORWARD, PREROUTING, POSTROUTING 链更多地应用在对我的网络控制中,特别是机器作为网关使用时的情况。

表是链的容器,不同的表中包含着不同的链:

Filter 表 是 iptables 的默认表,因此如果没有指定表,那么默认操作的是 filter 表,其包含以下三种内建链:

  • INPUT 链 – 处理来自外部的数据
  • OUTPUT 链 – 处理向外发送的数据
  • FORWARD 链 – 将数据转发到本机的其他网卡设备上

NAT 表 包含以下三种内建链:

  • PREROUTING 链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标 IP 地址(destination ip address),通常用于 DNAT(destination NAT)
  • POSTROUTING 链 – 处理即将离开本机的数据包。它会转换数据包中的源 IP 地址(source ip address),通常用于 SNAT(source NAT)
  • OUTPUT 链 – 处理本机产生的数据包

Mangle 表 指定如何处理数据包。它能改变 TCP 头中的 QoS 位。Mangle 表包含五种内建链:PREROUTING, OUTPUT, FORWARD, INPUT, POSTROUTING.

Raw 表 包含两个内建链:PREROUTING, OUTPUT.

规则(rules)

规则(rules)是一些预定义的数据包过滤条件。规则存储在内核空间的信息包过滤表中,数据包每经过一个链(关卡)时,系统会根据链中规则指定的匹配条件来尝试匹配,一旦匹配成功,则由规则后面指定的处理动作进行处理。

规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。

规则由 匹配条件处理动作 组成。匹配条件 又分为 基本匹配条件扩展匹配条件。基本匹配条件如:源地址 Source IP,目标地址 Destination IP;扩展匹配条件通常以模块的形式存在,这些模块可以按需安装,源端口 Source Port, 目标端口 Destination Port。

处理动作(target) 也分为基本动作和扩展动作。以下列举一些常用的动作:

  • ACCEPT: 允许数据包通过
  • DROP: 直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应
  • QUEUE: 将数据包移交到用户空间
  • RETURN: 停止执行当前链中的后续规则,并返回到调用链(The Calling Chain)中
  • REJECT: 拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息
  • DNAT: 目标地址转换
  • SNAT: 源地址转换,解决内网用户用同一个公网地址上网的问题
  • MASQUERADE: 是 SNAT 的一种特殊形式,适用于动态的、临时会变的 ip 上
  • REDIRECT: 在本机做端口映射
  • LOG: 记录日志信息,除记录外不对数据包做任何其他操作,仍然匹配下一条规则

由此,已知 tables 由 chains 组成,而 chains 又由 rules 组成。常用的表有 filter、nat、mangle 三种,链有五种,对应报文处理的五个阶段。对规则理解的关键则需记住以下三点:

  • 1、一条规则包括一个条件和一个动作(target)
  • 2、如果满足条件,就执行处理动作
  • 3、如果不满足条件,就继续匹配下一条规则

几个常用表单的优先级顺序是 mangle -->nat --> filter.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值