背景
工作用到elasticsearch,为了方便学习需要自己搭建。那么怎么快速搭建呢,这里我用的是docker-compose(具体安装方式自行搜索不在此赘述)
搭建es
为了方便我们建一个es的文件夹在es文件夹中创建docker-compose.yml文件如下
version: '2' services: elasticsearch: image: elasticsearch:1.7.6 container_name: med-news-es-dev ports: - "9200:9200" volumes: - $PWD/elasticsearch/config:/usr/share/elasticsearch/config - $PWD/elasticsearch/plugins:/usr/share/elasticsearch/plugins restart: always
特别提醒:我这里因为云主机内存关系用的比较低的版本,如果你的机器容量配置足够可以选择更新版本。
这里对容器的9200端口分别映射到了宿主机,对配置和插件文件夹也做了映射方便后期做配置修改,个性化分词或者其他插件的补充。
然后我们可以启动容器
docker-compose up -d
启动成功后可以使用命令查看当前容器运行状态是否正常
docker-compose ps
到这里es我们就安装好了,我们可以用ip:9200的方式来访问es的接口,为了方便记忆我使用nginx 配置了域名es.chenjie.info代理到9200端口,具体配置的location是这样的
location / { proxy_pass http://127.0.0.1:9200; }
出现问题?
因为域名端口暴露在公网,很容易被扫到,后来被无聊的人给清了数据。所以需要加个验证,这里我用的nginx的ngx_http_auth_basic_module
模块,该模块允许使用http基本认证协议用户名,密码的访问来对指定资源访问控制。
这里我们需要修改域名配置
location / { auth_basic "auth_basic"; auth_basic_user_file /usr/local/nginx/conf/vhost/htpasswd; proxy_pass http://127.0.0.1:9200; }
增加了一个描述和具体的密码文件
这里密码文件我使用htpasswd命令生成,如果本地没有这个命令,执行
yum install httpd-tools
密码文件执行
htpasswd 文件名 用户名 //文件名请携带完整路径 ,执行后输入密码
然后重启nginx让配置生效
结束了?
上面做完是不是可以高枕无忧了,并没有。不要忘了防火墙的控制!!!
我们需要执行下面命令
iptables -I INPUT -p TCP --dport 9200 -j DROP iptables -I INPUT -i lo -j ACCEPT service iptables save
这里禁止直接公网访问9200端口,只允许本机访问,那么我们在通过es.chenjie.info访问本机docker的es服务的时候就会走nginx的权限模块来验证了。到这里我们才算完成了es的访问控制。
其他问题?
在这里我们增加了http的验证,那么网络传输过程中如果截获到明文密钥那么我们的服务依然不够安全,如果对安全要求比较高,建议使用https保证传输过程的安全性。