防火墙的关键技术TCP/IP简介包过滤技术状态检测技术代理技术TCP/IP简介IP协议TCP协议UDP协议ICMP协议IP协议网际协议(InternetProtocl)报文格式如下图所示,详细内容请参见相关文献:04816192431版本号首部长度服务类型总长度标识符标志分片偏移量寿命协议首部校验和源IP地址目的IP地址IP选项填充数据TCP协议传输控制协议(TransmissionControlProtocol)报文格式如下图所示,详细内容请参见相关文献:012345678910111213141516171819202122232425262728293031源端口目的端口序号确认号数据偏移保留USGACKPSHRSTSYNFIN窗口校验和紧急指针选项填充数据部分UDP协议用户数据报协议(UserDatagramProtocol)报文首部格式如下图所示,详细内容请参见相关文献:字节数2222源端口目的端口长度校验和ICMP协议互联网控制报文协议(InternetControlMessageProtocol)报文格式如下图所示,详细内容请参见相关文献:包过滤技术基本概念过滤对象包过滤技术的优点包过滤技术存在的问题基本概念包过滤技术是最早、最基本的访问控制技术,又称报文过滤技术。其作用是执行边界访问控制功能,即对网络通信数据进行过滤(filtering,亦称筛选)。包过滤技术的工作对象是数据包。对TCP/IP协议族来说,包过滤技术主要对其数据包包头的各个字段进行操作。安全过滤规则是包过滤技术的核心,是组织或机构的整体安全策略中网络安全策略部分的直接体现。包过滤技术必须在操作系统协议栈处理数据包之前拦截数据包,即防火墙模块应该被设置在操作系统协议栈网络层之下,数据链路层之上的位置上。包过滤防火墙将包头各个字段的内容与安全过滤规则进行逐条地比较判断,直至找到一条相符的规则为止。如果没有相符的规则,则执行默认的规则。具体实现包过滤技术的设备通常分为过滤路由器和访问控制服务器两类。包过滤的实现过程如右图所示:应用层表示层会话层传输层网络层防火墙模块数据链路层物理层读取数据包首部信息读取一条过滤规则是否与规则匹配?有否下一条规则?是否转发包?审计记录或告警是否是否否是丢弃包,发送NAK转发数据包结束过滤对象针对IP协议的过滤针对ICMP协议的过滤针对TCP协议的过滤针对UDP协议的过滤针对IP协议的过滤针对IP协议的过滤操作将查看每个IP数据包的包头,将包头数据与规则集相比较,转发规则集允许的数据包,拒绝规则集不允许的数据包。针对IP协议的过滤操作可以设定对源IP地址进行过滤。对于包过滤技术来说,有效的办法是只允许受信任的主机访问网络资源而拒绝一切不可信的主机的访问。针对IP协议的过滤操作也可以设定对目的IP地址进行过滤。这种安全过滤规则的设定多用于保护目的主机或网络。针对IP协议的过滤操作还要注意IP数据包的分片问题。攻击者可以利用分片技术构造特殊的数据包对网络展开攻击。对此应该设定包过滤器要阻止任何分片数据包或者要在防火墙处重组分片数据包的安全策略。后一种策略存在着防火墙资源被大量不完全的数据包片段耗尽的危险,需要精心设置。针对ICMP协议的过滤ICMP协议在完成网络控制与管理操作的同时也会泄漏网络中的一些重要信息,甚至被攻击者利用做攻击用户网络的武器:要设定过滤安全策略,阻止类型8回送请求ICMP协议报文进出用户网络。防止内网拓扑结构信息泄露。很多攻击者会将大量类型8的ICMP协议报文发往用户网络,使得目标主机疲于接收处理这些垃圾数据而不能提供正常的服务,最终造成目标主机的崩溃。攻击者可利用类型5路由重定向ICMP协议报文,采用中间人(maninthemiddle)攻击的办法,伪装成预期的接收者截获或篡改正常的数据包,也可以将数据包导向受其控制的未知网络。攻击者可利用类型3目的不可达ICMP协议报文探知用户网络的敏感信息。针对TCP协议的过滤针对TCP协议的过滤可设定对源或目的端口的过滤,又称端口过滤、协议过滤。只要针对服务使用的知名端口号进行规则的设置,就可以实现对特定服务的控制。另一种针对TCP协议的过滤是对标志位过滤。最常用的就是针对SYN和ACK的过滤。在TCP协议的连接建立过程中,报文头部的一些标志位的变化是需要注意的:当连接发起者发出连接请求时,请求报文SYN位为1而包括ACK位在内的其它标志位为0。该报文携带发起者自行选择的一个通信初始序号。若接收者接受该请求,则返回连接应答报文。该报文的SYN位和ACK位为1。该报文不但携带对发起者通信初始序号的确认(加1),而且携带接收者自行选择的另一个通信初始序号。若接收者拒绝该请求,则返回报文RST位要置1。连接发起者还需要对接收者自行选择的通信初始序号进行确认,返回该值加1作为希望接收的下一个报文的序号。同时ACK位置1。除了在连接请求的过程中,其它时候SYN位始终为0。结合三次握手的过程,只要通过对SYN=1的报文进行操作,就可实现对连接会话的控制——拒绝这类报文,就相当于阻断了通信连接的建立。这就是利用TCP协议标志位进行过滤规则设定的基本原理。针对UDP协议的过滤UDP协议与TCP协议有很大的不同,因为它们采用的是不同的服务策略。TCP协议是面向连接的,相邻报文之间具有着明显的关系,数据流内部也具有较强的相关性,因此过滤规则的制定比较容易;而UDP协议是基于无连接的服务的,一个UDP用户数据报报文中携带了到达目的地所需的全部信息,不需要返回任何的确认,报文之间的关系很难确定,因此很难制定相应的过滤规则。究其根本原因是因为静态包过滤技术只针对包本身进行操作而不记录通信过程的上下文,也就无法从独立的UDP用户数据报中得到必要的信息。对于UDP协议,只能是要么阻塞某个端口,要么听之任之。多数人倾向于前一种方案,除非有很大的压力要求允许进行UDP传输。其实有效的解决办法是采用动态包过滤技术/状态检测技术。包过滤技术的优点包过滤技术实现简单、快速。经典的解决方案只需要在内部网络与外部网络之间的路由器上安装过滤模块即可。包过滤技术的实现对用户是透明的。用户无需改变自己的网络访问行为模式,也不需要在主机上安装任何的客户端软件,更不用进行任何的培训。包过滤技术的检查规则相对简单,因此检查操作耗时极短,执行效率非常高,不会给用户网络的性能带来不利的影响。包过滤技术存在的问题包过滤技术过滤思想简单,对信息的处理能力有限。只能访问包头中的部分信息,不能理解通信的上下文,因此不能提供更安全的网络防护能力。当过滤规则增多的时候,对于过滤规则的维护是一个非常困难的问题。不但要考虑过滤规则是否能够完成安全过滤任务,还要考虑规则之间的关系防止冲突的发生。尤其是后一个问题是非常难于解决的。包过滤技术控制层次较低,不能实现用户级控制。特别是不能实现对用户合法身份的认证以及对冒用的IP地址的确定。状态检测技术状态检测技术根据连接的“状态”进行检查。当一个连接的初始数据报文到达执行状态检测的防火墙时,首先要检查该报文是否符合安全过滤规则的规定。如果该报文与规定相符合,则将该连接的信息记录下来并自动添加一条允许该连接通过的过滤规则,然后向目的地转发该报文。以后凡是属于该连接的数据防火墙一律予以放行,包括从内向外的和从外向内的双向数据流。在通信结束、释放该连接以后,防火墙将自动地删除关于该连接的过滤规则。动态过滤规则存储在连接状态表中并由防火墙维护。为了更好地为用户提供网络服务以及更精确地执行安全过滤,状态检测技术往往需要察看网络层和应用层的信息,但主要还是在传输层上工作。状态的概念状态是特定会话在不同传输阶段所表现出来的形式和状况。防火墙通常可以依据数据包的源地址、源端口号、目的地址、目的端口号、使用协议五元组来确定一个会话,但这些对于状态检测防火墙来说还不够。除记录上述信息外,还需进一步记录该会话当前的状态属性、顺序号、应答标记、防火墙的执行动作及最近数据报文的寿命等信息。状态的概念TCP及状态TCP协议是一个面向连接的协议,对于通信过程各个阶段的状态都有很明确的定义,并可以通过TCP协议的标志位进行跟踪。TCP协议共有11个状态,这些状态标识由RFC793定义,分别为:CLOSED、LISTEN、SYN-SENT、SYN-RECEIVED、ESTABLISHED、FIN-WAIT-1、CLOSE-WAIT、FIN-WAIT-2、LAST-ACK、TIME-WAIT、CLOSING。以上述状态为基础,结合相应的标志位信息,再加上通信双方的IP地址和端口号,即可很容易地建立TCP协议的状态连接表项并进行精确地跟踪监控。当TCP连接结束后,应从状态连接表中删除相关表项。为了防止无效表项长期存在于连接状态表中给攻击者提供进行重放攻击的机会,可以将连接建立阶段的超时参数设置得较短,而连接维持阶段的超时参数设置得较长。最后连接释放阶段的超时参数也要设置得较短。状态的概念CLOSED连接开始前的状态LISTEN等待连接请求的状态SYN-SENT发出SYN报文后等待返回响应的状态SYN-RECEIVED收到SYN报文并返回SYN-ACK响应后的状态ESTABLISHED连接建立后的状态,即发送方收到SYN-ACK后的状态,连接方在收到3次握手最后的ACK报文后的状态FIN-WAIT-1关闭连接发起者发送初始FIN报文后的状态CLOSE-WAIT关闭连接接收者收到初始FIN并返回ACK响应后的状态FIN-WAIT-2关闭连接发起者收到初始FIN报文的ACK响应后的状态LAST-ACK关闭连接接收者将最后的FIN报文发送给关闭连接发起者后的状态TIME-WAIT关闭连接发起者收到最后的FIN报文并返回ACK响应后的状态CLOSING采用非标准同步方式关闭连接时,在收到初始FIN报文并返回ACK响应后,通信双方进入CLOSING状态。在收到对方返回的FIN报文的ACK响应后,通信双方进入TIME-WAIT状态实线:表示客户的正常状态转换虚线:表示服务器的正常状态装换应用:表示状态转换在应用进程发起操作时发生接收:表示状态转换在接收到分节时发生发送:表示这个转换发送什么状态的概念UDP及状态UDP协议与TCP协议有很大的不同,它是一种无连接的协议,其状态很难进行定义和跟踪。通常的做法是将某个基于UDP协议的会话的所有数据报文看作是一条UDP连接,并在这个连接的基础之上定义该会话的伪状态信息。伪状态信息主要由源IP地址、目的IP地址、源端口号以及目的端口号构成。双向的数据流源信息和目的信息正好相反。由于UDP协议是无连接的,所以无法定义连接的结束状态,只能是设定一个不长的超时参数,在超时到来的时候从状态连接表中删除该UDP连接信息。此外,UDP协议对于通信中的错误无法进行处理,需要通过ICMP协议报文传递差错控制信息。这就要求状态检测机制必须能够从ICMP报文中提取通信地址和端口等信息来确定它与UDP连接的关联性,判断它到底属于哪一个UDP连接,然后再采取相应的过滤措施。这种ICMP报文的状态属性通常被定义为RELATED。状态的概念ICMP及状态ICMP协议是无连接的协议,还具有单向性的特点。在ICMP协议的13种类型中,有4对类型的报文具有对称的特性,即属于请求/响应的形式。这4对类型的ICMP报文分别是回送请求/回送应答、信息请求/信息应答、时间戳请求/时间戳回复和地址掩码请求/地址掩码回复。其它类型的报文都不是对称的,而是由主机或节点设备直接发出的,无法预先确定报文的发出时间和地点。因此,ICMP协议的状态和连接的定义要比UDP协议更难。ICMP协议的状态和连接的建立、维护与删除与UDP协议类似。但是在建立的过程中不是简单地只通过IP地址来判别连接属性。ICMP协议的状态和连接需要考虑ICMP报文的类型和代码字段的含义,甚至还要提取ICMP报文的内容来决定其到底与哪一个已有连