数据包通过防火墙时的过程

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

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进行处理

原文地址:https://www.cnblogs.com/myworld5218/p/9790331.html

时间: 2024-10-13 15:12:33

数据包通过防火墙时的过程的相关文章

IP数据包的分片与重组过程

一.IP分片 (一)IP分片的原理: 分片和重新组装的过程对传输层是透明的,其原因是当IP数据报进行分片之后,只有当它到达下一站时,才可进行重新组装,且它是由目的端的IP层来完成的.分片之后的数据报根据需要也可以再次进行分片.    IP分片和完整IP报文差不多拥有相同的IP头,ID域对于每个分片都是一致的,这样才能在重新组装的时候识别出来自同一个IP报文的分片.在IP头里面,16位识别号唯一记录了一个IP包的ID(ipid),具有同一个ID的IP分片将会重新组装:而13位片偏移则记录了某IP片

数据包从源主机到达目标主机的过程。

本人现在研一,最近在准备学校的计算机网络考试,感觉自己对数据包选择路由和数据传输过程的实质总是不清楚,今天认真翻阅课本,参考博文,总算有了自己的理解. 本文采用循序渐进的方式今次那个陈述.理解同一广播域内两台主机通信过程是理解跨路由传输过程的先决条件,两者不同之处在于源和目标MAC地址的转换:因此先讲从同一广播域内两台主机通信,再将跨路由的数据传输过程. 情景一:同一广播域内,两台主机通信过程. 两主机要通信传送数据时,就要把应用数据封装成IP包(因为我们的网络大多都是TCP/IP的以太网了),

数据包从源主机到达目标主机的过程。【转】

最近把跨路由的数据传输过程搞的差不多了,所以特意写下这篇文章,仅为以后回忆之用.~ 为了便于理解,先从同一广播域内两台主机通信开始叙述吧.只要能理解这些,那也就差不多可以理解跨路由传输过程了(两者不同之处在于源和目标MAC地址的转换). 情景一:同一广播域内,两台主机通信过程. 我们知道两主机要通信传送数据时,就要把应用数据封装成IP包(因为我们的网络大多都是TCP/IP的以太网了),然后再交给下一层数据链路层继续封装成帧:之后根据MAC地址才能把数据从一台主机,准确无误的传送到另一台主机. 如

sk_buff封装和解封装网络数据包的过程详解

可以说sk_buff结构体是Linux网络协议栈的核心中的核心,几乎所有的操作都是围绕sk_buff这个结构体进行的,它的重要性和BSD的mbuf类似(看过<TCP/IP详解 卷2>的都知道),那么sk_buff是什么呢?       sk_buff就是网络数据包本身以及针对它的操作元数据.       想要理解sk_buff,最简单的方式就是凭着自己对网络协议栈的理解封装一个直到以太层的数据帧并且成功发送出去,个人认为这比看代码/看文档或者在网上搜资料强多了.当然,网上已经有了大量的这方面的

sk_buff封装和解封装网络数据包的过程详解(转载)

http://dog250.blog.51cto.com/2466061/1612791 可以说sk_buff结构体是Linux网络协议栈的核心中的核心,几乎所有的操作都是围绕sk_buff这个结构体进行的,它的重要性和BSD的mbuf类似(看过<TCP/IP详解 卷2>的都知道),那么sk_buff是什么呢?       sk_buff就是网络数据包本身以及针对它的操作元数据.       想要理解sk_buff,最简单的方式就是凭着自己对网络协议栈的理解封装一个直到以太层的数据帧并且成功发

Linux数据包路由原理、Iptables/netfilter入门学习

相关学习资料 https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html http://zh.wikipedia.org/wiki/Netfilter http://www.netfilter.org/projects/iptables/ http://linux.vbird.org/linux_server/0250simple_firewall.php http://linux.vbird.o

《WireShark数据包分析实战》二、让网络不再卡

TCP的错误恢复我是我们定位.诊断.并最终修复网络高延迟的最好工具. 1.TCP重传 重传数据包是TCP最基本的错误恢复特性之一,它被设计用来对付数据包丢失. 数据包丢失可能有很多原因,包括出故障的应用程序.流量负载沉重的路由器,或者临时性的服务中断.数据包层次上的移动速度非常快,而且数据包丢失通常是暂时的,因此TCP能否检测到数据包丢失并从中恢复显得至关重要. 决定是否有必要重传数据包的主要机制叫做重传计时器.这个计时器负责维护一个叫重传超时(Retransmission timeout RT

数据包的分类和调度-Linux TC的另一种解释

如果从分层递归的角度理解Linux的TC框架,很容易将队列分为有类队列和无类队列,这个角度上看,有类队列和无类队列的地位是平等的.但实际上,它们 之间是有层次关系的.之所以将其分为有类队列和无类队列,完全是实现意义上的,你可以看到,Linux对于TC框架的实现非常紧凑,正是基于这种递归的 "排队规则,类别,过滤器"三元组来进行的.但是抛开实现,我们需要用一种更加合理的方式来彻底理解数据包调度. 1.数据包调度 数 据包调度是一个层次,隔离了网卡驱动的收发模块和协议栈.也就是说,数据包从

Linux程序设计学习笔记----网络编程之网络数据包拆封包与字节顺序大小端

网络数据包的封包与拆包 过程如下: 将数据从一台计算机通过一定的路径发送到另一台计算机.应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示: 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据包(packet),在链路层叫做帧(frame).数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理. 上图对应两台计算机在同一网段中的情况,