Print

使用NETCONF为防火墙下发安全策略(Python ncclient模块实现)

组网及说明

设备:防火墙

型号:F1070

软件版本:D022及以上


说明:

1.1 NETCONF简介

  • NETCONFNetwork Configuration Protocol,网络配置协议)是一种基于XML的网络管理协议,他提供了一种可编程的、对网络设备进行配置和管理的方法。用户可以通过该协议设置属性、获取属性值、获取统计信息等。这使得他在第三方软件的开发上非常便利,很容易开发出在混合不同厂商、不同设备的环境下的特殊定制的网管软件。
  • ncclient是一个用于NETCONF客户端的Python库。它旨在体用一个直观的API,将NETCONF的XML编码特性映射到Python构造和习语,并使编写网络管理脚本更容易。

本次典型配置使用上述工具和组件为防火墙下发:禁止源地址为1.1.1.1的安全策略。

【附】

H3C Netconf配置相关指导

  • Comware 7 NETCONF XML API Reference(请拨打400售后获取)。

     


配置步骤

1,确保Python以及ncclient库已成功安装,安装操作指导可参考相关网上链接。以下操作无报错说明ncclient库已安装成功。

   


2,明确脚本下发步骤。使用NETCONF为防火墙下发安全策略主要有以下四步(通过查看API文档分别找出每一步相关模块XML格式):

  • 创建IPv4地址对象组

  • 创建IPv4地址对象

  • 创建安全策略规则

  • 安全策略规则中引用IPv4地址对象组

3,Python代码实现。

  • 设备开启NETCONF over SSH功能,确保NETCONF客户端到设备的830端口可通,且NETCONF使用的SSH用户已被分配权限。
  • 通过Python连接防火墙设备,并下发配置脚本。

from ncclient import manager

 

xml1 = """

<config

    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"

    xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">

    <top

        xmlns="http://www.h3c.com/netconf/config:1.0" xc:operation="create">

        <OMS>

            <IPv4Groups>

                <Group>

                    <Name>IPv4_1.1.1.1</Name>

                    <Description>IPv4_1.1.1.1</Description>

                    <SecurityZone>Trust</SecurityZone>

                </Group>

            </IPv4Groups>

        </OMS>

    </top>

</config>

"""

 

xml2 = """

<config

    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"

    xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">

    <top

        xmlns="http://www.h3c.com/netconf/config:1.0" xc:operation="create">

        <OMS>

            <IPv4Objs>

                <Obj>

                    <Group>IPv4_1.1.1.1</Group>

                    <ID>0</ID>

                    <Type>3</Type>

                    <HostIPv4Address>1.1.1.1</HostIPv4Address>

                </Obj>

            </IPv4Objs>

        </OMS>

    </top>

</config>

"""

 

xml3 = """

<config

    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"

    xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">

    <top

        xmlns="http://www.h3c.com/netconf/config:1.0" xc:operation="create">

        <SecurityPolicies>

            <IPv4Rules>

                <Rule>

                    <ID>1000</ID>

                    <RuleName>Drop_1.1.1.1</RuleName>

                    <Action>2</Action>

                </Rule>

            </IPv4Rules>

        </SecurityPolicies>

    </top>

</config>

"""

 

xml4 = """

<config

    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"

    xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">

    <top

        xmlns="http://www.h3c.com/netconf/config:1.0" xc:operation="create">

        <SecurityPolicies>

            <IPv4SrcAddr>

                <SrcAddr>

                    <ID>100</ID>

                    <SeqNum></SeqNum>

                    <IsIncrement>false</IsIncrement>

                    <NameList>

                        <NameItem>IPv4_1.1.1.1</NameItem>

                    </NameList>

                </SrcAddr>

            </IPv4SrcAddr>

        </SecurityPolicies>

    </top>

</config>

"""

 

 

with manager.connect(  

        host="172.31.0.24",

        port=830,

        username="admin",

        password="Admin@h3c!",

        hostkey_verify=False,

        device_params={"name":"h3c"},

        timeout=300

        ) as m:

       

        for xml in [xml1, xml2, xml3, xml3]:

                print (m.edit_config(target="running", config=xml))

 


4,查看运行结果。

    运行Python脚本,有以下OK返回值则表示配置下发成功。

<?xml version="1.0" encoding="UTF-8"?><rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:28f0e0b3-a542-471f-9757-3b0e9fdb190e"><ok/></rpc-reply>

<?xml version="1.0" encoding="UTF-8"?><rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:a016052e-e20d-4f1e-8713-cb18214cd08f"><ok/></rpc-reply>

<?xml version="1.0" encoding="UTF-8"?><rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:1b6d0c44-fb6d-43b2-b8ad-9cc35236e2d0"><ok/></rpc-reply>

<?xml version="1.0" encoding="UTF-8"?><rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:a677d53e-61ba-43e5-b5e8-6bffc941668a"><ok/></rpc-reply>




配置关键点

XML编写之前需要仔细阅读API文档,明确XML中 Table和Columns的定义和参数说明。