简介
Linux下的包过滤防火墙。可以完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
规则
规则定义为:如果数据包头符合这样的条件,就这样处理这个数据包。
规则存储在内核空间的信息包过滤表中。这些规则分别指定了源地址、目的地址、传输协议和服务类型等。等数据包与规则匹配时,iptables就根据规则所定义的方法来处理数据包:accept、reject、drop
iptables是Linux防火墙的管理工具,位于sbin/iptables
,实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内部结构。
iptables传输数据包的过程
- 数据包进入网卡,进入prerouting链,根据数据包目的ip【判断是否需要传送出去】
- 数据包是进入本机的,到达input链。到达input链后,任何进程都会收到它。【本机上运行的程序可以发送数据包】,这些数据包会经过output链,【到达postrouting链输出】】
- 数据包如果是要转发,会经过forward链,到达postrouting链输出。
iptables的规则表和链
四个内置表:filter(包过滤)、nat(网路地址转换)、mangle(包重构、修改)、raw(数据跟踪处理)
表的优先顺序: raw > mangle > nat > filter
链:数据包传播的路径,每一条链就是众多规则中的一个检测清单。每一条链中可以有一条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查。满足,则按规定定义的方法处理包。不满足就检查下一条规则。如果数据包不满足链中任何一条规则,则会根据预定义的默认规则处理。
表对应的链:
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
规则链
1.INPUT——进来的数据包应用此规则链中的策略
2.OUTPUT——外出的数据包应用此规则链中的策略
3.FORWARD——转发数据包时应用此规则链中的策略
4.PREROUTING——对数据包作路由选择前应用此链中的规则
(记住!所有的数据包进来的时侯都先由这个链处理)
5.POSTROUTING——对数据包作路由选择后应用此链中的规则
(所有的数据包出来的时侯都先由这个链处理)
数据流向
入站数据流向
先被prerouting规则链处理、然后路由选择。
数据包目标主机是防火墙本机,则传给input链处理。(比如网络用户访问防火墙主机中的web服务)
通过后,交给系统上层应用程序进行响应(比如交给apache服务器)
转发数据流向
先被prerouting规则链处理、然后路由选择。
数据包目标地址是其他外部网络,则传给forward链处理(比如局域网用户通过网关访问QQ站点的数据包)(处理:转发或拦截)
交给postrouting规则链,进行处理(是否修改数据包的地址等)
出站数据流向
- 防火墙本机向外部地址发数据包,先被output链处理(比如防火墙主机测试公网DNS服务器时)
- 然后路由选择
- 最后传递给postrouting链