zoukankan      html  css  js  c++  java
  • 数据包通过防火墙时的过程

    数据包通过防火墙时的情况分为三种:

    1、以本地为目标的包

      当一个数据包进入防火墙后,如果目的地址是本机,被防火墙进行检查的顺序如下:

    如果在某一个步骤数据包被丢弃,就不会执行后面的检查

    步骤 说明
    1     数据包在链路上进行传输
    2     数据包进入网络接口
    3 mangle PREROUTING 这个链路用来mangle数据包,如对包进行改写或做标记
    4 nat PREROUTING 这个链主要用来做DNAT
    5     路由判断,如包是发往本地的还是要转发的
    6 mangle  INPUT 在路由之后,被送往本地程序之前如对包进行改写或做标记
    7 filter INPUT 所有以本地为目的的包都需要经过这个链,包的过滤规则设置在此
    8     数据包到达本地程序,如服务程序或客户程序

    2、以本地为源的包

      本地应用程序发出的数据包,被防火墙进行检查的顺序如下:

    步骤 说明
    1     本地程序,如服务程序或客户程序
    2     路由判断
    3 mangle OUTPUT 用来mangle数据包,如对包进行改写或标记
    4 nat   OUTPUT 对发出的包进行DNAT操作
    5 filter OUTPUT 对本地发出的包过滤,包的过滤规则设置在此
    6 mangle POSTROUTING 进行数据包的修改
    7 filter   POSTROUTING 在这里做SNAT
    8     数据包离开网络接口并在链路上传输

    3、被转发的数据包

      需要通过防火墙转发的数据包,被防火墙进行检查的顺序如下;

    步骤 说明
    1     数据包在链路上传输
    2     进入网络接口
    3 mangle PREROUTING mangle数据包,对包进行改写或做标记
    4  nat  PREROUTING  这个链主要做DNAT 
    5     路由判断,如包是发往本地的,还是要转发 
    6  mangle FORWARD 

    包继续被发送至mangle表的FORWARD链,这是非常特殊的情况

    下才会用到的,在这里,包被mangle。这次mangle发生在最初

    的路由判断之后,在最后一次更改包的目的之前 

    7  filter FORWARD 

    FORWARD包断续被发送到这条FORWARD链,只有需要转发的包

    才会走到这里,并且针对这些包的所有过滤也在这里进行,注意,所有

    转发的包都要经过这里

    8  mangle POSTROUTING 

     这个链也是针对一些特殊类型的包,这一步mangle是在所有更改

    包的目的地址的操作完成之后做的,但这时包还在本地上

    9  nat POSTROUTING 

    这个链就是用来做SNAT的,不推荐在此处过滤,因为某些包即使

    不满足条件也会通过 

    10     离开网络接口 
    11     数据包在链路上传输 

      在对包进行过滤时,常有以下3个动作。

    (1)ACCEPT:一旦数据包满足了指定的匹配条件,数据包就会被ACCEPT,并且不会再去匹配当前链中的其他的规则或

         同一个表内的其他规则,但数据仍然需要通过其他表中的链

    (2)DROP:如果包符合条件,数据包被会丢掉,并且不会向发送者返回任何信息,也不会向路由返回信息

    (3)REJECT: 和DROP基本一样,区别在于除了将包丢弃并且向发送者返回错误信息。

      示例如下:

      其中“ policy DROP " 表示该链的默认规则为DROP操作,如现有一数据包,源地址为

    192.168.1.58,目的地址为137.254.60.6,协议为TCP,目的的端口为80,当该数据包通过FORWARD链时,

    从上往下开始匹配,过程如下:

      (1) 与第1条规则:源为192.168.100.0/24,源地址不匹配

      (2) 与第2条规则:目的为69.147.0.0/24,目标不匹配

      (3)与第3条规则: 源为172.16.0.0/16,源不匹配

      (4)与第4条规则:源为10.0.0.0/24, 源不匹配

     由于经过匹配以上所有规则都不符合,数据包则转交给默认规则处理,由于本示例默认的规则为DROP,

    因为该数据包被丢弃,

    再看另一个数据包,源地址为192.168.1.58,目的地址为69.147.83.199,协议为TCP,目的端口为80,当该

    数据包通过FORWARD链时,从上往下开始匹配:

      (1)与第1条规则:源为192.168.100.0/28, 源不匹配

      (2)与第2条规则:源地址为任意(0.0.0.0/0),匹配;目的地址为67.147.0.0/24

    因为69.147.83.199在范围内,匹配;源端口和目的端口为任意,匹配;协议为任意(all),匹配:规则链对该

    数据包的动作为ACCEPT,因此该数据包通过。

    如果数据包的源地址为10.0.0.35,目的地址为69.147.83.199,协议为TCP,目的端口为80,当该数据包

    通过FORWARD链时,从上往下开始匹配,当匹配到第4条规则时匹配,动作为mychain,此时数据包会被

    转到用户自己定义的规则链mychain进行处理

  • 相关阅读:
    bootstrap-select用法详解
    启动react项目报如下错误
    什么?女朋友生气哄不好?那是你没有这款神器!
    Python竟然能做这种进度条,看完别说WC!
    看完学习Python的萌新都在问的六个问题,你就可以毕业了!
    批量加水印防抄袭,Python轻松搞定!
    hdu_1272_小希的迷宫_201403091527
    hdu_1856_More is better_201403091720
    hdu_1213_How Many Tables_201403091126
    hdu_1232_畅通工程_201403091018
  • 原文地址:https://www.cnblogs.com/myworld5218/p/9790331.html
Copyright © 2011-2022 走看看