• 需求:hadoop集群,运行flink on yarn多个任务,被扫描出多个flink任务的未授权访问漏洞,主要是org.apache.flink.yarn.entrypoint.YarnJobClusterEntrypoint相关客户端进程

在这里插入图片描述

解决问题,暂用iptables 拦截访问

  • 源漏洞主机:获取漏洞端口并自动添加防火墙规则(设置仅白名单访问)
export PATH=/sbin:/bin:/usr/sbin:/usr/bin
date "+%F %T"

#IP=$(hostname -I)
#IP2=$(ip addr | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v 127.0.0.1)
#-o:仅输出匹配的部分(即 IP 地址)。
#-P:启用 Perl 兼容正则表达式(PCRE),支持零宽断言等高级语法。
#通过 零宽断言​ (?<=inet\s)匹配 inet后跟一个空白字符的位置(但不包含 inet和空格本身)
# 获取ip地址,自动拼接请求url--> http://ip:port/config
IP2=$(hostname -I | awk '{print $1}')
ports=$(ps -ef |grep org.apache.flink.yarn.entrypoint.YarnJobClusterEntrypoint |awk '{print "ss -nltp |grep " $2}' |bash \
 |sed 's@*:@@' |awk '{print "echo "$4 "; curl -s http://IP:"$4"/config?wt=json; echo IP"}'  \
 |sed "s@IP@$IP2@g"  |bash |grep flink-revision -B 1 \
 |grep -v flink-revision |grep -v '\-' |awk '{printf $1 " "}' )


#添加防火墙
doaddrule(){
   port=$1
   flag=$(iptables -nL |grep DROP |grep $port)
   ips=(192.168.56.12 192.168.56.13 )

   if [  -z "$flag" ]; then
          echo "$port new, add iptables rule !"
          #仅允许hadoop集群 + app程序 内部访问
          for ip in "${ips[@]}"; do
             echo  iptables -A INPUT -p tcp --dport $port -s $ip -j ACCEPT
             iptables -A INPUT -p tcp --dport $port -s $ip -j ACCEPT
          done
          echo  iptables -A INPUT -p tcp --dport $port  -j DROP
          iptables -A INPUT -p tcp --dport $port  -j DROP
   fi
}

#移除防火墙规则
dodelrule(){
        port=$1
        flag=$(ss -nltp |grep $port )
        #当端口不在使用时,去掉防火墙规则
        if [ $port -ge 30000 ] && [  -z "$flag" ] ; then
              echo $port "port is not listen, clean iptables rule !"
              iptables -nL INPUT  |grep $i |awk '{print "iptables -D INPUT -s "$4 " -p tcp --dport "$NF " -j "$1 " ; " }' |sed 's@dpt:@@'
              iptables -nL INPUT  |grep $i |awk '{print "iptables -D INPUT -s "$4 " -p tcp --dport "$NF " -j "$1 " ; " }' |sed 's@dpt:@@' |bash
        fi
}

#遍历有漏洞的端口, 给没有添加防火墙的端口补充iptables规则
for i in $(echo $ports)
do
   doaddrule $i
done

#删除已拦截、且无效的端口规则
ports2=$(iptables -nL INPUT|grep DROP |awk '{print $NF}' |sed 's@dpt:@@' )
for i in ${ports2}; do
   dodelrule $i
done
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐