基于saltstack开发自动化开通主机防火墙策略工具

一、前言

企业安全防护策略中会要求操作系统开启防火墙,开启iptables防火墙后,对于业务网络访问意味着要经常去变更调整iptables防火墙策略。如果是管理几台服务器,手工登录操作下还能接受。但在实际大型IT架构中,可能涉及到的服务器成千上万,iptables变动起来如果没有自动化的手段那种痛苦可想而知。遇到过的痛苦比如有:

痛点1:云改数转之际,针对多系统上云过程中网络开放申请工单策略繁多且规则复杂(细化后一个工单,主机iptables策略可能面临成千上万条),需要梳理出全部的三元组关系(源地址、目的地址、目的端口),导致人工梳理通常需要大半天时间,给上云工作带来很大的困扰,急需一个便利的批量组合处理工具。

痛点2:现网环境不是全部都是统一的标准化iptables模板,有些历史主机iptables开放情况各不相同,每次开通规则前还需对主机iptables开放情况先进行确认,人工确认的方式耗时较大,急需一个工具可以自动判断iptables的实情。

痛点3:主机防火墙网络权限开放后,最后需要进行开放策略的验证探测,人工探测存在取样不充分,探测效率不高的情况,急需一个工具可以在策略开通后telnet自动验证策略开通情况。

二、实现过程

1、先从源头上规范定义申请工单内容,输出标准规范的网络申请模板《上云系统主机侧开放策略模板》,例如

2、定义好输入格式后,针对应用申请的一对多、多对多和多对一的网络权限要求,通过python编写组合处理程序,输入工单内容后,自动输出全部三元组对应关系,解决了"痛点一"的问题。

程序对应文件名"list.py"---由主shell脚本调用执行

python 复制代码
#!/usr/bin/python
# -*- coding: utf-8 -*-
# encoding=utf-8
import commands
import re
from itertools import combinations
from functools import reduce

inputf = open('/root/iptables/port.txt','r')
list1=[]
while True:
  line=inputf.readline()
  if (len(line)<1):
    break;
  outl=re.split('#',line)
  i=0
  while i<len(outl)-1:
    list1.append(outl[i])
    i=i+1
  list1.append(outl[i][0:-1])
#print list1
inputf.close()

inputf = open('/root/iptables/dest.ip','r')
list2=[]
while True:
  line=inputf.readline()
  if (len(line)<4):
    break;
  outl=re.split(',',line)
  i=0
  while i<len(outl)-1:
    list2.append(outl[i])
    i=i+1
  list2.append(outl[i][0:-1])
#print list2
inputf.close()


inputf = open('/root/iptables/source.ip','r')
list3=[]
while True:
  line=inputf.readline()
  if (len(line)<4):
    break;
  outl=re.split(',',line)
  i=0
  while i<len(outl)-1:
    list3.append(outl[i])
    i=i+1
  list3.append(outl[i][0:-1])
#print list3
inputf.close()


dict = {
    '目的地址':list1,
    '目的端口':list2,
    '源地址':list3,
}


lists=[]
def suiji(num):
    for key in combinations(dict.keys(), num):
        for i in key:
            lists.append(dict[i])
        # print(lists)
        code = '-'
        fn = lambda x, code='-': reduce(lambda x, y: [str(i) + code + str(j) for i in x for j in y], x)
        print(fn(lists, code))
        #lists.clear()
#  print('------------end----------')

if __name__ == '__main__':
        suiji(3)

3、通过调用list.py命令输出的结果,遍历策略中的目的地址,对目的地址的saltstack客户端和iptables情况进行分类汇总,输出到指定目录下指定文件。如果通过检测可salt且iptables为标准模板的主机,输出开放iptables的批量操作脚本,运行后即可批量开放对应主机权限;对于无法salt和非标准iptables的主机根据对应日志文件再进行人工判断处理。引用的程序对应文件名"chuli.sh",这一步解决了"痛点二"的问题。

4、最后,再根据策略中源地址salt情况,输出抽样telnet验证的批量操作脚本。关于telnet的拨测是使用了该文中介绍的telnetfull的工具。引用的程序对应文件名"chuli.sh",这一步解决了"痛点三"的问题。

telnetfull工具参考如下:

https://vincentwong.blog.csdn.net/article/details/135333290

三、实现效果

1、将应用申请的策略表格,按照模板规范要求检查没问题后,直接copy导入到chuli.txt文件中。例如:

2、然后执行命令 sh chuli.sh,输入处理的工单号

3、执行命令结束后无报错出现如下提示,表示执行处理正常。

4、执行结束后,在result子目录对应工单目录下生成8个结果文档

chuli.txt:备份工单提交的策略申请内容

Iptables-null:目标地址未启动iptables的策略清单,无需处理,输出记录。

Iptables-ok:目标地址已启动标准iptables的策略清单,作为输出自动脚本的传参文件。

Iptables-other:目标地址已启动非标准iptables的策略单,需人工查看继续判断处理

salt-notok:目标地址无法被salt管理的策略清单,需人工查看继续判断处理

salt_iptables.log: 自动输出的批量iptables开放脚本(开通策略无脑粘贴即可)

shuchu.log:根据提交的工单内容,组合输出的全部策略的三元组组合对应清单

salt_telnet.log:自动输出的批量telnet验证脚本(验证策略无脑粘贴即可)

5、 执行1-4的步骤后,大大提升了之前处理网络策略的时间,也解放了生产力。

相关推荐
爱喝热水的呀哈喽26 分钟前
openroad make各个阶段
服务器
千里码aicood27 分钟前
基于PLC的简易三轴工件搬运平台设计
自动化·plc
科技研学社2 小时前
自动化缝制升级:支撑产业海外转移,降低建厂用工门槛
人工智能·自动化
懂软件的胡子个哥3 小时前
微信二次开发如何保护接口安全,Token、权限和重放防护都要考虑
微信·自动化·wechatapi·个人微信号二次开发·微信群管理
Huangjin007_5 小时前
【Linux 系统篇(二十一)】进程(九):进程等待 wait/waitpid、status状态参数
linux·运维·服务器
ao-weilai6 小时前
Linux网络编程:Socket UDP
linux·服务器·网络·c++
曦夜日长6 小时前
Linux系统篇,进程概念(四):内核链表的深度理解、进程优先级的底层理解
linux·运维·服务器·php
Wang's Blog6 小时前
Java 接入Redis: Redis下载与源码编译安装
java·服务器·redis
织码weavecodes6 小时前
离线学习与多端进度同步:在线心跳、Redis 缓冲与断点续考技术实现
大数据·自动化
Ivanqhz7 小时前
矩阵引擎的数据流模式与 BM1684X 架构
java·服务器·网络·深度学习·神经网络