Fork me on GitHub

iptables详解

1. 概念

  • 包过滤系统由两个组件 netfilter 和 iptables 组成,netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集;iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。
  • iptables包含4个表,5个链。其中表是按照对数据包的操作区分的,链是按照不同的Hook点来区分的,表和链实际上是netfilter的两个维度
    4个表:filter,nat,mangle,raw,默认表是filter(没有指定表的时候就是filter表)。表的处理优先级:raw>mangle>nat>filter

  • 四张表:

 

   filter:一般的过滤功能
   nat:用于nat功能(端口映射,地址映射等)
   mangle: 用于对特定数据包的修改
   raw:优先级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能

 

  • 5个链:

 

   PREROUTING:数据包进入路由表之前
   INPUT:通过路由表后目的地为本机
   FORWARDING:通过路由表后,目的地不为本机
   OUTPUT:由本机产生,向外转发
   POSTROUTIONG:发送到网卡接口之前。

 

  • 流程图

    

    • 数据包到达网络接口,比如 eth0
    • 进入 raw 表的 PREROUTING 链,这个链的作用是赶在连接跟踪之前处理数据包。
    • 进入 mangle 表的 PREROUTING 链,在此可以修改数据包,比如 TOS 等。
    • 进入 nat 表的 PREROUTING 链,可以在此做DNAT,但不要做过滤。
    • 决定路由,看是交给本地主机还是转发给其它主机。   

    到了这里我们就得分两种不同的情况进行讨论了,一种情况就是数据包要转发给其它主机,这时候它会依次经过:

    • 进入 mangle 表的 FORWARD 链,这里也比较特殊,这是在第一次路由决定之后,在进行最后的路由决定之前,我们仍然可以对数据包进行某些修改。
    • 进入 filter 表的 FORWARD 链,在这里我们可以对所有转发的数据包进行过滤。需要注意的是:经过这里的数据包是转发的,方向是双向的。

    

  • 当数据包到达防火墙时,如果MAC地址符合,就会由内核里相应的驱动程序接收,然后会经过一系列操作,从而决定是发送给本地的程序,还是转发给其他机子,或是其他操作。
  • 我们先来看一个以本地为目的的数据包,它要经过以下步骤才能到达要接收它的程序:

   

 

 

下文中有个词mangle,我实在没想到什么合适的词来表达这个意思,只因为我的英语太差!我只能把我理解的写出来。这个词表达的意思是,会对数据包的一些传输特性进行修改,在mangle表中允许的操作是 TOS、TTL、MARK。
posted @ 2015-07-09 23:18  落崖惊风  阅读(654)  评论(0编辑  收藏  举报