决策引擎-利用Drools实现简单防火墙策略

决策引擎-利用Drools实现简单防火墙策略

目录

决策引擎-利用Drools实现简单防火墙策略

1、简单防火墙策略

2、策略对象,决策引擎实现

3、Drools的规则对象框架

4、规则文件


决策引擎可以用于网络安全规则,金融欺诈,信用评估,电商促销策略等决策场景。

本例中,利用Drools实现引擎框架,只考虑从策略到规则部分,将制定网络防火墙策略。网络防火墙主要搞清楚策略的作用,入站策略主要控制其他主机对本主机的访问权限,出站策略则主要控制本主机对其他主机的访问权限,只有搞清楚到底是谁要访问谁,策略做了才能按照预期目的生效。在策略实现中,IP,端口,协议,访问范围等作为重要的管控对象的属性。

1、简单防火墙策略

防火墙策略需求,比如需要给制定一个简单的防火墙策略,计算机需要允许被远程访问,包括远程桌面访问,SSH访问。

2、策略对象,决策引擎实现

入站、出站的规则中包括程序,IP,端口,协议(TCP、UDP),执行动作包括允许连接,只允许安全连接,阻止连接,应用的域(专用、公用)

规则1:远程桌面,共享文件,则需要放通自身的445端口,就可以按照如下操作:

rule RDP 端口==445,协议==TCP,执行:允许连接访问

规则2:又比如,计算机需要被SSH远程访问,则需要放通自身的22端口,就可以按照如下操作:

rule SSH 端口==22,协议==TCP,执行:允许连接访问

3、Drools的规则对象框架

KIE (Knowledge Is Everything)
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当前规则结束

pattern(匹配模式)

规则体中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包路径
关键字RuleSetrulesTwo.isXls
关键字RuleTable 测试规则
关键字CONDITIONACTION
条件区
条件区eval(true);System.out.println("$param");
条件注释行
规则值说明测试规则_7
规则值说明测试规则_8
规则值说明测试规则_9

1.RuleSet和drl文件中package功能是一样的,为必填项

2.RuleTable和drl文件中规则名称的功能是一样的,为必填项

3.CONDITION和规则体中LHS部分功能是一样的,为必填项

4.ACTION和规则体中RHS部分功能是一样的,为必填项

4、规则文件

使用规则文件控制策略。

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


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alex_StarSky

你的鼓励是创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值