利用 Python 分析 Juniper SRX 防火墙策略

本文介绍了如何利用Python分析Juniper SRX防火墙策略,以解决配置复杂、客户理解困难的问题。通过获取XML配置,转换为JSON并解析策略,然后存入数据库和Excel,实现策略的可视化和准确性提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

01

背景描述

某客户部署在 DMZ 区的 SRX 345 防火墙之前是透明模式部署在网络内,现需要对其增加 4 层的安全策略,由于涉及到大量客户端与服务器通信的需求,以及服务器之间通信的需求,且网段规划不合理,网关在核心上,导致策略比较混乱。

整体配置策略调试花了三周左右,期间多次更改策略,需要和客户核对,并且需要对接多个部门负责应用的人确认业务的流量。

SRX 的命令网络工程师看还可以,但是客户对防火墙不是很了解,所以需要自动化的方式将策略整理为其他形式,例如 excel 的方式更直观,同时准确性也得到了保证,这一点非常重要。

02

Juniper 策略的基本知识

一条策略包含如下内容

  • policy-name

  • from-zone

  • to-zone

  • source-address

    不是直接写地址,而是  address-book 或 address-set

  • destination-address

    同 source-address 一样

  • application

  • action

  • address-set

    包含一个或多个address-book

  • address-book

    包含一个地址或域名

03

实现流程

  1. 获取 SRX 策略的配置

    Juniper 的 Junos 可以输出多种配置方式,例如 set 类型的配置命令、xml、json(12版本不支持),为使代码有更强的适应性,使用了 xml 格式的源配置文件

    如下代码定义一个函数将 xml 转为 json 格式,方便分析

    def xml_to_json(xml_str):
        xmlparse = xmltodict.parse(xml_str)
        jsonstr = json.dumps(xmlparse, indent=1)
        return jsonstr
  2. 获取  address_book 与 address_set

  3. def get_address_book():
         finnal_address_list = []
         # os.chdir('/Users/houmingming/cache')
         with open('SRX345config.xml') as file:
             j = json.loads(xml_to_json(file.read()))
    
         address_book_raw = j['rpc-reply']['configuration']['security']['address-book']
    
         for x in address_book_raw['address']:
             try:
                 finnal_address_list.append([address_book_raw['name'], x['name'], x['ip-prefix'], 'ip-prefix'])
             except KeyError:
                 finnal_address_list.append([address_book_raw['name'], x['name'], x['dns-name']['name'], 'dns-name'])
    
         address_book_set = address_book_raw['address-set']
         for x in address_book_set:
             for i in x['address']:
                 for y in finnal_address_list:
                     if i['name'] == y[1]:
                         y.insert(1, x['name'])
    
         for x in finnal_address_list:
             if len(x) == 4:
                 x.insert(1, 'None')
    
         return finnal_address_list
     def get_address_set():
         # os.chdir('/Users/houmingming/cache')
         with open('SRX345config.xml') as file:
             j = json.loads(xml_to_json(file.read()))
    
         address_book_raw = j['rpc-reply']['configuration']['security']['address-book']['address-set']
    
         finally_address_set = []
    
         for x in address_book_raw:
             for i in x['address']:
                 # print(i['name'])
                 finally_address_set.append([x['name'], i['name']])
         return finally_address_set
  4. 分析策略

    从字典中获取策略包含的元素,并返回一个列表

    def policy_analysis():
        with open('SRX345config.xml') as file:
            j = json.loads(xml_to_json(file.read()))
    
        finally_policy = []
    
        for value in j['rpc-reply']['configuration']['security']['policies']['policy']:
            for x in value['policy']:
                try:
              
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值