探索服务器端的局域网——防火墙的结构和原理

1、主流的包过滤方式:

防火墙可以分为包过滤、应用层网关、电路层网关等几种方式,其中任何一种方式都可以实现防火墙的目的,但出于性能、价格、易用性等因素,现在最为普及的是包过滤方式。

2、如何设置包过滤的规则:

网络包的头部包含了用于控制通信操作的控制信息,只要检查这些信息,就可以获得很多有用的内容。这些头部信息中,经常用于设置包过滤规则的字段如下表所示:

头部类型 规则判断条件 含义
MAC头部 发送方MAC地址 路由器在对包进行转发时会改写MAC地址,将转发目标路由器的MAC地址设为接收方MAC地址,将自己的MAC地址设为发送方MAC地址。通过发送方MAC地址,可以知道上一个转发路由器的MAC地址
IP头部 发送方IP地址 发送该包的原始设备的IP地址,如果要以发送设备来设置规则,需要使用这个字段
接收方IP地址 包的目的地IP地址,如果要以包的目的地来设置规则,需要使用这个字段
协议号 TCP/IP协议为每个协议分配了一个编号,如果要以协议类型来设置规则,需要使用这个编号。主要的协议号包括IP:0;ICMP:1;TCP:6;UDP:17;OSPF:89
TCP头部或UDP头部 发送方端口号 发送该包的程序对应的端口号。服务器程序对应的端口号是固定的,因此根据服务器返回的包的端口号可以分辨是哪个程序发送的。不过,客户端程序的端口号大多是随机分配的,难以判断其来源,因此很少使用客户端发送的包的端口号来设置过滤规则
接收方端口号 包的目的地程序对应的端口号。和发送方端口号一样,一般使用服务器的端口号来设置规则,很少使用客户端的端口号
TCP控制位 TCP协议的控制信息,主要用来控制连接操作
ACK 表示接收数据序号字段有效,一般用于通知发送方数据已经正确接收
PSH 表示发送方应用程序希望不等待发送缓冲区填充完毕,立即发送这个包
RST 强制断开连接,用于异常中断
SYN 开始通信时连接操作中发送的第一个包中SYN为1,ACK为0。如果能够过滤这样的包,则后面的操作都无法继续,可以屏蔽整个访问
FIN 表示断开连接
分片 通过IP协议的分片功能拆分后的包,从第二个分片开始会设置该字段
ICMP消息(非头部)的内容 ICMP消息类型 ICMP消息用于通知包传输过程中产生的错误,或者用来确认通信对象的工作状态。ICMP消息主要包括以下类型,这些类型可以用来设置过滤规则
0 针对ping命令发送的ICMP echo消息的响应。将这种类型的消息和下面的类型8消息屏蔽之后,ping命令就没有响应了。一般在发动攻击之前会通过ping命令查询网络中哪些设备,如果屏蔽0和8,就不会响应ping命令,攻击者就无法获取网络中的信息了。不过,ping命令也可以用来查询设备是否在正常工作,如果屏蔽了0和8的消息,可能别人会误以为设备没有在工作
8 这个类型的消息叫作ICMP echo,当执行ping命令时,就会发送ICMP echo消息
其他 ICMP消息除了0和8以外还有其他一些类型,但其中有些消息被屏蔽后会导致网络故障,因此如果要屏蔽0和8以外的消息必须十分谨慎

3、通过端口号限定应用程序:

当我们要限定某个应用程序时,可以在判断条件中加上TCP头部或者UDP头部中的端口号。Web服务器的端口号为80(也可以不使用80端口而使用其他端口),也就是说,当包的接收方IP地址为Web服务器地址,且接收方端口号为80时,允许这些包通过;或者当包的发送方IP地址为Web服务器地址,且发送方端口号为80时,允许这些包通过。

4、通过控制位判断连接方向:

Web使用的TCP协议是双向收发网络包的,因此如果单纯地阻止从Web服务器发往互联网的包,则从互联网访问Web服务器的操作也会受到影响而无法进行。所以,我们必须要根据访问的方向来进行判断,这里就需要用到TCP头部中的控制位。TCP在执行连接操作时需要收发3个包,其中第一个包的TCP控制位中SYN为1,而ACK为0。其他的包中这些值都不同,因此只要按照这个规则就能够过滤TCP连接的第一个包。

如果这第一个包是从Web服务器发往互联网的,那么我们就阻止它。这样设置之后,当然也不会收到对方返回的第二个响应包,TCP连接操作就失败了。也就是说,只要以Web服务器为起点访问互联网,其连接操作必然会失败,这样一来,我们就阻止了Web服务器对互联网的访问。

实际上也存在无法将希望允许和阻止的访问完全分开的情况,其中一个代表性的例子就是对DNS服务器的访问。DNS查询使用的是UDP协议,而UDP与TCP不同,它没有连接操作,因此无法像TCP一样根据控制位来判断访问方向。所以,对于所有使用UDP协议的应用程序来说,要么冒一定的风险允许所有包通过,要么牺牲一定的便利性阻止所有包通过(如果是使用包过滤之外的其他方式的防火墙,有时候是可以判断UDP应用程序的访问方向的)。

5、防护墙无法抵御的攻击:

防火墙可以根据包的起点和终点来判断是否允许其通过,但仅凭起点和终点并不能筛选出所有有风险的包。比如,假设Web服务器在收到含有特定数据的包时会引起宕机。但是防火墙只关心包的起点和终点,因此即便包中含有特定数据,防火墙也无法发现。

要应对这种情况有两种方法。这个问题的根源在于Web服务器程序的Bug,因此修复Bug防止宕机就是其中一种方法。另一种方法就是在防火墙之外部署用来检查包的内容并阻止有害包的设备或软件。当然,包的内容是否有风险,还是由Web服务器有没有Bug决定的,因此当服务器程序有潜在的Bug并且尚未被发现时,我们也无法判断包中的风险。所以,第二种方法和直接修复Bug的方法是基本等效的,但如果服务器数量较多,更新软件版本需要花费一定的时间,或者容易忘记更新软件,这时对包的内容进行检查就会比较有效。

Guess you like

Origin blog.csdn.net/qq_38386085/article/details/104083627