iptables–基础–01–理论
1、简介
- netfilter/iptables 简称 iptables
- iptables组成Linux平台下的包过滤防火墙,可以完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
2、规则
- 规则(rules)就是网络管理员预定义的条件
- 规则存储在内核空间的信息包过滤表中
- 配置防火墙的主要工作就是添加、修改和删除这些规则。
2.1、规则定义
- 一般定义为"如果数据包头符合这样的条件,就这样处理这个数据包"。
- 规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)
2.2、数据包处理
当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。
2、iptables和netfilter的关系
iptables是Linux防火墙的管理工具,位于/sbin/iptables。真正实现防火墙功能的是 netfilter,它是Linux内核中实现包过滤的内部结构。
3、iptables传输数据包的过程
- 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
- 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。
- 数据包到了INPUT链后,任何进程都会收到它。
- 本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
- 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。
4、iptables的规则表和链
4.1、规则表
- filter表:用于实现包过滤
- nat表:用于网络地址转换
- mangle表:用于包重构(修改)
- raw表:用于数据跟踪处理。
4.2、链(chains)
- 链是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单.
- 每一条链中可以有1条或多条规则。
4.2.1、链的工作流程
- 当一个数据包到达一个链时,iptables就会从链中第1条规则开始检查,看该数据包是否满足规则所定义的条件。
- 满足:
- 根据该条规则所定义的方法处理该数据包
- 不满足:
- iptables将继续检查下一条规则
- 满足:
- 如果数据包不符合链中任一条规则,就会根据该链预先定义的默认规则来处理数据包。
4.3、四张表和五个链
4.3.1、规则表
- filter表
- 三个链:INPUT、FORWARD、OUTPUT
- 作用:过滤数据包
- 内核模块:iptables_filter
- Nat表
- 三个链:PREROUTING、POSTROUTING、OUTPUT
- 作用:用于网络地址转换(IP、端口)
- 内核模块:iptable_nat
- Mangle表
- 五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
- 作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS
- 内核模块:iptable_mangle
- Raw表
- 两个链:OUTPUT、PREROUTING
- 作用:决定数据包是否被状态跟踪机制处理
- 内核模块:iptable_raw
4.3.2、规则链
- INPUT:
- 处理来自外部的数据
- OUTPUT:
- 处理向外发送的数据
- FORWARD:
- 将数据转发到本机的其他网卡设备上。
- PREROUTING:
- 处理刚到达本机并在路由转发前的数据包。
- 它会转换数据包中的目标IP地址(destination ip address)
- 通常用于DNAT(destination NAT)。
- POSTROUTING:
- 处理即将离开本机的数据包
- 它会转换数据包中的源IP地址(source ip address)
- 通常用于SNAT(source NAT)
4.4、规则表之间的优先顺序
Raw–>mangle–>nat–>filter
4.5、规则链之间的优先顺序
分三种情况
- 入站数据流向
- 转发数据流向
- 出站数据流向
4.5.1、入站数据流向
第1步
从外界到达防火墙的数据包,先被PREROUTING规则链处理
1. 是否修改数据包的服务类型、TTL、是否配置路由实现QOS
2. 是否网络地址转换
3. 是否被状态跟踪机制处理
第2步
数据会进行路由选择,判断该数据包应该发往何处
- 如果数据包的目标主机是防火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理
- INPUT链 决定 数据包 是否允许通过
第3步
INPUT链允许通过以后,再交给系统上层的应用程序(比如Apache服务器)进行响应。
4.5.2、转发数据流向
第1步
来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理
第2步
数据会进行路由选择,判断该数据包应该发往何处
- 如果数据包的目标地址是其它外部地址(局域网用户通过网关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理
- FORWARD链 决定数据包 是否转发或拦截处理
第3步
FORWARD链进行处理后,再交给POSTROUTING规则链进行处理。
- POSTROUTING链 决定数据包 是否修改数据包的地址等
4.5.3、出站数据流向
第1步
防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理
第2步
数据包进行路由选择,然后传递给POSTROUTING规则链进行处理。
- POSTROUTING链 决定 是否修改数据包的地址