简介

Linux下的包过滤防火墙。可以完成封包过滤、封包重定向和网络地址转换(NAT)等功能。

规则

规则定义为:如果数据包头符合这样的条件,就这样处理这个数据包。

规则存储在内核空间的信息包过滤表中。这些规则分别指定了源地址、目的地址、传输协议和服务类型等。等数据包与规则匹配时,iptables就根据规则所定义的方法来处理数据包:accept、reject、drop


iptables是Linux防火墙的管理工具,位于sbin/iptables,实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内部结构。

iptables传输数据包的过程

  1. 数据包进入网卡,进入prerouting链,根据数据包目的ip【判断是否需要传送出去】
  2. 数据包是进入本机的,到达input链。到达input链后,任何进程都会收到它。【本机上运行的程序可以发送数据包】,这些数据包会经过output链,【到达postrouting链输出】】
  3. 数据包如果是要转发,会经过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——对数据包作路由选择后应用此链中的规则

(所有的数据包出来的时侯都先由这个链处理)

数据流向

入站数据流向

  1. 先被prerouting规则链处理、然后路由选择。

  2. 数据包目标主机是防火墙本机,则传给input链处理。(比如网络用户访问防火墙主机中的web服务)

  3. 通过后,交给系统上层应用程序进行响应(比如交给apache服务器)


转发数据流向

  1. 先被prerouting规则链处理、然后路由选择。

  2. 数据包目标地址是其他外部网络,则传给forward链处理(比如局域网用户通过网关访问QQ站点的数据包)(处理:转发或拦截)

  3. 交给postrouting规则链,进行处理(是否修改数据包的地址等)


出站数据流向

  1. 防火墙本机向外部地址发数据包,先被output链处理(比如防火墙主机测试公网DNS服务器时)
  2. 然后路由选择
  3. 最后传递给postrouting链

参考文章

iptables详解以及常用规则

评论