需求实现

在使用ELK进行日志统计的时候,由于Kibana自身并没有身份验证的功能,任何人只要知道链接地址就可以正常登录到Kibana控制界面。由于日常的查询,添加日志和删除日志都是在同一个web 中进行,这样就有极高的安全隐患。任何人都有权限对其进行修改。
为了避免这一问题,可以使用Nginx的验证功能来代理Kibana.

安装配置Kibana

在官方下载对应的RPM包进行安装,链接:https://www.elastic.co/downloads/kibana
这里以kibana-5.6.5-x86_64为例,上传kibana-5.6.5-x86_64.rpm包到主机:

[root@node1 ~]# yum install java-1.8.0-openjdk-devel -y
[root@node1 ~]# yum install kibana-5.6.5-x86_64.rpm  -y

配置Kibana:

[root@node1 ~]# grep "^[a-z]" /etc/kibana/kibana.yml
server.port: 5601
server.host: "192.168.20.60"  # 端口监听地址,此时配置用于测试
elasticsearch.url: "http://192.168.20.61:9200"

启动:

[root@node1 ~]# systemctl start kibana
[root@node1 ~]# netstat -lntp|grep 5601
tcp        0      0 192.168.20.60:5601      0.0.0.0:*               LISTEN      5897/node       

使用5601端口访问网页正常,将本地监听IP改为127.0.0.1,只通过本地的nginx访问,禁止外部直接访问Kibana:

[root@node1 ~]# grep "^[a-z]" /etc/kibana/kibana.yml
server.port: 5601
server.host: "127.0.0.1"
elasticsearch.url: "http://192.168.20.61:9200"

重启Kibana,查看本地监听端口:

[root@node1 ~]# systemctl restart kibana
[root@node1 ~]# netstat -lntp|grep 5601
tcp        0      0 127.0.0.1:5601          0.0.0.0:*               LISTEN      6034/node 

安装配置Nginx

直接使用yum的方式安装:

[root@node1 ~]# yum install nginx -y

添加配置文件:

[root@node1 ~]# vim /etc/nginx/conf.d/kibana.conf
#添加如下内容

upstream kibana_server {
        server  127.0.0.1:5601 weight=1 max_fails=3  fail_timeout=60;
}

server {
        listen 80;
        server_name 192.168.20.60;
        auth_basic "Restricted Access";      # 验证
        auth_basic_user_file /etc/nginx/htpasswd.users;             # 验证文件
        location / {
        proxy_pass http://kibana_server;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        }
}

配置验证

创建验证文件授权,需要先安装httpd-tools工具:

[root@node1 ~]# yum install -y  httpd-tools 
[root@node1 ~]# htpasswd -bc /etc/nginx/htpasswd.users admin password # 创建验证文件,并添加用户
Adding password for user admin
[root@node1 ~]# cat /etc/nginx/htpasswd.users 
admin:$apr1$9AMiN0Ud$Q95cyrPix89nw3h3d4cwo0

如果要添加多个用户密码可以使用如下命令:

[root@node1 ~]# htpasswd -b /etc/nginx/htpasswd.users try trying
Adding password for user try
[root@node1 ~]# cat /etc/nginx/htpasswd.users 
admin:$apr1$9AMiN0Ud$Q95cyrPix89nw3h3d4cwo0
try:$apr1$s5QCG32f$9KQFhsiw.PYmmmst.5r/q1

启动nginx:

[root@node1 ~]# nginx -t
[root@node1 ~]# systemctl start nginx
[root@node1 ~]# netstat -lntp|grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      6085/nginx: master  

再次使用IP登录时,就需要输入用户名和密码。
可以通过使用status查看系统的当前状态:
http://192.168.20.60/status