转载请备注来源: 《ELK(Kibana、ElasticSearch)安全加固》 | shuwoom.com

前言

《 ELK、FILEBEAT日志分析平台搭建 》这篇文章中,我们介绍了ELK的完整搭建过程,但是这里,没有考虑安全方面的因素。搭建后的ELK中ElasticSearch和Kibana都可以直接通过外放访问获取到所有的日志数据,并且还可以通过ElasticSearch提供的http接口对数据进行操作,甚至删除,存在极大安全隐患。

在这一片文章中,我会介绍ElasticSearch和Kibana的安全加固方法,弥补这一块的空白。

一、ElasticSearch未授权访问

1、ElasticSearch漏洞描述

默认情况下ElasticSearch如果开放了外网访问,用户是可以通过API直接操作ElasticSearch里的数据,甚至删除所有数据,这个漏洞风险极大。

可直接访问的API如下:

http://x.x.x.x:9200/_cat/indices/
http://x.x.x.x :9200/_plugin/head/
http://x.x.x.x:9200/_nodes
......

如果可以直接通过外网ip和9200端口访问到ElasticSearch获得如下信息,则说明ElasticSearch没有做安全认证,存在未授权访问的漏洞,需要做加固。

{
  "name" : "Ibmm5BR",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "_azcjoJxR3Guci8DhOMhdA",
  "version" : {
    "number" : "6.2.4",
    "build_hash" : "ccec39f",
    "build_date" : "2018-04-12T20:37:28.497551Z",
    "build_snapshot" : false,
    "lucene_version" : "7.2.1",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

2、ElasticSearch加固方法

  • 禁止外网访问9200端口
  • 通过Nginx反向代理,对ElasticSearch配置认证
  • 限制IP访问,绑定固定IP
  • 不使用root启动ElasticSearch

这里我们讲解下方法(2)。

Step1:首先,设置Elasticsearch监听本地地址,禁止外网访问:

network.host: 127.0.0.1
http.port: 9200

Step2:接下来,我们创建反向代理登录ElasticSearch的账号和密码,这里通过htpasswd工具创建。

htpasswd命令参数如下:

-c 创建passwdfile.如果passwdfile 已经存在,那么它会重新写入并删去原有内容.
-n 不更新passwordfile,直接显示密码
-m 使用MD5加密(默认)
-d 使用CRYPT加密(默认)
-p 使用普通文本格式的密码
-s 使用SHA加密
-b 命令行中一并输入用户名和密码而不是根据提示输入密码,可以看见明文,不需要交互
-D 删除指定的用户

生成密码,该命令会创建/usr/local/service/nginx/conf/htpasswd密码文件,输入该命令后,会两次提示输入密码。

htpasswd -c /usr/local/service/nginx/conf/htpasswd username

Step3:最后,配置nginx反向代理,我们通过监听19200端口反向代理访问ElasticSearch,配置好后,重启nginx和ElasticSearch。这时候通过外网访问19200端口就会弹出需要认证的对话框,否则无法访问ElasticSearch上的数据。

nginx反向代理访问elasticsearch
server {
        # 通过反向代理对elasticsearch身份认证
        listen 19200;
	    server_name localhost;
   
        location / { 
    	    auth_basic "username";
            auth_basic_user_file 
            /usr/local/service/nginx/conf/htpasswd;
    	    
    	    proxy_pass http://127.0.0.1:9200;
	   }
    }

二、Kibana未授权访问

1.问题描述

同时,Kibana如果允许外网访问,没有做安全的登录认证,也会被外部随意访问查看所有的数据,造成少数据泄露。

2.Kibana加固方法(登录认证)

同样的,跟ElasticSearch的加固方法一样,我们也可以通过nginx设置反向代理,设置密码登录验证。

Step1:设置kibana监听本地地址,并设置ElasticSearch登录的账号和密码:

elasticsearch.url: "http://127.0.0.1:9200"

#这里输入在第一节给ElasticSearch创建的账号和密码
elasticsearch.username: "user"
elasticsearch.password: "pass"

Step2:同样的,使用htpasswd创建kibana登录的账号密码,这里可以服用ElasticSearch创建的账号密码,也可以重新创建一个。

htpasswd -c /usr/local/service/nginx/conf/htpasswd username

Step3:配置nginx反向代理,配置好后,重启nginx和kibana,通过15601登录验证访问Kibana。这时候就会弹出如下的对话框:

通过nginx反向代理访问kibana
server {
    # 通过反向代理对kibana身份认证
    listen 15601;
    server_name localhost;

    location / { 
        auth_basic "xscan";
        auth_basic_user_file /usr/local/service/nginx/conf/htpasswd;
        
        proxy_pass http://127.0.0.1:5601;
   }
}

转载请备注来源: 《ELK(Kibana、ElasticSearch)安全加固》 | shuwoom.com 

打赏

发表评论

电子邮件地址不会被公开。