zoukankan      html  css  js  c++  java
  • 防火墙ACL配置自动化方案探讨

    主要介绍了一些各品牌防火墙配置自动化生成的思路,功能包括核查现有配置,判断是否需要新增配置,以及自动生成新增配置命令。并且在新增配置中,如何有效结合调用现有配置,避免在自动化生成的过程中引起防火墙配置量的野蛮增长,产生大量冗余配置。


    1,ACL配置命名规范
    ACL新增配置时的命名主要存在如下问题:
    需求A: permit 10.10.10.1, 10.10.10.2 (OBJ_GROUP_A) --->  20.20.20.1:80,443
    需求B: permit 10.10.10.3, 10.10.10.4 --->  20.20.20.1:80,443
    需求C: permit 10.10.10.5, 10.10.10.6 --->  20.20.20.1:80,443
    需求D: ......

    需求A和后续需求访问的目的地址和目的端口是一样的。因此目的地址组,以及目的端口组(思科),可以直接调用已有配置,但是源地址组是新建,还是直接将后续新增地址加入到地址组OBJ_GROUP_A中呢?
    1)如果来一个需求就新建源地址组,经过N个需求后就会产生N条源地址组以及N条ACL策略,自动化过程中配置量可能会野蛮增长。
    2)如果直接往A需求的源地址组中添加新增地址,存在如下问题:
    如果该源地址组被其他ACL调用,则可能扩大了其他ACL的访问范围, 例如还开通了permit OBJ_GROUP_A ---> 30.30.30.1:22
    更糟糕的是如果被反方向deny调用,则可能影响现有系统的访问,例如还开通了deny 20.20.20.1 ---> OBJ_GROUP_A:80

    综上所述:
    地址组名称可以被反复调用和地址组名称可以添加成员是一对矛盾
    可以被反复调用就不允许添加成员,可以添加成员就应该禁止被反复调用

    因此,假设有开通工单(唯一编号),定制如下命名规范:
    目的地址组名称: 所在防火墙接口_开通工单, 可以被其他同方向ACL调用但禁止添加成员
    源地址组名称: to_目的地址组名称_开通工单, 禁止被其他ACL调用但可以添加成员
    端口组名称(思科): 单个端口无需创建组名称, 多个端口可以根据工单名称创建端口组, 并且可以全局可以反复调用
    端口组名称(天融信/华为/juniper):无需创建端口组, ACL中可以直接罗列端口

    按此命名规范后:
    1)需求单GD00001: permit 10.10.10.1, 10.10.10.2 --->  20.20.20.1:80,443
    新建ACL:to_IntA_GD00001_GD00001(10.10.10.1, 10.10.10.2) ------->  IntA_GD00001(20.20.20.1): 80, 443
    2)需求单GD00002:permit 10.10.10.3, 10.10.10.4 --->  20.20.20.1:80,443
    将10.10.10.3, 10.10.10.4添加至to_IntA_GD00001_GD00001
    3)需求单GD00003: permit 10.10.10.1, 10.10.10.2 --->  20.20.20.1:22
    新建ACL:to_IntA_GD00001_GD00003(10.10.10.1, 10.10.10.2) ------->  IntA_GD00001(20.20.20.1): 22


    2,ACL配置自动化的思路
    主要涉及模块:
    1)防火墙配置实例化模块
    2)策略核查模块
    3)配置生成模块
    4)路径生成模块(需要结合公司实际场景定制)

    2.1,防火墙配置实例化模块
    对各品牌防火墙(思科、天融信、juniper、华为)不同版本的防火墙配置文件进行解析,转换为三张表格:
    表格一:地址表,记录地址组名称和地址组成员的对应关系
    表格二:端口表,记录端口组名称和端口组成员的对应关系
    表格三:ACL策略表,记录ACL主要信息

    备注:
    不同品牌防火墙记录信息会有差异,例如地址表中juniper需要记录区域信息
    主要采用正则表达式 + pandas每天定时对防火墙配置进行读取和解析,供后续模块调用
    返回的类型是表格, 可以通过excel, json, 数据库保存。数据库有点大材小用,excel表格单元格内数据量太大无法保存(例如地址组中有conf列会记录该地址组相关配置,如果成员数量过多就无法显示),推荐用json,后续模块调用时可以直接将json转pandas。

    2.2,策略核查模块
    策略核查模块针对输入的ACL访问需求,做如下核查:
    1)检查源地址、目的地址、目的端口, 三元素完全一致的ACL,返回所有命中的ACL(包括)
    2)检查目的地址、目的端口,两个元素完全一致的ACL,并且目的地址组命名符合第一章的命名规范的(添加源地址时避免影响存量不规范配置),返回该ACL所有信息
    备注:这里只是做最简单的描述,实际实现时,还涉及到协议tcp/udp,而且不同防火墙需要的acl字段也有差异,思科只需要传策略名,其他品牌防火墙还有源区域和目的区域等等。


    3, 配置生成模块
    这块比较简单,主要是结合策略核查模块的结果,以及各品牌防火墙的配置命令,做如下三步:
    1)三元素完全一致的ACL,并且第一条是permit的,直接反馈现有配置,无需新增配置
    2)三元素中有目的地址、目的端口,两个元素完全一致的ACL,直接将需求中的源地址往现有源地址组名称中添加
    3)根据本次工单号,依据命名规范,新增配置。新增配置时需要考虑是否有现有的目的地址组,端口组(思科)可以调用


    4,路径生成模块(需要结合公司实际场景定制)
    直接调用配置生成模块,不仅需要提供防火墙名称,防火墙端口等信息,如果涉及多个防火墙,还需要逐一罗列,对运维人员交互不友好
    因此还需要结合公司实际网络环境,定制各网段间访问的关系,例如A网段访问B网段经过哪几个防火墙,以及分别是涉及防火墙的哪几个接口,思科防火墙的入向策略名等等
    如果网络环境比较复杂可能全部罗列比较困难
    对于HUB-SPOKEN有环形网的场景,可以通过记录每个网段到环形网经过的防火墙(以及相应接口),这样所有通过环形网互相访问的网段就无需逐一罗列,同时再补充一张不经过环形网的特殊访问表即可


    后续会逐一对各模块实现细节和相应代码进行展开分析

     

  • 相关阅读:
    简单的JS控制button颜色随点击更改
    以 “月” 为单位的可以翻页的效果 显示为 2016年01月
    荷兰国旗 Flag of the Kingdom of the Netherlands
    最大连续子数组以及拓展
    Something Wrong or Something Right
    转载文章----十步完全理解SQL
    数据库关系代数练习题
    SQL server 2014安装以及解决连接数据库失败问题
    回文判断
    字符串的包含
  • 原文地址:https://www.cnblogs.com/guxh/p/14080847.html
Copyright © 2011-2022 走看看