漏扫报告中的高危端口屏蔽
背景
扫描出很多漏洞,领导要求应急处理,可以不用管系统功能。
于是决定读取文件夹内的绿盟漏扫报告,提取漏洞对应端口,通过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端口的,一定要删掉,手动处理,不然屏蔽完就连不上了。