Firewall 模块

一、概述

承担的需求(主要秘密)

模块需求:该模块负责保证服务器安全。用户访问服务器时需要先通过服务器检测模块, 屏蔽特定 IP 以及访问过于频繁的 IP(插件扫描攻击)。并且该模块支持可能的入侵检测 规则扩展。

涉及需求

R11 入侵检测

C21: 若用户一分钟内访问频度超过200次,视为攻击并屏蔽 阻碍R10

C22: 添加新的入侵检测规则能在1人/月内完成

R12 屏蔽特定IP

C23: 系统可以屏蔽特定IP的访问 促进R10

C24: 允许运行时添加屏蔽IP

用例图设计

可能会修改的实现(次要秘密)

所屏蔽的特定 IP 的列表 规则库的访问控制规则 系统安全检测方法 (不安全 IP 的检测方法 有威胁的访问频率的检测方法 不安全的DNS的检测方法)

角色

该模块从规则库(存放在注册表中)中读取访问控制规则分析发出请求用户的 IP 以及短时间内同一IP的访问频率,将存在威胁的请求(不安全 IP 、有威胁的访问频率、不安全的DNS)进行隔离,最后通过事先制定好的访问规则检查认证确定连接是否允许通过

二、类的设计

对外接口: 接口:HttpRequest startFireWall(HttpRequest request) () 功能:当用户的请求到达系统时,首先调用该接口,该接口将返回对该 IP 访问的检查结果.过滤 IP 有威胁的请求;之后再检查对应 IP 发出请求的频率,进行第二次过滤,再对DNS进行第三次过滤,过滤完后返回过滤结果

参数说明: HttpRequest request:是用户请求信息,含有用户代理信息以及用户 的请求参数,含有用户的 IP、访问时间、mac 地址、访问目标等

返回值说明:返回是否成功屏蔽。返回值为非null的HttpRequest为过滤后的用户请求,返回值为null则代表该用户被屏蔽。

使用方法: 每当一个用户使用系统的时候,服务器请求数据,系统自动调用该模块,并且对请求做过滤检查来查看用户是否符合访问安全要求

前置条件: 应用服务器传来 Http 请求,传入的 request 中包含用户 IP、mac 地址、访问时间、访问目标

后置条件: 1、安全检测通过,用户可以访问系统,返回内容为HttpRequest,该HttpRequest中所含的请求参数列表被传入下一个模块的接口 2、安全检测不通过,用户发出http请求因为被系统判定为不安全而被屏蔽,用户将无法访问系统,请求被抛弃

设计方案分析: 当用户的请求到达系统时,用户发出的HttpRequest通过两个过滤器进行过滤, 如果输出结果依然是HttpRequest的话则表明通过安全性检测,如果结果输出 null 则此次 Http请求被忽略。模块设计为管道过滤器模式,过滤的策略(IP 安全性检测策略、同一IP访问频率检测策略、DNS安全性检测策略)可以灵活变动而不影响总体的结构。 Filter提供所有网络数据的过滤操作。pipe通过RuleDictionary获取屏蔽策略传递网络数据到Filter进行处理。如果一个过滤层的Filter条件被满足,过滤器对HttpRequest数据包做出相应改动(屏蔽的话改为null)

2.1 类图

设计说明: 该模块主要由这几个部分组成:FireWall,Pipe,RuleDictionary 和 Filter. IPFilter ,DNSFilter和 FrequencyFilter 继承Filter抽象类。RuleDictionary定义屏蔽规则,由Filter使用,如定义1秒内访问次数多于3次的IP视为Frequency屏蔽对象,规则设定可由changeRule()修改,提供开放性修改规则。HttpRequest通过Pipe在Filter之间传递,经过 IPFilter和FrequencyFilter的checkSecurity()方法过滤后,请求进入下一个模块。由此确保通过过滤后的用户请求不在规则所指定屏蔽范围内。

2.2 类描述

FireWall类

防火墙请求者,传递HttpRequest希望启用防火墙服务

Pipe类

管道类,用来在 filter 之间传递 HttpRequest 对象

RuleDictionary类

定义过滤条件,让filter根据其条件进行过滤,有修改方法可供系统维护者修改条件。

filter类

过滤器抽象类,定义了检查安全性的抽象性方法及启动和关闭过滤器的方法,checkSecurity()方法由子类具体实现。

IPFilter类

Filter的子类,负责根据对HttpRequest中的IP进行检测,当IP符合定义的规则将request传给FrequencyFilter,否则直接返回null,屏蔽用户访问请求

DNSFilter类

Filter的子类,负责根据对HttpRequest中的DNS进行检测,当DNS符合定义的规则将request传给FrequencyFilter,否则直接返回null,屏蔽用户访问请求

FrequencyFilter类

Filter的子类,对request对象所对应的IP所发出的请求频率(一秒钟请求多少次)进行检查,若高于所规定频率则判断为非人类操作行为,直接返回null,不返回HttpRequest,屏蔽用户访问请求。

FireWall中方法 功能
startFireWall 从用户发送HttpRequest开始请求调用防火墙进行过滤,传递request给pipe
RuleDictionary中方法 功能
achieveRule 获取定义的屏蔽规则
changeRule 改变屏蔽规则
Pipe中方法 功能
achieveHttpRequest 获取进入管道的 HttpRequest 对象
RequestResult 向过滤器传入 HttpRequest 对象
Filter中方法 功能
startFiltering 启动过滤器
endFiltering 关闭过滤器
checkSecurity 根据过滤规则进行过滤
filterConfig 根据规则进行过滤器配置
addFilter 增加一个过滤器
removeFilter 删除一个过滤器
IPFilter中方法 功能
checkSecurity 根据IP过滤规则检查IP是否是被指定屏蔽的,如果是则返回null,不是则返回HttpRequest给管道传递给下一个过滤器
FrequencyFilter中方法 功能
checkSecurity 根据同一个IP访问频率规则检查 该用户是否为人类行为,如果不是则返回null,是则返回HttpRequest给管道传递给下一个过滤器
DNSFilter中方法 功能
checkSecurity 根据DNS过滤规则检查 DNS 是否是被指定屏蔽的,如果是则返回null,不是则返回HttpRequest给管道传递给下一个过滤器

重要的数据结构描述 | 数据结构 | 描述 | | :--- | :--- | |用户请求 HttpRequest|其中有用户信息,请求参数,用户代理信息 | |规则配置 ConfigFilter|其中有过滤器过滤规则参数 |

三、重要协作

顺序图

状态图

四、设计模式应用

pipe-filter风格

firewall模块使用了pipe-filter设计模式。模块含有三个具体的过滤器:IP过滤、DNS过滤、高频检测过滤。分别从管道获取Http请求然后对于过滤对象进行检测。具体步骤为先对IP进行检测,如果发现是需要屏蔽的IP,则返回null,隔离访问,如果发现不是要屏蔽的IP,则将HttpRequest返回至管道,再进行特定DNS检测,同样的方法再进行对IP访问频率的检测。按照《POSA(面向模式的软件架构)》里的说法,管道过滤器(Pipe-And-Filter)应该属于架构模式,因为它通常决定了一个系统的基本架构。管道过滤器和生产流水线类似,在生产流水线上,原材料在流水线上经一道一道的工序,最后形成某种有用的产品。在管道过滤器中,数据经过一个一个的过滤器,最后得到需要的数据。这对防火墙设计来说是高效且安全的,因为如果一个被设定为屏蔽的IP访问,在第一道过滤器就被隔离了,不会进行下面的过滤器检测,提高了时间效率。且pipe-filter将数据流传递与过滤操作分离,提高安全性。

策略设计模式

策略模式是对算法的封装,它把算法的责任和算法本身分割开,委派给不同的对象管理。策略模式通常把一个系列的算法封装到一系列的策略类里面,作为一个抽象策略类的子类。在firewall中,将filter抽象出来,过滤算法由每个具体的filter实现,是一种策略设计模式。使用策略设计模式有易修改性、高复用性等优势。

results matching ""

    No results matching ""