让Nginx鉴权功能保护Kibana网页

Kibana本身是一个Web界面,但是出于安全和机密的考虑,我们肯定不会让互联网上所有的人都能随便看到Kibana里的内容,但是X-pack目前又不支持6.2以上的版本,于是我们可以使用Nginx的密码功能来保护Kibana的网页:要访问Kibana时需要先输入密码,正确就登陆到Kibana,如果错误就是403。

Kibana是容器安装的,安装过程可以去查看:https://rorschachchan.github.io/2019/01/21/%E5%B0%86kafka%E5%8A%A0%E5%85%A5%E5%88%B0Elk%E9%9B%86%E7%BE%A4/

事前准备

Nginx也是容器安装,docker pull nginx拉取最新的nginx镜像,在下载的时候呢我们也别对着屏幕干巴巴的等。由于在nginx配置转发的时候,需要知道Kibana的容器IP,这是因为Kibana和正在下载的Nginx是两个不同的容器,Nginx是需要跨容器访问的。

默认的官方Kibana镜像登录是非root的,这种虽然安全,但是不能config也不能yum,于是我们首先要使用root账号登录进去,语句是:

1
2
3
docker exec -it --user root kibana容器ID /bin/bash
yum update -y
yum install -y net-tools #下载ifconfig

使用ifconfig和netstat查看容器的IP和工作端口:
办公室

可以确认Kibana的IP是172.17.0.4,端口是5601。这时候我们就可以写一个kibana.conf,让nginx容器用这个配置文件达到跳转的目的!

kibana.conf全文如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
upstream kibana_server {
server 172.17.0.3:5601 weight=1 max_fails=3 fail_timeout=60; #这里写的就是kibana的容器IP和端口,如果是多台kibana想要按权重访问,就写weight
}

server {
listen *:33664; #nginx容器自己的端口
server_name _;
auth_basic "Restricted Access"; # 验证
auth_basic_user_file /etc/nginx/conf.d/htpasswd.users; # 验证文件

location / {
proxy_pass http://kibana_server; #这个地方就是upstream
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;
}
}

把这个文件保存在/mnt/nginx目录里。

配置nginx密码

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

1
2
3
yum install -y  httpd-tools 
htpasswd -bc /mnt/nginx/htpasswd.users kibana password123 # 创建验证文件
Adding password for user admin

这时我们就创建了一个/mnt/nginx/htpasswd.users,里面的用户是kibana,密码是password123。这个密码在文件里是加密的,用cat命令无法正常查看到的。

启动nginx容器

此时nginx镜像应该下载完毕了,那么就直接启动镜像,启动语句是:

1
docker run --hostname Kngx -p 80:33664 --name Knginx -v /mnt/nginx/:/etc/nginx/conf.d/ -d nginx

简单说一下这个命令:这个容器名叫Knginx,hostname是Kngx,做了宿主机80端口到此容器33664端口的转发,将宿主机的/mnt/nginx/挂载到容器里的/etc/nginx/conf.d/,同时直接启动nginx。

启动成功之后,我们看到刚刚建立的htpasswd.userskibana.conf都已经成功被Knginx容器配置上,然后打开浏览器,看看效果:
办公室

这样就达到了密码访问页面的效果,如果想加IP白名单呢,也可以直接在kibana.conf里补充相关配置,修改完毕之后,重启Knginx容器即可。

参考资料

https://www.hugeserver.com/kb/how-secure-kibana-nginx-centos/

感谢您请我喝咖啡~O(∩_∩)O,如果要联系请直接发我邮箱chenx1242@163.com,我会回复你的
-------------本文结束感谢您的阅读-------------