• 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。
  • 相关阅读:
    论文阅读 dyngraph2vec: Capturing Network Dynamics using Dynamic Graph Representation Learning
    升级openssh的补救
    二阶魔方
    Extra argument start service sshd does not support chkconfig
    通用帮助类集合Shiny.Helper库的使用
    .net core Redis客户端Shiny.Redis包库的使用
    .net core mqtt客户端Shiny.Mqtt库的使用
    基于Sqlsugar单例模式封装的库ShinySqlSugar的使用
    加速训练之并行化 tf.data.Dataset 生成器
    ffmpeg protocol concat 进行ts流合并视频的时间戳计算及其音画同步方式一点浅析
  • 原文地址:https://www.cnblogs.com/xingyun/p/4634521.html
Copyright © 2020-2023  润新知