TCP协议
TCP消息格式:<localhost,localport,remotehost,remoteport>
TCP连接的建立需要3次握手,当服务器收到初始的SYN数据包后,该连接处于半开放状态。此后,服务器返回自己的序号,并等待确认。最后,客户机发送第3个数据包使TCP连接开放,在客户机和服务器之间建立连接。
但处于半开放状态会消耗服务器的大量资源,所以诞生了泛洪攻击,即通过模拟IP或僵尸网络的方式大量发出第一次握手,而不回复第三次握手,大量占用服务资源。
方法1(SYN Defender):防火墙收到客户端的SYN包时,直接转发给服务器;防火墙收到服务器的SYN/ACK包后,一方面将SYN/ACK包转发给客户端,另一方面以客户端的名义给服务器回送一个ACK包,完成TCP的三次握手,让服务器端由半连接状态进入连接状态。当客户端真正的ACK包到达时,有数据则转发给服务器,否则丢弃该包。由于服务器能承受连接状态要比半连接状态高得多,所以这种方法能有效地减轻对服务器的攻击。
方法2(SYN proxy):防火墙在收到客户端的SYN包后,并不向服务器转发而是记录该状态信息然后主动给客户端回送SYN/ACK包,如果收到客户端的ACK包,表明是正常访问,由防火墙向服务器发送SYN包并完成三次握手。这样由防火墙做为代理来实现客户端和服务器端的连接,可以完全过滤不可用连接发往服务器。
NAT协议
NAT协议的诞生主要为了解决IPV4中IP地址不足的问题。NAT协议中文全称为网络地址转换,即将一大批主机由NAT路由器都封装在一个局域网内,并赋予一个内网IP和外网IP。内网通信随意,IP地址足够;当访问外网时步骤如下(内部主机(192.168.10.1)要向外部主机(地址为210.10.20.20)发送一个数据包):
向NAT路由器发送数据包,源地址为19
2.168.10.1,目的地址为210.10.20.20。
NAT路由器在转换表中增添一个条目,内部地址192.168.10.1,外部地址210.
10.20.20。
NAT路由器用自己的地址(即201.26.
7.9)替换数据包中的源地址,并利用路由机制,将此数据包发送给Internet上的目标主机。此时源地址就变为了201.2
6.7.9。
目的地址收到信息并返回响应数据包,响应数据包的源地址为210.10.20.20,而目的地址为201.26.7.9。
该响应数据包到达NAT路由器。因为响应数据包中的目的地址与NAT路由器的地址匹配,所以NAT路由器查询转换表,以确认此转换表中是否含有外部地址为210.1
0.20.20的条目。于是就找到了内部主机192.168.10.1。
NAT路由器用内部主机地址(即192.16
8.10.1)替换数据包的目的地址,并将该分组发给该内部主机。
然而,如果有多个内网主机希望与外网的同一台主机通信怎么办?
那么需要修改NAT转换表,新加几列新的参数。
内部端口 外部端口
NAT协议的安全问题:NAT最严重的问题是它不能与加密协调工作。第一,NAT不能对加密的数据流进行检查;第二,IPsec与NAT会产生冲突。