54 iptables

netfilter与iptables

Netfilter是由Rusty Russell提出的Linux 2.4内核防火墙框架,该框架既简洁又灵活,可实现安全策略应用中的许多功能,如数据包过滤、数据包处理、地址伪装、透明代理、动态网络地址转换(Network Address Translation,NAT),以及基于用户及媒体访问控制(Media Access Control,MAC)地址的过滤和基于状态的过滤、包速率限制等。Iptables/Netfilter的这些规则可以通过灵活组合,形成非常多的功能、涵盖各个方面,这一切都得益于它的优秀设计思想。

Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:

  • 网络地址转换(Network Address Translate)
  • 数据包内容修改
  • 以及数据包过滤的防火墙功能

Netfilter平台中制定了数据包的五个挂载点(Hook Point,可以理解为回调函数点。数据包到达这些位置会主动调用我们的函数,使我们有机会能在数据包路由的时候改变它们的方向和内容),这个5个挂载点分别是PRE_ROUTING,INPUT,OUTPUT, FORWARD,POST_ROUTING。

Netfilter所设置的规则是存放在内核内存中的,而iptables是一个应用层的应用程序,它通过Netfilter放出来的接口来对存放在内核中的XXtables(Netfilter配置表)进行修改。这个XXtables由表tables、链chains
、规则rules组成,iptables在应用层负责修改这个规则文件。

iptables

在描述 iptables 的各种功能之前,先看一张 iptables 的网络图:

54 iptables_第1张图片
Paste_Image.png
iptables 的数据流走向
  1. 一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转发出去。

  2. 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经 过OUTPUT链,然后到达POSTROUTING链输出。

  3. 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过 FORWARD链,然后到达POSTROUTING链输出。

规则、表和链
  1. 规则(rules)

规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。

  1. 链(chains)
    链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。

  2. 表(tables)
    表(tables)提供特定的功能,iptables内置了4个表,即raw表、filter表、nat表和mangle表,分别用于实现包过滤,网络地址转换和包重构的功能。

  3. filter表
    主要用于对数据包进行过滤,根据具体规则决定是否放行该数据包(如DROP/ACCEPT/REJECT/LOG)。filter表对应的内核模块为iptable_filter,包含三个规则链:
    1)INPUT链:INPUT针对哪些目的地是本地的包
    2 )FORWARD链:FORWARD过滤所有不是本地产生的 并且目的地不是本地(即本机只负责转发)的包
    3)OUTPUT链:OUTPUT是用来过滤所有本地生成的包

  4. nat 表
    主要用于修改数据包的IP地址、端口号等信息(网络地址转换,如SNAT、DNAT、MASQUERADE、REDIRECT)。属于一个流的包只会经过这个表一次。如果第一个包被允许经做NAT或Masqueraded,那么余下的包会自动被做相同的动作,也就是说,余下的包不会再通过这个表(因为包的大小限制导致数据可能会自动地做相同的操作)。表对应的内核模块为iptable_nat,包含三个链:
    1)PREROUTING链:作用是在包刚刚到达防火墙时改变它的目的地址
    2 )OUTPUT链:改变本地产生的包的目的地址
    3 )POSTROUTING链:在包就要离开防火墙之前改变其源地址

  5. mange表:
    主要用于修改数据包的TOS、TTL以及为数据包设置Mark标记,以实现Qos(Quality Of Service,服务质量)调整以及策略路由等应用,由于需要相应的路由设备支持,因此应用并不广泛。包含五个规则链——PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD。

  6. raw表
    主要用于决定数据包是否被状态跟踪机制处理。在匹配数据包时,raw表的规则要优先于其他表。包含两条规则链–OUTPUT、PREROUTING。

规则表之间的优先顺序
Raw——mangle——nat——filter

54 iptables_第2张图片
Paste_Image.png

你可能感兴趣的:(54 iptables)