Elasticsearch 服务器安全加固(PHP)

 Elasticsearch 默认端口是9200,绑定的是本机127.0.0.1的这个 ip,这个默认参数其实很安全,但是有很多人想要绑定其他的 lan 口或者公网的 ip,可以修改相应参数,记住,修改有风险,如果确实需要将 Elasticsearch 暴露在公网环境,请修改特定的端口绑定IP,不要直接修改参数: network.host,而是要分别修改:http.port 来绑定 HTTP 协议9200 端口的 IP(RESTful 接口调用),修改:transport.tcp.port 对应的 TCP 9300 端口的 IP(集群内通信),如果你不需要 http 端口,你干脆禁用掉,另外还需要在 Elasticsearch 之上加上成熟的安全防护措施(注意是成熟的!),在这里提供几种方案:

9200的 HTTP 接口之上加上 Nginx 来提供 Http Basic-Auth 的基本的身份认证,辅助 SSL 证书进行传输层的加密,Nginx 进一步限制可接受 Verb 请求类型及可被操作的索引前缀。

使用 Elastic 的 X-Pack 插件,同样提供了 Http Basic-Auth 和 SSL 传输层的加密,X-Pack 还能提供内外 Elasticsearch 集群节点间的流量加密,避免旁路攻击。

    我们今天选用的是第二种方案,第一种方案还请大家与运维配合实验

    以下操作步骤需要ssh 权限,切会服务器基础命令与操作

    步骤一:

 elasticsearch-plugin install x-pack   //使用此命令,安装x-pack 插件

    安装完成后启动 elasticsearch 服务 ,访问9200端口 会让输入用户名和密码才能访问。

    Elasticsearch 的默认账户为 elastic 默认密码为 changme

    步骤二:使用以下命令修改初始密码,localhost 改成自己服务器的IP

curl -XPUT -u elastic 'http://localhost:9200/_xpack/security/user/elastic/_password' -d '{

  "password" : "yourpasswd"

}'

    步骤三:修改CURL 请求,增加header参数,使得调用API时可以登录搜索引擎服务器

    举个例子 ,如果用户名和密码是默认密码 ,则header 传参如下:

Authorization: Basic ZWxhc3RpYzopS0k1alFsbHozQWhiYy4hfkZVKyUydzQrIzNzeVk=

Basic 后面的一串 ,是由用户名密码通过base64编码得到 

base64_encode("elastic:changme");

最后讲一下,关于elasticsearch 插件的修改 ,文件名 ClientBuilder.php 大约499行 ,增加一个header参数 ,代码如下

            // Make sure we are setting Content-type and Accept (unless the user has explicitly

            // overridden it

            if (isset($this->connectionParams['client']['headers']) === false) {

                $this->connectionParams['client']['headers'] = [

                    'Content-type' => ['application/json'],

                    'Accept' => ['application/json'],

                    'Authorization'=>[' Basic ZWxhc3RpYzopS0k1alFsbHozQWhiYy4hfkZVKyUydzQrIzNzeVk='],  //这里是增加的代码

                ];

            } else {

                if (isset($this->connectionParams['client']['headers']['Content-type']) === false) {

                    $this->connectionParams['client']['headers']['Content-type'] = ['application/json'];

                }

                if (isset($this->connectionParams['client']['headers']['Accept']) === false) {

                    $this->connectionParams['client']['headers']['Accept'] = ['application/json'];

                }

            }

代码解释,这里是创建链接时设置的header参数的数组 ,我们在下面增加登录权限的验证,最后就可以不修改逻辑代码的情况下,获取正确的数据。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值