weblogic关闭t3协议_Weblogic T3、IIOP协议批量禁用

转至:https://blog.csdn.net/weixin_32151313/article/details/113324040

近期各地各行业护网运动开展如火如荼,各系统、中间件、数据库、开源软件层面漏洞层出不穷,另相关的维护专业这苦不堪言。本文要讲的就是与weblogic中间件近期不断被曝出的T3协议、IIOP协议0day漏洞有关。在护网期间,官方补丁又未更新的情况下,能做的可能就是通过及时的禁用相关的协议,以达到漏洞修复的目的,但是通常任务紧、时间短、实例数量又众多的情况下,我们如何快速的做到对实例进行批量的处理呢,且看下文介绍。

一、 IIOP协议批量禁用 
首先禁用IIOP协议,需要在应用侧确认反馈应用未使用该协议的前提下,才能进行禁用处理。

单台或者少量实例,处理方法很简单,可以直接登陆控制台,警用IIOP协议即可,方法如下:

Weblogicconsole -> “服务”->”xxxServer”->”协议”,取消“启用IIOP”的勾选,重启服务即可。

 

 

但是成百上千个实例,一个个登陆console修改配置,显然不切实际,那我们就需要使用批量方案了。批量禁用可以使用weblogic自带的wlst工具,通过脚本进行批量禁用,该方法脚本逻辑简单清晰,分享如下。

weblogic_iiop.sh:通过shell脚本去调用weblogicwlst,执行禁用的python脚本。

复制代码
#!/bin/bash

. $HOME/.bash_profile

WLS_HOME="/weblogic/Oracle/Middleware/wlserver"

echo [`date '+%Y-%m-%d %H:%M:%S'`]" =====[BEGIN]========================="

${WLS_HOME}/common/bin/wlst.sh weblogic_iiop.py

echo [`date '+%Y-%m-%d %H:%M:%S'`]" =====[END]==========================="
复制代码

weblogic_iiop.py:获取配置文件中的weblogic控制台账号、口令,循环去禁用每一个实例的IIOP协议。

复制代码
cfg = open("./conf.cfg", "rb")

for line in cfg:

auth = line.split('#')

USERNAME = auth[0].strip()

PASSWORD = auth[1].strip()

ADMINURL = auth[2].strip()

print('--------------' + ADMINURL + '-----------------------------------')

size = len(auth)

if size < 3 or USERNAME == "" or PASSWORD == "" or ADMINURL == "":

continue

connect(USERNAME,PASSWORD,ADMINURL)

edit()

cd('Servers')

allSrvs=cmo.getServers()

for srv in allSrvs:

print('--------------startEdit--------------------------------')

startEdit()

srvName=srv.getName();

print('Now begin modify server: ' + srvName)

cd('/Servers/' + srvName)

## true-开启, false-关闭

cmo.setIIOPEnabled(false)

save()

activate()

disconnect()

exit()
复制代码

conf.cfg:目标weblogic实例的控制台账号、密码

weblogic#weblogic!123#t3://IP1:port

weblogic#weblogic!123#t3://IP2:port

…..

如上,只需将脚本部署到可以访问目标实例的服务器上,配置好conf.cfg配置文件,就可以很轻松的解决IIOP协议批量禁用的问题了,记得最后要重启服务才能生效哦。

二、 T3协议批量禁用
首先禁用T3协议,原理上其实是通过在weblogicconsole中添加T3协议访问白名单的方式来控制T3协议访问,禁止白名单以外的IP或网段来访问服务,以达到屏蔽漏洞的作用。所以,在配置T3协议禁用之前,需要应用侧梳理出需要使用T3协议访问的IP或网段。单台或者少量实例,处理方法同样简单,可以直接登陆控制台配置即可,方法如下:

Weblogicconsole -> “domain”->”安全”->”筛选器”,在“连接筛选器规则”处,配置规则即可。

 

 

但是成百上千个实例,一个个登陆console修改配置,费时费力,同样的,我们也有批量作业的方法,分享如下:

run.sh:通过shell脚本去调用weblogicwlst,同时读取weblogic控制台账号、口令,执行禁用的python脚本。

复制代码
JAVA_HOME=/weblogic/jdk1.7.0_141

WLS_HOME=/weblogic/Oracle/Middleware/wlserver_10.3

FILENAME=conf.cfg

cat $FILENAME | while read LINE

do

echo "----$LINE------"

IP=`echo ${LINE} |awk -F"#" '{print $1}'`

PORT=`echo ${LINE} |awk -F"#" '{print $2}'`

USERNAME=`echo ${LINE} |awk -F"#" '{print $3}'`

PASSWORD=`echo ${LINE} |awk -F"#" '{print $4}'`

DOMAIN_NAME=`echo ${LINE} |awk -F"#" '{print $5}'`

echo $DOMAIN_NAME

$WLS_HOME/common/bin/wlst.sh weblogic_filter.py $IP $PORT $USERNAME $PASSWORD $DOMAIN_NAME

done
复制代码

conf.cfg:目标weblogic实例的控制台账号、密码、域名

IP#port#weblogic#weblogic!123#testdomain

IP#prot#weblogic#weblogic!123#testdomain…..

weblogic_filter.py:对每一个weblogicdomain去配置T3协议白名单。

复制代码
# coding=utf-8

# FileName: weblogic_filter.py

# Description:

import time,re,os,sys

IP = sys.argv[1]

print 'HOST_IP=',IP

PORT = sys.argv[2]

print 'PORT=',PORT

USERNAME = sys.argv[3]

print 'USERNAME=',USERNAME

PASSWORD = sys.argv[4]

print 'PASSWORD=',PASSWORD

mydomain = sys.argv[5]

mydomain = mydomain.rstrip()

print 'DOMAIN_NAME=',mydomain

URL='t3://'+IP+':'+PORT

connect(USERNAME,PASSWORD,URL)

edit()

startEdit()

cd('/SecurityConfiguration/' + mydomain)

cmo.setConnectionFilter('weblogic.security.net.ConnectionFilterImpl')

set('ConnectionFilterRules',jarray.array([String('IP1'+' * * allow t3 t3s'), String('IP2'+'  * * allow t3 t3s'), String('IP3'+'  * * allow t3 t3s'), String(IP4+'  * * allow t3 t3s'), String('0.0.0.0/0 * * deny t3 t3s')], String))

save()

activate()
复制代码

如上,python脚本中,在set('ConnectionFilterRules',jarray.array([String('IP1'+' * * allow t3 t3s'), String('IP2'+' * * allow t3 t3s')],String))中添加需要配置的白名单配置规则即可。显然然,这里笔者这里是偷懒了,有兴趣的朋友,可以将规则也配置到配置文件中去,那么脚本即可通用了,只需要修改配置文件即可,使用起来会更灵活。最后,只需将脚本部署到可以访问目标实例的服务器上,配置好conf.cfg配置文件,就可以很轻松的解决T3协议禁用的问题。

[ 小结 ]
以上提供的方法,需要注意的是相关的脚本中的一些JDK版本及路径、WLS_HOME路径是需要根据实际情况进行修改的。如果再结合相关自动化产品将对应的场景进行任务编排,通过产品去将调用批量作业脚本、服务重启等操作编排到一个任务里面去,实现自动化调度,白屏操作,这将是一个不错的运维场景。

posted @   study_goup  阅读(4672)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2020-07-30 LVM--逻辑卷管理@安装、格式化、挂载、开机自动挂载完整篇
2020-07-30 Linux系统LVM逻辑卷创建过程以及自动化脚本
2020-07-30 Linux修改主机名称
点击右上角即可分享
微信分享提示