Hadoop生态漏洞修复记录

Hadoop常用端口介绍

HDFS
    NameNode
        50070   dfs.namenode.http-address   http服务的端口
        50470   dfs.namenode.https-address  https服务的端口
    DataNode
        50010   dfs.datanode.address    datanode服务端口,用于数据传输
        50075   dfs.datanode.http.address   http服务的端口
        50475   dfs.datanode.https.address  https服务的端口
        50020   dfs.datanode.ipc.address    ipc服务的端口
        8020    fs.defaultFS    接收Client连接的RPC端口,用于获取文件系统metadata信息。
    journalnode
        8485    dfs.journalnode.rpc-address     RPC服务
        8480    dfs.journalnode.http-address    HTTP服务
    ZKFC
        8019    dfs.ha.zkfc.port    ZooKeeper FailoverController,用于NN HA
   YARN
    ResourceManager
        8032  yarn.resourcemanager.address    RM的applications manager(ASM)端口
        8030  yarn.resourcemanager.scheduler.address  scheduler组件的IPC端口
        8031  yarn.resourcemanager.resource-tracker.address   IPC
        8033  yarn.resourcemanager.admin.address  IPC
        8088  yarn.resourcemanager.webapp.http.address.rm1     http服务端口
        8090  yarn.resourcemanager.webapp.https.address.rm1     https服务端口
    NodeManager
        8040  yarn.nodemanager.localizer.address  localizer IPC
        8042  yarn.nodemanager.webapp.address     http服务端口
        8041  yarn.nodemanager.address    NM中container manager的端口
    JobHistory Server
        10020     mapreduce.jobhistory.address    IPC
        19888     mapreduce.jobhistory.webapp.address     http服务端口,加个s就是https服务端口https://192.168.56.43:19888/jobhistory/logs


HBase

    Master
        60000     hbase.master.port   IPC
        60010     hbase.master.info.port  http服务端口
    RegionServer
        60020     hbase.regionserver.port     IPC
        60030     hbase.regionserver.info.port    http服务端口


Hive

    Metastore
        9083  metastore默认连接端口
    HiveServer
        10000   hiveserver2 默认连接端口     
        10002   hiveserver2 默认web端口     


ZooKeeper
    Server
        2181  /etc/zookeeper/conf/zoo.cfg  客户端提供服务的端口
        2888  /etc/zookeeper/conf/zoo.cfg  follower用来连接到leader,只在leader上监听该端口。
        3888  /etc/zookeeper/conf/zoo.cfg  用于leader选举的。只在electionAlg是1,2或3(默认)时需要。
        8080  /etc/zookeeper/conf/zoo.cfg  web管理后端,可禁用,添加一行admin.serverPort=0

Hadoop相关漏洞

漏洞一:
端口:8088
协议:TCP
服务:radan-http
漏洞:
Apache Hadoop YARN 资源管理器 REST API未授权访问漏洞【原理扫描】
官方建议修复方案:
临时解决方案:
通过系统内置防火墙只允许端口被业务主机访问
厂商解决方案:
更新Hadoop到2.X以上版本并启用Kerberos认证功能,禁止匿名访问
https://hadoop.apache.org/releases.html
不接受官方建议修复方案:
默认情况下,Hadoop HTTP Web控制台(ResourceManager,NameNode,NodeManagers和DataNodes)是允许无需任何形式的身份验证的访问。
HDFS一般会开启kerberos认证,但是YARN一般不开启kerberos认证
方案一:如果开启了kerberos认证:
就是core-site.xml有以下配置:

<property>
    <name>hadoop.security.authorizationname>
    <value>truevalue>
property>
<property>
   <name>hadoop.security.authenticationname>
   <value>kerberosvalue>
property>

1、yarn 的8088是ResourceManager的web界面
2、hdfs 的50070是NameNode的web界面
3、将yarn的端口8088访问从http改为https端口号8090,
将hdfs的端口50070访问从http改为https端口号50470,
也可以扫不到。
修改hdfs-site.xml,,新增 以下配置。注意是https,和集群名更改

<property>
    <name>dfs.http.policyname>
    <value>HTTPS_ONLYvalue>
property>
<property>
    <name>dfs.namenode.https-address.bigdata.nn1name>
    <value>192.168.56.41:50470value>
property>
<property>
    <name>dfs.namenode.https-address.bigdata.nn2name>
    <value>192.168.56.42:50470value>
property>
<property>
    <name>dfs.datanode.https.addressname>
    <value>0.0.0.0:50475value>
property>

修改yarn-site.xml,,新增 以下配置。注意是https


<property>
    <name>yarn.resourcemanager.webapp.https.address.rm1name>
    <value>192.168.56.41:8090value>
property>
<property>
    <name>yarn.resourcemanager.webapp.https.address.rm2name>
    <value>192.168.56.42:8090value>
property>

<property>
    <name>yarn.nodemanager.webapp.https.addressname>
    <value>0.0.0.0:8042value>
property>

<property>
    <name>yarn.log.server.urlname>
    <value>https://192.168.56.43:19888/jobhistory/logsvalue>
property>
 
<property>
    <name>yarn.http.policyname>
    <value>HTTPS_ONLYvalue>
property>

3、升级后重启resourcemanager,nodemanager,,访问 https://192.168.56.41:8090/cluster

4、如果使用nginx配置域名访问 https://yarn-test.com/cluster
其中域名证书,通过手动签发生成。生成证书
/etc/nginx/cert/tls-yarn.key;
/etc/nginx/cert/tls-yarn.crt;

server {
  listen    443 ssl;
  server_name yarn-test.com;
  location / {
    deny all;
  }
  ssl_certificate      /etc/nginx/cert/tls-yarn.crt;
  ssl_certificate_key  /etc/nginx/cert/tls-yarn.key;
  ssl_session_timeout  5m;
  location /cluster {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_http_version 1.1;
    proxy_set_header Host yarn-test.com;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwaeded-Proto https;
    proxy_pass https://yarn-test.com;
  }
  location /static {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_http_version 1.1;
    proxy_set_header Host yarn-test.com;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwaeded-Proto https;
    proxy_pass https://yarn-test.com;
  }
  location /proxy {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_http_version 1.1;
    proxy_set_header Host yarn-test.com;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwaeded-Proto https;
    proxy_pass https://yarn-test.com;
  }
}
# yarn-resourcemanager服务器,配active那台
upstream yarn-test.com {
   server 192.168.56.41:8090;
}

方案二:开启Hadoop的伪/简单身份验证
1、修改core-site.xml这几个配置


<property>
    <name>hadoop.security.authorizationname>
    <value>truevalue>
property>

<property>
   <name>hadoop.http.authentication.typename>
   <value>simplevalue>
property>

<property>
   <name>hadoop.http.filter.initializersname>
   <value>org.apache.hadoop.security.AuthenticationFilterInitializervalue>
property>

<property>
    <name>hadoop.http.authentication.signature.secret.filename>
    <value>/opt/hadoop/secret/hadoop-http-auth-signature-secretvalue>
property>

<property>
    <name>hadoop.http.authentication.simple.anonymous.allowedname>
    <value>falsevalue>
property>

2、/opt/hadoop/secret/hadoop-http-auth-signature-secret 文件写入
hadoop
3、重启HDFS和YARN
4、在访问路径后面加user.name参数,,如:
http://192.168.56.41:50070?user.name=hadoop
http://192.168.56.41:8088?user.name=hadoop

zookeeper相关漏洞

漏洞一:
端口:2181
协议:TCP
服务:zookeeper
漏洞:
ZooKeeper 未授权访问【原理扫描】
官方建议修复方案:
为ZooKeeper配置相应的访问权限。
方式一:
1)增加一个认证用户
addauth digest 用户名:密码明文
eg. addauth digest user1:password1
2)设置权限
setAcl /path auth:用户名:密码明文:权限
eg. setAcl /test auth:user1:password1:cdrwa
3)查看Acl设置
getAcl /path
方式二:
setAcl /path digest:用户名:密码密文:权限
不接受官方建议修复方案:
1、zkClish.sh进入zookeeper客户端:
执行命令

setAcl / ip:192.168.56.41:cdrwa,ip:192.168.56.42:cdrwa,ip:192.168.56.43:cdrwa

把所有需要的IP都写上。
2、添加后,连接zkCli.sh客户端,执行命令会出现
[zk: localhost:2181(CONNECTED) 0] ls /
Authentication is not valid : /
执行 connect IP 2181 即可
[zk: localhost:2181(CONNECTED) 1] connect 192.168.56.41 2181
[zk: 192.168.56.41(CONNECTED) 2] ls /
[zookeeper]

漏洞二:
端口:8080
协议:TCP
服务:http
Eclipse Jetty 安全漏洞(CVE-2020-27216)
Eclipse Jetty 安全漏洞(CVE-2022-2048)
Eclipse Jetty拒绝服务漏洞(CVE-2020-27223)
Eclipse Jetty信息泄露漏洞(CVE-2020-27218)
远端WWW服务支持TRACE请求
Eclipse Jetty信息泄露漏洞(CVE-2021-28169)
官方建议修复方案:
太多
不接受官方建议修复方案:
zookeeper的8080端口是管理后端(admin)如果要改端口可以
admin.serverPort=8082
修复漏洞,可以选择禁用此端口。
1、修改zookeeper安装目录中的conf/zoo.cfg文件,添加一行:
admin.serverPort=0
2、重新启动Zookeeper服务。没有8080端口。

hive相关漏洞

漏洞一:
端口:10002
协议:TCP
服务:http
漏洞Eclipse Jetty HTTP请求走私漏洞(CVE-2017-7658)
Eclipse Jetty HTTP请求走私漏洞(CVE-2017-7657)
Eclipse Jetty HTTP请求走私漏洞(CVE-2017-7656)
Eclipse Jetty 安全漏洞(CVE-2020-27216)
Eclipse Jetty 输入验证错误漏洞(CVE-2018-12545)
Eclipse Jetty信息泄露漏洞(CVE-2018-12536)
Eclipse Jetty 信息泄露漏洞(CVE-2019-10246)
Eclipse Jetty跨站脚本执行漏洞(CVE-2019-10241)
Eclipse Jetty 信息泄露漏洞(CVE-2019-10247)
官方建议修复方案:
目前厂商已发布升级补丁以修复漏洞,补丁获取链接:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=535669
不接受官方建议修复方案:
1、10002 为hiveserver2的默认端口,webUI页面,没什么用就禁用掉。
默认是10002.写0或者负数就是禁用,
2、hive-site.xml增加配置:

 <property>
 <name>hive.server2.webui.portname>
 <value>0value>
<description>The port the HiveServer2 WebUI will listen on. This can beset to 0 or a negative integer to disable the web UIdescription>
property>

3、重启hiveserver2,就没有10002端口了。

你可能感兴趣的:(hadoop,大数据,分布式)