- 浏览: 315038 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
JQ_AK47:
...
Linux下直接发送以太包 -
winsen2009:
谢谢分享,如果能再来一个列子就更好了,刚接触看完还是不懂的用
UNPv1_r3读书笔记: SCTP编程
简单介绍了目前防火墙领域中的状态检测技术的基本原理
什么是状态检测
本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝、转载,转载时请保持文档的完整性,严禁用于任何商业用途。
msn: yfydz_no1@hotmail.com
来源:http://yfydz.cublog.cn
状态检测(stateful inspection)是由CheckPoint公司最先提出的,可算是防火墙技术的一项突破性变革,把包过滤的快速性和代理的安全性很好地结合在一起,目前已经是防火墙最流行的检测方式。
状态检测的根本思想是对所有网络数据建立“连接”的概念,此“连接”是面向“连接”的协议之“连接”的扩展,对非连接协议数据也可以建立虚拟连接。既然是连接,必然是有一定的顺序的,通信两边的连接状态也是有一定顺序进行变化的,就象打电话,一定要先拨号对方电话才能振铃,不可能没人拨铃就响了,那样的话一定是哪出了故障。防火墙的状态检测就是事先确定好连接的合法过程模式,如果数据过程符合这个模式,则说明数据是合法正确的,否则就是非法数据,应该被丢
下面用面向连接的TCP协议来作具体说明:
TCP协议是一个标准的面向连接协议,在真正的通信前,必须按一定协议先建立连接,连接建立好后才能通信,通信结束后释放连接。连接建立过程称为三次握手,发起方先发送带有只SYN标志的数据包到目的方,目的方如果端口是打开允许连接的,就会回应一个带SYN和ACK标志的数据包到发起方,发起方收到后再发送一个只带ACK标志的数据包到目地方,目的方收到后就可认为连接已经正确建立;在正常断开时,一方会发送带FIN标志的数据包到对方,表示本方已经不会再发送数据了,但还可以接收数据,对方接收后还可以发数据,发完后也会发带FIN标志的数据包,双方进入断开状态,经过一段时间后连接彻底删除。在异常情况会发送RST标志的包来执行异常断开,不论是在连接开始还是通信和断开过程。
由此可见,第一,TCP的连接过程是一个有序过程,新连接一定是通过SYN包来开始的,如果防火墙里没有相关连接信息,就收到了一个非SYN的包,那该包一定是状态非法的,可以将其扔掉;其二,数据
通信过程是有方向性的,一定是发起方发送SYN,接收方发SYN ACK,不是此方向的数据就是非法的,由此状态检测可以实现A可以访问B而B却不能访问A的效果。
一个连接可以用协议,源地址,目的地址,源端口,目的端口的五元组来唯一确定。
下面看一个具体实现,下面是Linux内核中对TCP协议的状态转换实现表,源码在net/ipv4/
当一个新SYN包进防火墙时,看上面那个二维数组,由于防火墙里没有该连接信息,会建立新连接,防火墙对该连接状态开始是sNO(无连接),对应第一列,由于是SYN包,对应第一行,因此防火墙收到该包后将连接状态转换为sSS(SYN包发送);当接收方返回SYNACK包进入防火墙时,看下面那个二维数组,当前连接状态是sSS,对应第3列,SYN优先ACK,看第一行,因此防火墙收到该包后将连接状态转换为sSR(收到SYN包);当发起方回复ACK包进入防火墙时,看上面数组,连接当前状态是sSR,对应第4列,ACK包对应第3行,因此防火墙收到该包后将连接状态转换为sES(连接建立),就表示连接已经正确建立。转换表中有不少sIV(非法状态),如果连接状态转换到这里,该包就是非法包。应该要注意的是Linux内核的这个TCP转换表还是属于太过宽容,sIV项太少,对ACK包始终是可以通过的,所以对Linux防火墙,可以用ACK包来扫描端口而不是用SYN包来扫描,要加强防御的话可以修改此转换表。对于面向连接的协议比较好理解防火墙连接的概念,对于非连接协议,如UDP,ICMP等,防火墙同样可以建立连接概念,大部分UDP协议,数据也是有来有往的,如DNS,发一个DNS请求后,服务器会返回结果,因此防火墙可以根据请求包估计出返回包的协议、地址、端口五元组,等回应包到了以后进行相应匹配。同样ICMP,一个ping(echo request)包出去后,可以期望一个echo reply包回来,这也是一个连接过程。
状态检测除了检测到4层外,还可以检测应用层,主要用在多连接的协议,如FTP协议,主连接使用固定端口21进行控制,需要传输数据时会动态打开一个端口来传输数据,可分为主动模式和被动模式,主动模式下FTP服务器使用20端口来连接客户端的动态打开的端口,被动模式下是客户端连接服务器动态打开的端口,因此对于老的普通包过滤防火墙,为支持FTP的被动模式,就必须把端口全部放开。而对于状态检测防火墙,能够解析FTP命令通道中的内容,知道F留出TP将以何种方式在什么端口打开数据通道,从而动态打开相应端口,一旦数据连接结束,该端口就被关闭,因此只需要打开21端口就可以保证FTP的正常通信,安全性比包过滤要强很多。
有了状态检测,就可以很容易实现单向访问,扫描防御,需要打开的端口端口也可以控制在最小范围,具备了代理的安全性,而速度上又不亚于包过滤,目前已经成为防火墙的基本过滤模式。
什么是状态检测
本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝、转载,转载时请保持文档的完整性,严禁用于任何商业用途。
msn: yfydz_no1@hotmail.com
来源:http://yfydz.cublog.cn
状态检测(stateful inspection)是由CheckPoint公司最先提出的,可算是防火墙技术的一项突破性变革,把包过滤的快速性和代理的安全性很好地结合在一起,目前已经是防火墙最流行的检测方式。
状态检测的根本思想是对所有网络数据建立“连接”的概念,此“连接”是面向“连接”的协议之“连接”的扩展,对非连接协议数据也可以建立虚拟连接。既然是连接,必然是有一定的顺序的,通信两边的连接状态也是有一定顺序进行变化的,就象打电话,一定要先拨号对方电话才能振铃,不可能没人拨铃就响了,那样的话一定是哪出了故障。防火墙的状态检测就是事先确定好连接的合法过程模式,如果数据过程符合这个模式,则说明数据是合法正确的,否则就是非法数据,应该被丢
下面用面向连接的TCP协议来作具体说明:
TCP协议是一个标准的面向连接协议,在真正的通信前,必须按一定协议先建立连接,连接建立好后才能通信,通信结束后释放连接。连接建立过程称为三次握手,发起方先发送带有只SYN标志的数据包到目的方,目的方如果端口是打开允许连接的,就会回应一个带SYN和ACK标志的数据包到发起方,发起方收到后再发送一个只带ACK标志的数据包到目地方,目的方收到后就可认为连接已经正确建立;在正常断开时,一方会发送带FIN标志的数据包到对方,表示本方已经不会再发送数据了,但还可以接收数据,对方接收后还可以发数据,发完后也会发带FIN标志的数据包,双方进入断开状态,经过一段时间后连接彻底删除。在异常情况会发送RST标志的包来执行异常断开,不论是在连接开始还是通信和断开过程。
由此可见,第一,TCP的连接过程是一个有序过程,新连接一定是通过SYN包来开始的,如果防火墙里没有相关连接信息,就收到了一个非SYN的包,那该包一定是状态非法的,可以将其扔掉;其二,数据
通信过程是有方向性的,一定是发起方发送SYN,接收方发SYN ACK,不是此方向的数据就是非法的,由此状态检测可以实现A可以访问B而B却不能访问A的效果。
一个连接可以用协议,源地址,目的地址,源端口,目的端口的五元组来唯一确定。
下面看一个具体实现,下面是Linux内核中对TCP协议的状态转换实现表,源码在net/ipv4/
ip_conntrack_proto_tcp.c #define sNO TCP_CONNTRACK_NONE #define sES TCP_CONNTRACK_ESTABLISHED #define sSS TCP_CONNTRACK_SYN_SENT #define sSR TCP_CONNTRACK_SYN_RECV #define sFW TCP_CONNTRACK_FIN_WAIT #define sTW TCP_CONNTRACK_TIME_WAIT #define sCL TCP_CONNTRACK_CLOSE #define sCW TCP_CONNTRACK_CLOSE_WAIT #define sLA TCP_CONNTRACK_LAST_ACK #define sLI TCP_CONNTRACK_LISTEN #define sIV TCP_CONNTRACK_MAX static enum tcp_conntrack tcp_conntracks[2][5][TCP_CONNTRACK_MAX] = { { /* ORIGINAL */ /* sNO, sES, sSS, sSR, sFW, sTW, sCL, sCW, sLA, sLI */ /*syn*/ {sSS, sES, sSS, sSR, sSS, sSS, sSS, sSS, sSS, sLI }, /*fin*/ {sTW, sFW, sSS, sTW, sFW, sTW, sCL, sTW, sLA, sLI }, /*ack*/ {sES, sES, sSS, sES, sFW, sTW, sCL, sCW, sLA, sES }, /*rst*/ {sCL, sCL, sSS, sCL, sCL, sTW, sCL, sCL, sCL, sCL }, /*none*/{sIV, sIV, sIV, sIV, sIV, sIV, sIV, sIV, sIV, sIV } }, { /* REPLY */ /* sNO, sES, sSS, sSR, sFW, sTW, sCL, sCW, sLA, sLI */ /*syn*/ {sSR, sES, sSR, sSR, sSR, sSR, sSR, sSR, sSR, sSR }, /*fin*/ {sCL, sCW, sSS, sTW, sTW, sTW, sCL, sCW, sLA, sLI }, /*ack*/ {sCL, sES, sSS, sSR, sFW, sTW, sCL, sCW, sCL, sLI }, /*rst*/ {sCL, sCL, sCL, sCL, sCL, sCL, sCL, sCL, sLA, sLI }, /*none*/{sIV, sIV, sIV, sIV, sIV, sIV, sIV, sIV, sIV, sIV } } };
当一个新SYN包进防火墙时,看上面那个二维数组,由于防火墙里没有该连接信息,会建立新连接,防火墙对该连接状态开始是sNO(无连接),对应第一列,由于是SYN包,对应第一行,因此防火墙收到该包后将连接状态转换为sSS(SYN包发送);当接收方返回SYNACK包进入防火墙时,看下面那个二维数组,当前连接状态是sSS,对应第3列,SYN优先ACK,看第一行,因此防火墙收到该包后将连接状态转换为sSR(收到SYN包);当发起方回复ACK包进入防火墙时,看上面数组,连接当前状态是sSR,对应第4列,ACK包对应第3行,因此防火墙收到该包后将连接状态转换为sES(连接建立),就表示连接已经正确建立。转换表中有不少sIV(非法状态),如果连接状态转换到这里,该包就是非法包。应该要注意的是Linux内核的这个TCP转换表还是属于太过宽容,sIV项太少,对ACK包始终是可以通过的,所以对Linux防火墙,可以用ACK包来扫描端口而不是用SYN包来扫描,要加强防御的话可以修改此转换表。对于面向连接的协议比较好理解防火墙连接的概念,对于非连接协议,如UDP,ICMP等,防火墙同样可以建立连接概念,大部分UDP协议,数据也是有来有往的,如DNS,发一个DNS请求后,服务器会返回结果,因此防火墙可以根据请求包估计出返回包的协议、地址、端口五元组,等回应包到了以后进行相应匹配。同样ICMP,一个ping(echo request)包出去后,可以期望一个echo reply包回来,这也是一个连接过程。
状态检测除了检测到4层外,还可以检测应用层,主要用在多连接的协议,如FTP协议,主连接使用固定端口21进行控制,需要传输数据时会动态打开一个端口来传输数据,可分为主动模式和被动模式,主动模式下FTP服务器使用20端口来连接客户端的动态打开的端口,被动模式下是客户端连接服务器动态打开的端口,因此对于老的普通包过滤防火墙,为支持FTP的被动模式,就必须把端口全部放开。而对于状态检测防火墙,能够解析FTP命令通道中的内容,知道F留出TP将以何种方式在什么端口打开数据通道,从而动态打开相应端口,一旦数据连接结束,该端口就被关闭,因此只需要打开21端口就可以保证FTP的正常通信,安全性比包过滤要强很多。
有了状态检测,就可以很容易实现单向访问,扫描防御,需要打开的端口端口也可以控制在最小范围,具备了代理的安全性,而速度上又不亚于包过滤,目前已经成为防火墙的基本过滤模式。
发表评论
-
Linux内核中流量控制(24)
2011-01-10 16:33 2210本文档的Copyleft归yfydz所 ... -
Linux内核中流量控制(23)
2011-01-10 16:30 1492本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(22)
2011-01-10 16:29 1939本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(21)
2011-01-10 16:28 1357本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(20)
2011-01-10 16:27 1525本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(19)
2011-01-10 16:27 1979本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(18)
2011-01-10 16:26 1572Linux内核中流量控制(18) ... -
Linux内核中流量控制(17)
2011-01-10 16:25 1951本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(16)
2011-01-10 16:25 1807本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(15)
2011-01-10 16:24 1892本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(14)
2011-01-10 16:23 1961本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(13)
2011-01-10 16:22 2638本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(12)
2011-01-10 16:21 2110本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(11)
2011-01-10 16:21 3236本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(10)
2011-01-10 16:20 2007本文档的Copyleft归yfydz所 ... -
Linux内核中流量控制(9)
2011-01-10 16:19 1833本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(8)
2011-01-10 16:18 1498本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(7)
2011-01-10 16:18 2926本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(6)
2011-01-10 16:17 1495本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(5)
2011-01-10 16:16 1730本文档的Copyleft归yfydz所有,使用GPL发布,可以 ...
相关推荐
iptables的状态检测机制 iptables的状态检测机制 iptables的状态检测机制 iptables的状态检测机制
服务器状态检测工具,可以直接编辑INI文件,添加自己IP地址。主要用户测试服务连通性。日常服务器检查好工具!
检查应用冻结状态检查应用冻结状态检查应用冻结状态检查应用冻结状态检查应用冻结状态
驾驶员状态检测是一种基于计算机视觉技术的人机交互技术,旨在通过实时监测驾驶员的面部表情、头部姿态、瞳孔大小等生理指标,评估其驾驶状态是否合适,提高驾驶安全性。驾驶员状态检测系统通常由摄像头、传感器、...
在考虑防火墙安全和速度性能的前提下,给出针对TCP,UDP,ICMP和ARP等TCP/IP协议栈中主要协议的状态检测的结构设计,采用TCP序列号检查、UDP虚连接、ICMP数据包检测引擎等办法保证网络的安全性和高效性。
VHDL 状态机 序列检测 包含了西安电子科技大学钟铧的VHDL 状态机科技,以及作业的程序
使用vivado编写FPGA代码进行序列检测,其中附件中给出了具体的状态机结构,以及文件的提示。
使用状态机,对输入序列进行序列检测,当输入序列正确时,输出为1,其它情况输出为0。prj_quartus是quartus文件,prj_modelsim是modelsim仿真文件,src是程序源码包含testbench
进行网络稳定性测试时,对网络协议状态机制进行检测可以有效提高测试的全面性。基于有限状态机思想提出了一种协议状态机制检测方法。建立待测协议特定消息发送实体的有限状态机模型,确定输入集合;测试并监测实体的...
程序实现方法,用定时器定时10ms,每隔10ms检测一次按键,将一个按键的检测过程分为几个不同的状态,最简单的分为 初使状态-按键闭合确认状态-按键释放状态,如果要求按键实现的功能越多,状态也就越多 ,比如...
利用struts+jdom写的网络设备状态检测系统,网络设备在xml文件中进行添加或删除,然后系统会将xml文件描述的所有网络设备的工作状态。
RAC常见命令检查状态
单片机的开关状态检测
状态机检测按键 按键 状态机 实测准确无误
硬盘状态检测 CrystalDiskInfo 3.7.0
这个数据集是用于睡意眼睛状态检测的,共包含37个不同人的数据,其中有33名男性和4名女性。数据集包含了84,898张图片,每张图片都标注了性别信息,其中0代表男性,1代表女性。此外,对于每张图片中的眼镜情况,也...
深度学习上课状态检测数据集,适用于智慧课堂等项目,包含图片以及xml标签
简易智力状态检查量表的详细测试文档.不含积分规则
VT开启状态检测与修复工具 有时候电脑BIOST里明明开启了VT,但开启虚拟机或模拟器时报VT没有开启错误。 可以用这个来检cpu是否支持VT虚拟化技术和开启状态。 修复功能,必须要bios里开启了vt功能后,才能修复。 纯...
基于神经网络的学习状态检测.pdf