zoukankan      html  css  js  c++  java
  • 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。
  • 相关阅读:
    未解决的
    nodejs 7 和 8 的比较
    openresty Nginx
    Vim快捷键分类
    wireshark 包过滤
    RSA 公私钥 互换问题
    vim命令
    Windows 小端存储
    python 字符转换
    ssl证书验证
  • 原文地址:https://www.cnblogs.com/xingyun/p/4634521.html
Copyright © 2011-2022 走看看