目录
决策引擎-利用Drools实现简单防火墙策略
1、简单防火墙策略
2、策略对象,决策引擎实现
3、Drools的规则对象框架
4、规则文件
决策引擎可以用于网络安全规则,金融欺诈,信用评估,电商促销策略等决策场景。
本例中,利用Drools实现引擎框架,只考虑从策略到规则部分,将制定网络防火墙策略。网络防火墙主要搞清楚策略的作用,入站策略主要控制其他主机对本主机的访问权限,出站策略则主要控制本主机对其他主机的访问权限,只有搞清楚到底是谁要访问谁,策略做了才能按照预期目的生效。在策略实现中,IP,端口,协议,访问范围等作为重要的管控对象的属性。
防火墙策略需求,比如需要给制定一个简单的防火墙策略,计算机需要允许被远程访问,包括远程桌面访问,SSH访问。
入站、出站的规则中包括程序,IP,端口,协议(TCP、UDP),执行动作包括允许连接,只允许安全连接,阻止连接,应用的域(专用、公用)
规则1:远程桌面,共享文件,则需要放通自身的445端口,就可以按照如下操作:
rule RDP 端口==445,协议==TCP,执行:允许连接访问
规则2:又比如,计算机需要被SSH远程访问,则需要放通自身的22端口,就可以按照如下操作:
rule SSH 端口==22,协议==TCP,执行:允许连接访问
package rules.rulesHello //规则逻辑路径 rule "ruletest001" //rule 规则开始 "ruletest001" 规则名 when eval(true); //规则判断条件 then System.out.println("Hello world"); //规则执行返回结果 end //规则结束
规则文件内容包含三大块 :包路径,引用,规则体(核心)
而规则体又分为 LHS,RHS两大功能模块:
1.LHS(Left Hand Side):条件部分,when与then中间部分
2.RHS(Right Hand Side):结果部分,then与end中间部分
Drools规则引擎中传递的数据,术语称Fact对象,Fact对象是一个普通的JavaBean,规则体可以对当前对象进行任何的读写操作。Fact插入Working Memory(内存储存)。
关键字 | 描述 |
---|---|
rule | 规则开始,参数是规则的唯一名称 |
attributes | 规则属性,是rule与when之间的参数,为可选项 |
when | 规则条件部分,默认为true |
then | 规则结果部分 |
end | 当前规则结束 |
规则体中LHS部分绑定变量基本上两种形式:
一种:整个Fact变量的绑定
rule "rule1" when $customer:Customer(age>25,gender=='male') then .... end
另一种:约束条件属性变量的绑定
rule "rule1" when $customer:Customer(age>25,$g:gender=='male') then .... end
约束连接
“&&”(and) "||"(or) ","(and)
contains 比较操作符:
语法:Object(field[Collection/Array] contains|not contains value)
memberOf 比较运算符:
判断某个Fact对象的某个字段是否在一个或多个集合中
语法:Object(fieldName memberOf|not memberOf value[Collection/Array])
matches比较运算符:
用来对某个Fact对象的字段与标准的Java正则表达式进行相似匹配
语法:Object(fieldName matches|not matches "正则表达式")
str 比较运算符:
检查String字段是否以某一值开头/结尾,还可以判断字符串长度
语法:Object(fieldName str[startsWith|endsWith|length])
注释行:package | 包路径 | ||
---|---|---|---|
关键字 | RuleSet | rulesTwo.isXls | |
关键字 | RuleTable 测试规则 | ||
关键字 | CONDITION | ACTION | |
条件区 | |||
条件区 | eval(true); | System.out.println("$param"); | |
条件注释行 | |||
规则值说明 | 测试规则_7 | ||
规则值说明 | 测试规则_8 | ||
规则值说明 | 测试规则_9 |
1.RuleSet和drl文件中package功能是一样的,为必填项
2.RuleTable和drl文件中规则名称的功能是一样的,为必填项
3.CONDITION和规则体中LHS部分功能是一样的,为必填项
4.ACTION和规则体中RHS部分功能是一样的,为必填项
使用规则文件控制策略。
firewall.drl
// created on: Oct 30, 2023 package firewall // list any import classes here. import com.net.ItemNet; // declare any global variables here dialect "java" rule "Acess Host RDP" when $item : ItemNet (inPort == ItemNet.Port.RDP, inProtol == ItemNet.Protol.TCP) then item.setAcessRange (ItemNet.Range.All); end rule "Acess Host SSH" when $item : ItemNet (inPort == ItemNet.Port.SSH, inProtol == ItemNet.Protol.TCP) then item.setAcessRange (ItemNet.Range.All); end
End