Flink on Yarn 任务启动后,暴露端口无授权访问漏洞,用iptables批量解决
·
- 需求: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
更多推荐
所有评论(0)