本文,介绍一种。通过Django框架,搭建API服务器,并通过此API服务器管理华为防火墙。并以此衍生出,通过Django+Python+ssh的方式管理网络设备的方法。

关于Django环境的搭建,请参照逗老师之前的一篇文章。
【逗老师带你学IT】Django+IIS+Python构建微软AD域控API管理中心

搭建完环境之后,设计以下Python脚本,并import到Django的views中。

我们通过下面这个脚本举例,,主要说明一下如何通过Python脚本远程ssh登录网络设备,并进行配置。

下面这个脚本实现的功能是对指定的address-set对象组添加IP地址,实现防火墙策略的自动化管理。
例如某台服务器默认不允许所有流量访问,但是通过OA系统审批后,可以指定添加某个IP访问此服务器。通过此Python脚本可以实现自动对防火墙进行配置的目的。

目录

  • 一、防火墙域间策略和address-set对象组
  • 二、H3C、HUAWEI 设备开启ssh登录功能
  • 三、python paramiko模块ssh登录网络设备
  • 四、python paramiko模块回显抓取
  • 五、最终效果

一、防火墙域间策略和address-set对象组

对于防火墙的域间策略,通常会引用地址组作为策略生效对象。华为叫做address-set,华三叫做object-group,都是一个意思。
例如下面这个策略,表示源地址在NAT_Internet地址组内IP,可以出网访问Internet。

#
security-policyrule name trust_出网NAT访问Internetsource-zone trustdestination-zone untrustsource-address address-set NAT_Internetaction permit
#
ip address-set NAT_Internet type groupdescription NAT访问Internet允许源主机组address 0 172.16.64.69 mask 32

因此,我们在自动化运维之前,配置好域间策略和address-set地址组。后续只需要对address-set地址组追加地址即可。

二、H3C、HUAWEI 设备开启ssh登录功能

H3C配置举例

#
ssh server enable
#
local-user admin class managepassword hash $h$6$f+j7WzEYItlWRcVKQ==service-type ssh terminal httpsauthorization-attribute user-role level-3authorization-attribute user-role network-adminauthorization-attribute user-role network-operator
#
line vty 0 63authentication-mode schemeuser-role network-admin
#

HUAWEI配置举例

#
stelnet ipv4 server enable
#
aaalocal-user admin password irreversible-cipher $1a$\V >WBN:~2SM3gq!y6$local-user admin privilege level 15local-user admin service-type terminal ssh http
#
user-interface vty 0 4authentication-mode aaaprotocol inbound ssh(all)#注意,华为的user-interface接口下需要绑定入站协议,可以选择all,也可以只选ssh或者telnet
user-interface vty 16 20
#

验证ssh登录

三、python paramiko模块ssh登录网络设备

下面代码片段举例介绍,如何通过paramiko模块ssh登录网络设备。
paramiko模块需要单独安装,安装命令

pip install paramiko

如果想通过Python登录设备执行一些命令(比如 reboot),以下代码片段就够了。

import paramiko
import time
import re
import sys
client = paramiko.SSHClient()
client.load_system_host_keys()
know_host = paramiko.AutoAddPolicy()
client.set_missing_host_key_policy(know_host)
client.connect('192.168.0.1',22,'admin','password',allow_agent=False,look_for_keys=False)
#这里改成你设备的IP地址和用户名密码
# get shell
ssh_shell = client.invoke_shell()
# ready when line endswith '>' or other character
while True:line = ssh_shell.recv(1024)if line and str(line).endswith(">'"):#登录后等待设备出现>标识,稳定后输入命令break;# 发送命令
ssh_shell.sendall( 'ping 127.0.0.1' + '\n')

四、python paramiko模块回显抓取

如果对执行的命令还需要抓取回显,则需要要追加几行简单的代码。
paramiko的回显抓取深究起来可以专门出一篇文章,涉及ssh管道、字符编码,tcp传输期间的占位符等等。我们这里不深究,直接上一个例子大家拿去用就好了。

# send command
ssh_shell.sendall( 'ping 127.0.0.1' + '\n')# get result lines
lines = []
while True:line = ssh_shell.recv(1024)if line and str(line).endswith(">'"):break;lines.append(line.decode(encoding='utf-8', errors='strict'))
result = ''.join(lines).replace('\r\r','').split('\n')for i in result:print(i)

如此,我们得到了一个list类型的返回值,其中存放着ssh命令回显的每一行,每行占一个元素。
中间插个print,检验一下结果:
上面两行代码,拼在一起,找个python环境直接运行就行,人品好的大概率不报错。

五、最终效果

以下代码,主要逻辑是:
1、传入一个或多个IP地址组,中间用分号分割,例如192.168.1.1;192.168.1.2;192.168.1.3。之后用分号作为切片关键字。
2、传入申请人名字,作为description添加到防火墙的命令里
3、传入防火墙设备IP,也可以支持多台设备一起配置。
4、ssh登录设备,等待指定字符串出现后,输入命令
5、通过传入的参数,构建出address x.x.x.x mask 32 description xxxx的命令行,向address-set中添加记录
6、对所有传入的IP地址,逐个IP通过dis ip address-set address x.x.x.x命令检查是否添加成功。找到该IP地址认为添加成功。
7、返回值,0成功。任何一个IP地址没找到,返回值>0,表示不成功。

具体的解释,看注释

# encoding=utf-8import datetime
import re
import sys
import time
import requests
import paramiko
import time
client = paramiko.SSHClient()
client.load_system_host_keys()know_host = paramiko.AutoAddPolicy()
client.set_missing_host_key_policy(know_host)#等待指定字符串
#对于网络设备,等待>出现的时候,表示命令行定位到了可以输入命令的状态
def check_CLI_str(ssh_shell,str):while True:line = ssh_shell.recv(1024)#print lineif line and line.decode(encoding='utf-8', errors='strict').endswith(str):break;def add_Internet_IP(deviceip,ip_list,username):# connect to clientclient.connect(deviceip,1500,'admin','passwordn',allow_agent=False,look_for_keys=False)# get shellssh_shell = client.invoke_shell()# 需要等待">"字符出现check_CLI_str(ssh_shell,'>')#开始输入命令,进行设备配置ssh_shell.sendall( 'system' + '\n')#进入system视图后,需要等待"]"字符出现check_CLI_str(ssh_shell,']')# 进入address-set视图ssh_shell.sendall( 'ip address-set NAT_Internet type group' + '\n')# 添加所有的IP地址,掩码长度/32for ip in ip_list:ssh_shell.sendall( 'address %s mask 32 description %s'%(ip,username) + '\n')check_CLI_str(ssh_shell,']')ssh_shell.sendall( 'quit' + '\n')ssh_shell.sendall( 'quit' + '\n')check_CLI_str(ssh_shell,'>')result_int=0# 检查所有的IP地址是否添加成功for ip in ip_list:ssh_shell.sendall( 'dis ip address-set address %s'%ip + '\n')lines = []while True:line = ssh_shell.recv(1024)if line and line.decode(encoding='utf-8', errors='strict').endswith('>'):break;lines.append(line.decode(encoding='utf-8', errors='strict'))result = ''.join(lines)if 'NAT_Internet' in result:#成功,result_int不变result_int=result_intelse:#成功,result_int+1result_int=result_int+1return result_intdef Firewall_Add_Internet_IP(ip_list_str,username):try:ip_list=ip_list_str.split(';')#多台设备依次执行run_result_1=add_Internet_IP('10.168.254.130',ip_list,username)run_result_2=add_Internet_IP('10.168.255.130',ip_list,username)#统计多台设备的添加结果run_result=run_result_1+run_result_2except Exception as err:raise errelse:return run_resultif __name__ == '__main__':#运行脚本的时候传入两个系统变量Firewall_Add_Internet_IP(sys.argv[1],sys.argv[2])

好啦,搞定。希望能帮到大家

往期回顾:
【逗老师带你学IT】PRTG获取HUAWEI FusionServer iBMC传感器状态
【逗老师带你学IT】PRTG自定义脚本ssh登录网络设备获负载均衡链路状态
【逗老师带你学IT】Django+IIS+Python构建微软AD域控API管理中心
【逗老师带你学IT】通过企业微信推送AD域密码即将到期提醒
【逗老师带你学IT】AD域控 Dsquery 查询命令实例汇总
【逗老师带你学IT】Google Admin服务账号+API管理G suit内所有网域用户
【逗老师带你学IT】PRTG监控系统通过企业微信推送图文混排告警消息
【逗老师带你学IT】PRTG HTTP API获取指定传感器流量图表图片
【逗老师带你学IT】PRTG监控系统合并多个传感器通道数据
【逗老师带你学IT】PRTG监控系统通过企业微信推送告警消息
【逗老师带你学IT】PRTG监控系统配合树莓派采集企业内部无线网络质量
【逗老师带你学IT】vMware ESXi 6.7合并第三方硬件驱动
【逗老师带你学IT】Kiwi Syslog Server安装和配置教程
【逗老师带你学IT】Kiwi Syslog Web Access与Active Directory集成认证
【逗老师带你学IT】vMware ESXi 6.7合并第三方硬件驱动
【逗老师带你学IT】Windows Server Network Policy Service(NPS)记账与审计
【逗老师带你学IT】Windows Server NPS服务构建基于AD域控的radius认证
【逗老师带你学IT】AD域控和freeradius集成认证环境,PAP,MSCHAPV2
【逗老师带你学IT】深信服SSL远程接入与深信服行为审计同步登陆用户信息

【逗老师带你学IT】HUAWEI华为防火墙自动化运维Python ssh管理网络设备相关推荐

  1. 【逗老师带你学IT】PRTG监控通过Python+Modbus RTU获取温湿度传感器数据

    前文[逗老师带你学IT]PRTG监控通过Python+TCP Modbus获取温湿度传感器数据中我们讲了如何通过Python读取支持TCP Modbus的传感器数据.本章我们讲解下如何读取Modbus ...

  2. 【逗老师带你学IT】职场数据中心异地出口容灾,H3C的IP上一跳保持技术

    本文介绍,如何通过IP上一跳保持的方式,使多个城市的公网出口可以同时为一台服务器提供DNAT映射,并确保回包路由正确. 目录 一.需求背景和拓扑 二.入站DNAT(Destination Networ ...

  3. 【逗老师带你学IT】PRTG监控通过Python通过串口监控UPS运行状态,PRTG值查询功能定义

    本文主要介绍,如何通过串口获取UPS主机的运行状态,并通过PRTG统计监控和告警. 不同UPS主机厂的串口通信协议不同,但是市面上有一种比较通用的协议,如果你使用的是EATON,山特等等国产UPS,大 ...

  4. 【逗老师带你学IT】PRTG监控通过Python+TCP Modbus获取温湿度传感器数据

    本文介绍,Python如何通过TCP Modbus协议获取温湿度传感器数据.并在PRTG监控系统中呈现. 本文主要涉及知识点: 1.Python的ModbusTCP客户端实现 2.常见温湿度传感器中, ...

  5. 【逗老师带你学IT】PRTG获取HUAWEI FusionServer iBMC传感器状态

    本文介绍如何使PRTG获取HUAWEI FusionServer iBMC传感器状态.以及衍生出如何通过ipmi通用协议监控所有服务器的带外管理状态. 本文主要涉及的技术点: 1.服务器ipmi命令行 ...

  6. 【逗老师带你学IT】PRTG安装教程-部署简单功能强大的监控软件

    一.PRTG简介 个人总结PRTG的优点: 1.脑残化部署,Windows下直接双击安装,剩下的全靠点点点. 2.脑残化使用,全程点点点即可完成添加加设备.加监控点. 3.强大的性能,支持数万个传感器 ...

  7. 【逗老师带你学IT】Kiwi Syslog Server安装和配置教程

    Kiwi Syslog Server是一款应用于Windows系统的系统日志守护进程,能够接收并记录系统日志,各种设备的SYSLOG消息,内置丰富的日志记录选项,能详细记录各种防火墙日志,并进行筛选分 ...

  8. 【逗老师带你学IT】Kiwi Syslog转存MySQL数据库

    本文介绍如何利用Kiwi Syslog将日志转存到MySQL数据库. 关于如何搭建Kiwi Syslog日志服务器,请参考: [逗老师带你学IT]Kiwi Syslog Server安装和配置教程 [ ...

  9. 【逗老师带你学IT】Kiwi Syslog Web Access与Active Directory集成认证

    Kiwi Syslog Server是一款应用于Windows系统的系统日志守护进程,能够接收并记录系统日志,各种设备的SYSLOG消息,内置丰富的日志记录选项,能详细记录各种防火墙日志,并进行筛选分 ...

最新文章

  1. 用python实现TCP协议传输功能(服务端代码)
  2. python当中的生成器
  3. 我的第一个IT产品:PublicLecture@HK【My First IT Product】
  4. 瑞柏匡丞_移动互联的发展现状与未来
  5. React Antd中样式的修改
  6. duino例程 stm32_stm32duino
  7. [zz]How to sign .EXE, .DLL and .CAB files?
  8. Python+django网页设计入门(16):优化设计复用分页代码
  9. 三大执业考试爆泄题丑闻 部分助考机构成泄题中介
  10. IO流(1)-键盘录入学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低存入文本文件...
  11. linux glibc安装mysql_Linux安装MySQL-5.6.24-1.linux_glibc2.5.x86_64.rpm
  12. INSERT INTO SELECT语句概述和示例
  13. 【考研高数 自用】高数第一章基础阶段思维导图
  14. 计算机视觉教程2-3:图解双线性插值算法最近邻插值算法
  15. 提升研发质量的三个办法
  16. python怎么算阶乘_python专家写阶乘 ()用python计算阶乘
  17. CENTOS 7 静默安装 ORACLE 19C
  18. 编译x86 release版本libcurl,支持https
  19. 用js做购物界面的常用效果
  20. 广告行业中那些趣事系列51:超牛的kaggle比赛Favorita Grocery Sales Forecasting冠军方案...

热门文章

  1. 求武汉前端工程师围观
  2. c语言break语句作用,解析c语言switch中break语句的具体作用
  3. 免费数据上新 | CnOpenData中国上市公司信息披露评分数据
  4. Docker 基本原理
  5. cesium编辑功能CesiumEdit.js
  6. 寒冬之时,滚烫的社区团购与桎梏中的盒马、永辉
  7. Padre中不能显示中文的解决办法。
  8. VaR风险价值:Stata及Python实现
  9. 在视频直播软件开发中,这样做才能实现svga格式礼物动画
  10. 下载批量上传试题的模板