漏扫报告中的高危端口屏蔽
背景
扫描出很多漏洞,领导要求应急处理,可以不用管系统功能。
于是决定读取文件夹内的绿盟漏扫报告,提取漏洞对应端口,通过ssh连接服务器使用iptables进行端口屏蔽。
服务器漏洞端口屏蔽
import docx import os import time from win32com import client as wc import paramiko #转换格式 path="G:\\" word = wc.Dispatch("Word.Application") files=[] for file in os.listdir(path): if file.endswith(".doc"): #排除文件夹内的其它干扰文件,只获取".docx"后缀的word文件 files.append(path+file) for file in files: print(file) doc = word.Documents.Open(file) #打开word文件 #time.sleep(1) doc.SaveAs("{}x".format(file), 12)#另存为后缀为".docx"的文件,其中参数12指docx文件 doc.Close word.Quit() #格式转换 def run(host_ip, username, password, command): print(command) ssh = paramiko.SSHClient() try: ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(host_ip, 22, username, password) print('===================exec on [%s]=====================' % host_ip) stdin, stdout, stderr = ssh.exec_command(command, timeout=300) out = stdout.readlines() for o in out: print (o.strip('\n')) except: print('error, host is [%s]' % (host_ip)) ssh.close() path=os.getcwd() word = wc.Dispatch("Word.Application") files=[] for file in os.listdir(path): if file.endswith(".docx"): #排除文件夹内的其它干扰文件,只获取".docx"后缀的word文件 files.append(file) for file in files: fn=file #print(fn) ip=file.split('.docx')[0] print(ip) index=0 doc=docx.Document(fn) for i in doc.tables[1].rows: for col_index,cell in enumerate(i.cells): if index%4==0: index=index+1 if('端口' in cell.text or '-' in cell.text or '22' in cell.text): continue #print(cell.text) iptables='iptables -I INPUT -p tcp --dport '+cell.text+" -j DROP" run(ip,'root','password',iptables) #屏蔽端口 else: index=index+1 run(ip,'root','password','iptables -I INPUT -s 127.0.0.1 -j ACCEPT') #设置白名单 run(ip,'root','password','iptables -I INPUT -s 172.21.201.0/24 -j ACCEPT') #设置白名单 run(ip,'root','password','iptables -I INPUT -i lo -j ACCEPT') #设置白名单 print('\n\n')
屏蔽完以后再慢慢处理漏洞,注意要是漏洞涉及ssh端口的,一定要删掉,手动处理,不然屏蔽完就连不上了。