Powershell转换防火墙策略
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,需求昨天在群里 有人提供了一些防火墙的策略文本,询问如何能够在PowerShell里面转换为对象。文本样例如下所示rule id 39 action permit src-zone "Any"
千家信息网最后更新 2025年01月23日Powershell转换防火墙策略
需求
昨天在群里 有人提供了一些防火墙的策略文本,询问如何能够在PowerShell里面转换为对象。
文本样例如下所示
rule id 39 action permit src-zone "Any" dst-zone "Any" src-addr "Any" dst-addr "Any" service "Any"exitrule id 46 action permit src-zone "Any" dst-zone "Any" src-addr "Any" dst-addr "Any" service "PING"exitrule id 11 action permit src-zone "untrust" dst-zone "trust" src-addr "nqtwgroup" dst-addr "zj-wtqzgroup" service "wtqz_group" name "zj-nqtw-wtqz"exit
方案1
因为这个文本看起来很有规律,所以第一个方案是使用 convertfrom-string这个命令,配合自己定义的模板,可以把这些字符串转换为PS对象。
$t=@'rule id {ID*:39} action {action:permit} src-zone {srz_zone:"Any"} dst-zone {dst_zone:"Any"} src-addr {src_addr:"Any"} dst-addr {dst_addr:"Any"} service {service_addr:"Any"} {name:""}exitrule id {ID*:46} action permit src-zone "Any" dst-zone "Any" src-addr "Any" dst-addr "Any" service "PING"exitrule id 11 action permit src-zone "untrust" dst-zone "trust" src-addr "nqtwgroup" dst-addr "zj-wtqzgroup" service "wtqz_group" name "zj-nqtw-wtqz"exit'@ConvertFrom-String -TemplateContent $t -InputObject $st | ft -AutoSize
简单的解释一下这个模板是怎么设计的,把整个文本copy过来,在上面开始修改,比如我所需要的模板的每一行的开始需要用*进行标明,大括号{}里面的键值对,键是自己取的名字,后面的值是文本的原先的内容;PS会自动根据规律来生成对应的对象。
具体的命令解释可以参见 https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/convertfrom-string?view=powershell-5.1
结果如下所示:
ID action srz_zone dst_zone src_addr dst_addr service_addr-- ------ -------- -------- -------- -------- ------------39 permit "Any" "Any" "Any" "Any" "Any" 46 permit "Any" "Any" "Any" "Any" "PING" 11 permit "untrust" "trust" "nqtwgroup" "zj-wtqzgroup" "wtqz_group"
咋一看好像需要的结果都有了,不过仔细观察 发现文本每一块策略的内容略微有些不太一样,比如说有些rule还多了个name的属性,这样的话如果不统一,一个单一的模板就对不上所以的内容了。
方案2
传统的正则+字符串拼接处理
#原始文本 $st=@"rule id 39 action permit src-zone "Any" dst-zone "Any" src-addr "Any" dst-addr "Any" service "Any"exitrule id 46 action permit src-zone "Any" dst-zone "Any" src-addr "Any" dst-addr "Any" service "PING"exitrule id 11 action permit src-zone "untrust" dst-zone "trust" src-addr "nqtwgroup" dst-addr "zj-wtqzgroup" service "wtqz_group" name "zj-nqtw-wtqz"exit"@$r=@()#正则进行多行匹配,获取每一个rule的块$st | Select-String '(?smi)rule id [1-9]{2}.*?exit' -AllMatches | Foreach {$_.Matches} | Foreach { #替代一下空格和换行符,这样更规整,方便处理 $temp=$_.value -replace 'rule id','rule-id' $temp=$temp -replace 'exit', '' $temp=$temp -replace '\r\n',',' $list=$temp.split(',') $object = New-Object -TypeName PSObject try{ foreach($item in $list){ $c=$item.trim().split() $name=$c[0] $value=$c[1] $object | Add-Member -NotePropertyName $name -NotePropertyValue $value -ErrorAction SilentlyContinue }}catch{} $r+=$object}$r | select rule-id,action,src-zone,dst-zone,src-addr,dst-addr,service,name | ft
最后结果如下所示,成功获取了所以的信息
rule-id action src-zone dst-zone src-addr dst-addr service name ------- ------ -------- -------- -------- -------- ------- ---- 39 permit "Any" "Any" "Any" "Any" "Any" 46 permit "Any" "Any" "Any" "Any" "PING" 11 permit "untrust" "trust" "nqtwgroup" "zj-wtqzgroup" "wtqz_group" "zj-nqtw-wtqz"
文本
模板
内容
对象
方案
结果
策略
命令
字符
字符串
正则
规律
处理
解释
防火墙
防火
原始
规整
成功
这样的话
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
“互联网+”科技服务
错误的网络安全定义
2015年软件开发职位
计算机网络安全的论文题目
江西凤凰增强网络安全意识
北京景海软件开发科技有限公司
5g测试服务器账号和密码
计算机网络技术班的班会
网络安全涉及物理方面
对计算机网络技术的评价
山东千石网络技术
西安球员上数据库
服务器散热片加工厂
宠物商店数据库基本表
网络安全法规解析
吉林联客网络技术有限公司
魔天网络技术有限公司
农业数据库的分类
x86服务器是软件还是硬件
cs服务器后台管理
泰拉瑞亚联机服务器ip地址是什么
徐州智能建模软件开发
如何做好软件开发的项目助理
数据库与网络基础考研
湘潭快速软件开发哪家好
总是显示网络安全证书到期
数据库lmac基本原理
湖南pdu服务器电源定制
五年级400字网络安全作文
明中医经验数据库