【无标题】

search-guard+elastic+kibana+filebeat

(search-guard还有一种用脚本生成的,install_demo_configuration.sh)

(证书生成方式:离线生成;证书有效期:默认10年)

可查看:https://www.jianshu.com/p/42e278c3b1bf

https://blog.csdn.net/weixin_44094720/article/details/110044964

https://www.cnblogs.com/minseo/p/10576126.html

本次是针对 elasticsearch的6.6.1版本做search-guard的https加固

es的6.8以后的版本才有免费的X-pack所有针对 es-6.6.1采取search-guard证书加固

准备:

下载与es相对的版本的search-guard的版本

search-guard-tlstools-1.6.tar.gz

search-guard-kibana-plugin-6-6.6.0-19.0.zip

search-guard-6-6.6.1-25.5.zip

https://repo1.maven.org/maven2/com/floragunn/search-guard-tlstool/1.6/search-guard-tlstool-1.6.tar.gz

https://maven.search-guard.com/search-guard-kibana-plugin-release/com/floragunn/search-guard-kibana-plugin-6/6.6.0-19.0/search-guard-kibana-plugin-6-6.6.0-19.0.zip

https://maven.search-guard.com/search-guard-release/com/floragunn/search-guard-6/6.6.1-25.5/search-guard-6-6.6.1-25.5.zip

[elkuser@node1 ~]$ ll /opt/
总用量 350296
-rw-r--r--. 1 root root 114126547 33 23:36 elasticsearch-6.6.1.tar.gz
-rw-r--r--. 1 root root  10645858 33 23:36 filebeat-6.4.3-linux-x86_64.tar.gz
-rw-r--r--. 1 root root 180675854 33 23:36 kibana-6.6.1-linux-x86_64.tar.gz
-rw-r--r--. 1 root root  28209170 33 23:36 search-guard-6-6.6.1-25.5.zip
-rw-r--r--. 1 root root   1060227 33 23:36 search-guard-kibana-plugin-6-6.6.1-19.0.zip
-rw-r--r--. 1 root root  11786240 33 23:36 search-guard-tlstool-1.6.tar.gz


查看当前的状态:

[elkuser@node1 elasticsearch-6.6.1]$ curl '192.168.40.195:9200/_cat/nodes?v'
ip             heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.40.195           29          65   1    0.03    0.02     0.10 mdi       -      node1
192.168.40.196           58          63   1    0.00    0.01     0.05 mdi       *      node2
192.168.40.197           68          63   0    0.02    0.02     0.05 mdi       -      node3

1,关闭分片分配(可选)

每个节点执行如下命令:

此步骤是可选的,但建议特别适用于具有大量数据的大型集群。此步骤可确保在重新启动集群时分片不会移动,从而导致大量 I/O。参见 https://www.elastic.co/guide/en/elasticsearch/reference/current/shards-allocation.html,https://blog.51cto.com/u_12064820/3036442,https://www.jianshu.com/p/ade34a657b3b,https://blog.csdn.net/huanglu0314/article/details/126652915

curl -Ss -XPUT 'http://{192.168.40.195}:9200/_cluster/settings?pretty'  -H 'Content-Type: application/json' -d'
{
 "persistent": {
  "cluster.routing.allocation.enable": "none"
 }
}
'

返回:

{ "acknowledged" : true, "persistent" : { "cluster" : { "routing" : { "allocation" : { "enable" : "none" } } } }, "transient" : { } }

2,离线安装search guard插件

2.1 copy安装包

[elkuser@node1 elasticsearch-6.6.1]$ cp /opt/search-guard-* .
[elkuser@node1 elasticsearch-6.6.1]$ ll search-guard-*

-rw-r--r--. 1 elkuser elkuser 28209170 3月 8 22:56 search-guard-6-6.6.1-25.5.zip -rw-r--r--. 1 elkuser elkuser 1060227 3月 8 22:56 search-guard-kibana-plugin-6-6.6.1-19.0.zip -rw-r--r--. 1 elkuser elkuser 11786240 3月 8 22:56 search-guard-tlstool-1.6.tar.gz

2.2安装search guard-es的插件

(./bin/elasticsearch-plugin install是安装, list是列出来,remove是卸载)

  • [elkuser@node1 elasticsearch-6.6.1]$ ./bin/elasticsearch-plugin  install -b file:///elasticsearch/elasticsearch-6.6.1/search-guard-6-6.6.1-25.5.zip 
    

    -> Downloading file:///elasticsearch/elasticsearch-6.6.1/search-guard-6-6.6.1-25.5.zip
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @ WARNING: plugin requires additional permissions @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

    • java.io.FilePermission /proc/sys/net/core/somaxconn read

    • … …

    • javax.security.auth.kerberos.ServicePermission * accept
      See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
      for descriptions of what these permissions allow and the associated risks.
      -> Installed search-guard-6

    2.3 解压tlstool 工具

    [elkuser@node1 elasticsearch-6.6.1]$ mkdir tlstool
    [elkuser@node1 elasticsearch-6.6.1]$ tar -xf search-guard-tlstool-1.6.tar.gz  -C tlstool
    [elkuser@node1 elasticsearch-6.6.1]$ ls tlstool
    

    config deps tools

    2.4 生成 my.yml

    https://blog.csdn.net/wangkai_123456/article/details/95938714/

    https://www.cnblogs.com/bainianminguo/p/12584880.html

    [elkuser@node1 elasticsearch-6.6.1]$ ls tlstool
    

    config deps tools

    [elkuser@node1 elasticsearch-6.6.1]$ cp tlstool/config/example.yml  tlstool/config/my.yml
    
    [elkuser@node1 elasticsearch-6.6.1]$ cat tlstool/config/my.yml | grep -vE "^$|#"
    

2.5 根据 my.yml 生成证书

[elkuser@node1 elasticsearch-6.6.1]$ ./tlstool/tools/sgtlstool.sh  -c tlstool/config/my.yml  -ca -crt

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KqzQwVgr-1678376868803)(C:\Users\xq\AppData\Roaming\Typora\typora-user-images\image-20230308161905094.png)]

此时生成一个out目录里面有所有的证书:

2.6 cp生成的证书文件到es的config目录下:

[elkuser@node1 elasticsearch-6.6.1]$ cp -ar out/* config/
[elkuser@node1 elasticsearch-6.6.1]$ chmod +x plugins/search-guard-6/tools/*.sh
[elkuser@node1 elasticsearch-6.6.1]$ chmod +x tlstool/tools/*.sh

2.7 验证证书:

[elkuser@node1 ~]$ /elasticsearch/elasticsearch-6.6.1/tlstool/tools/sgtlsdiag.sh \

  -ca /elasticsearch/elasticsearch-6.6.1/config/root-ca.pem  \

 -crt /elasticsearch/elasticsearch-6.6.1/config/node1.pem

2.8,Elasticsearch TLS配置

将 out下生成的 证书scp到其他节点。

[elkuser@node1 elasticsearch-6.6.1]$ scp -r  ./out/* root@node2:/elasticsearch/elasticsearch-6.6.1/config/^C
[elkuser@node1 elasticsearch-6.6.1]$ scp -r  ./out/* root@node3:/elasticsearch/elasticsearch-6.6.1/config/

将node1_elasticsearch_config_snippet.yml 文件中内容新增配置到node1节点

[elkuser@node1 elasticsearch-6.6.1]$ cat config/node1_elasticsearch_config_snippet.yml

(C:\Users\xq\AppData\Roaming\Typora\typora-user-images\image-20230308164313238.png)]

将node2_elasticsearch_config_snippet.yml 文件中内容新增配置到node2节点,注意密码要一致

将node3_elasticsearch_config_snippet.yml 文件中内容新增配置到node3节点,注意密码要一致

除上面之外,再加上几条配置:

searchguard.restapi.roles_enabled: [“sg_all_access”] #要使用REST管理API,请配置应具有API访问权限的Search Guard角色。以下条目授予对该角色的API的完全访问权限SGS_ALL_ACCESS

searchguard.nodes_dn:

  • CN=node1.example.com,OU=Ops,O=Example Com\, Inc.,DC=example,DC=com

  • CN=node2.example.com,OU=Ops,O=Example Com\, Inc.,DC=example,DC=com

  • CN=node3.example.com,OU=Ops,O=Example Com\, Inc.,DC=example,DC=com
    xpack.security.enabled: false
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    http.cors.allow-headers: "Authorization,X-Requested-With,Content-Length,Content-Type"

    copy 证书到plugin下的tools

    cp config/root-ca.pem  plugins/search-guard-6/tools/
    cp config/kirk.*  plugins/search-guard-6/tools/
    chmod +x ./plugins/search-guard-6/tools/*.sh
    

    2.9 检验配置文件:

[elkuser@node1 elasticsearch-6.6.1]$ ./tlstool/tools/sgtlsdiag.sh  -es ./config/elasticsearch.yml

2.10 用hash.sh生成密码:

[elkuser@node1 elasticsearch-6.6.1]$ ./plugins/search-guard-6/tools/hash.sh  -p 123qqqAAA...

WARNING: JAVA_HOME not set, will use /bin/java
$2y$12$jhgXzMJGbOKJUSxR3kaw6OXrq4Lu70.ovyQ5lWA/2os4mNGq6TR1a

将用tools/hash.sh生成的密码的hash值,$2y 12 12 12jhgXzMJGbOKJUSxR3kaw6OXrq4Lu70.ovyQ5lWA/2os4mNGq6TR1a替换到

plugins/search-guard-6/sgconfig/sg_internal_users.yml 的admin下的hash值里

如果想修改 admin 变成elastic 直接修改sg_internal_users.yml的admin==>改成elastic,并且要初始化。并且对应的filebeat的账号配置也要修改。

并且记录 vim config/client-certificates.readme里的 kirk的密码,一会启动时使用

修改sg_roles.yml配置:由于我们的索引名是自己定义过的,所以默认情况下logstash用户名对非logstash 或beat开头的索引只有只读权限,所以我们需要修改。

vim +159 plugins/search-guard-6/sgconfig/sg_roles.yml

重启 所有节点。

ps -ef | grep elastic; kill -9 pid; ./bin/elasticsearch -d

2.11 初始化:

(所有节点都需要输入命令)

cd  ./plugins/search-guard-6/

./tools/sgadmin.sh  -esa -icl -nhnv -cert ../../config/kirk.pem  -key ../../config/kirk.key -cacert ../../config/root-ca.pem  -h 192.168.40.195 -keypass 6Bw7XCrUOH2J

(不同的节点的 -h 后的ip是不一样 的)

只在一个节点输入即可:

cd  /elasticsearch/elasticsearch-6.6.1
./plugins/search-guard-6/tools/sgadmin.sh  -cd ./plugins/search-guard-6/sgconfig/ -icl -nhnv   -cacert  config/root-ca.pem  -cert config/kirk.pem -key config/kirk.key  -h 192.168.40.195 -keypass 6Bw7XCrUOH2J

在浏览器head插件验证:

http://192.168.40.195:9200查看集群状态

[elkuser@node1 elasticsearch-6.6.1]$ curl -u elastic:123qqqAAA… --insecure -XGET ‘https://es1:9200/_cluster/settings?pretty’

验证下是否开启分片分配:

curl -u elastic:123qqqAAA… --insecure -XGET 'https://es1:9200/_cluster/settings?pretty’验证看persistent和transient的cluster.routing.allocation.enable是不是 all 如果是就是开启了。

手动命令开启:

curl -Ss -XPUT ‘http://{192.168.40.195}:9200/_cluster/settings?pretty’ \

-H ‘Content-Type: application/json’ -d’
{
“persistent”: {
“cluster.routing.allocation.enable”: “true”
}
}

3 kibana配置:

3.1 运行kibana的search-guard插件

./bin/kibana-plugin install file:///root/kibana-6.6.1-linux-x86_64/search-guard-kibana-plugin-6-6.6.1-19.0.zip

Plugin installation complete 需要等一小段时间才会出现,耐心等待。。

3.2 copy证书改配置

将es集群config下的 root-ca.pem scp到kibana的 config下

再将下面的 配置改成这样

server.port: 5601 server.host: "0.0.0.0" elasticsearch.hosts: ["https://192.168.40.195:9200","https://192.168.40.196:9200","https://192.168.40.197:9200"] elasticsearch.username: "kibanaserver" #配置用户名 elasticsearch.password: "kibanaserver" #配置密码 elasticsearch.ssl.certificateAuthorities: [ "/root/kibana-6.6.1-linux-x86_64/config/root-ca.pem" ] elasticsearch.ssl.verificationMode: certificate #关闭证书验证 xpack.security.enabled: false #关闭x-apck插件 xpack.reporting.enabled: false

重启 kibana。

[root@kibana kibana-6.6.1-linux-x86_64]# nohup ./bin/kibana >> nohup.out 2>&1 &
[1] 29330

如果配置都正确的话,起来也很快,如果有点小问题,遇到kibana not ready yet 稍微等长一点时间也可以出来。

3.3 从浏览器 https访问kibana

前面所描述的是Kibana从es读取数据的过程,从HTTP升级到了HTTPS。

但是从浏览器到Kibana的过程仍然是HTTP。下面介绍的是通过修改kibana.yml将浏览器访问Kibana从HTTP升级到HTTPS。

生成密钥对:(用来l浏览器访问https://kibana)

openssl req -newkey rsa:2048 -nodes -keyout server.key -x509 -days 3650 -out server.crt -subj “/C=CN/ST=beijing/L=beijing/O=chinamobile/OU=wlyx/”

其中:CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名 称,ST=州或省份名称,C=单位的两字母国家代码

[root@kibana kibana-6.6.1-linux-x86_64]# openssl req -newkey rsa:2048 -nodes -keyout server.key -x509 -days 3650 -out server.crt  -subj "/C=CN/ST=zhejiang/L=hangzhou/O=yuno/OU=rjyw/"

Generating a 2048 bit RSA private key ......................+++ ..............................................+++

writing new private key to 'server.key

[root@kibana kibana-6.6.1-linux-x86_64]# mv server.crt config/
[root@kibana kibana-6.6.1-linux-x86_64]# mv server.key config/ 

修改配置文件:加上一下三行:

server.ssl.enabled: true
server.ssl.certificate: config/server.crt
server.ssl.key: config/server.key

4 filebeat配置:

(关于filebeat的配置可参考 https://blog.csdn.net/hanjinjuan/article/details/122847743)

4.1修改配置

将 root-ca.pem scp到 filebeat配置下

重启filebeat 观察 传到es的日志:

[root@filebeat filebeat-6.4.3-linux-x86_64]# nohup ./filebeat -e -c filebeat.yml >> nohup.out 2>&1 &

以前错误的时候是:

现在是:

在filebeat上 cp一份 数据到 /home/data (input)下

再在 kibana上观察数据

5 小结:

elasticsearch的单机版的问题处理:

https://www.itym.cn/post/1012.html

curl的使用:

curl查询es集群状态
https://blog.csdn.net/icanlove/article/details/125636857
https://blog.csdn.net/weixin_45717886/article/details/124192358

curl http://192.168.40.195:9200/_cat/health?v
curl ‘192.168.40.195:9200/_cat/nodes?v’

curl 访问 https

curl + --insecure -u elastic:123qqqAAA… ‘https://{node1ip:9200}’

curl --insecure -X GET ‘https://192.168.40.195:9200’ --cacert ‘/root/search-guard-certificates/root-ca.pem’ --user elastic:123qqqAAA…

curl -u elastic:123qqqAAA… --insecure ‘https://192.168.40.195:9200/_cat/indices?v’

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ox3BZehC-1678377755628)(C:\Users\xq\AppData\Roaming\Typora\typora-user-images\image-20230309171418976.png)]

curl -u elastic:123qqqAAA… --insecure ‘https://192.168.40.195:9200/_cat/nodes?v’

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K1izWQcS-1678376868812)(C:\Users\xq\AppData\Roaming\Typora\typora-user-images\image-20230309171432638.png)]

6 多实例 elasticsearch

6.1 修改配置:

6.1.1,同一台机器上多实例 使用同一个证书

比如是 已经搭好的集群修改成多实例,同样的一台机子,第二个路径下的es节点命名 node1-1

如果是第二节点就是 node2-2,端口是9201和9301。

6.1.1.1 修改配置:

原来的配置:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EKsJ2b4i-1678376868813)(C:\Users\xq\AppData\Roaming\Typora\typora-user-images\image-20230309154350775.png)]

现在的配置:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZicxooBh-1678376868814)(C:\Users\xq\AppData\Roaming\Typora\typora-user-images\image-20230309154411195.png)]

注意:需要一台一台的 改。

6.1.1.2 步骤:
cp -ar /elasticsearch/elasticsearch-6.6.1/  /elasticsearch/elasticsearch-6.6.1-1
vim /elasticsearch/elasticsearch-6.6.1/config/elasticsearch.yml

将node1 改成node1-1 如图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yEKLsGQJ-1678376868816)(C:\Users\xq\AppData\Roaming\Typora\typora-user-images\image-20230309154959930.png)]

6.1.1.3 然后重启:
[elkuser@node1 elasticsearch-6.6.1-1]$ ./bin/elasticsearch -d
6.1.1.4 初始化:
cd  ./plugins/search-guard-6/

./tools/sgadmin.sh  -esa -icl -nhnv -cert ../../config/kirk.pem  -key ../../config/kirk.key -cacert ../../config/root-ca.pem  -h 192.168.40.195 -keypass 6Bw7XCrUOH2J
6.1.1.5 curl查看集群状态
[elkuser@node1 elasticsearch-6.6.1-1]$ curl --insecure 'https://192.168.40.195:9200/_cat/nodes?v' -u elastic:123qqqAAA...

ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.40.195 55 92 3 0.41 0.14 0.13 mdi * node1
192.168.40.195 78 92 3 0.41 0.14 0.13 di - node1-1
192.168.40.196 45 93 2 0.00 0.03 0.17 di - node2
`192.168.40.197 80 94 2 0.00 0.05 0.27 mdi - node3

如此一台一台的添加:

再在 一台机器上输入:

cd  /elasticsearch/elasticsearch-6.6.1
./plugins/search-guard-6/tools/sgadmin.sh  -cd ./plugins/search-guard-6/sgconfig/ -icl -nhnv   -cacert  config/root-ca.pem  -cert config/kirk.pem -key config/kirk.key  -h 192.168.40.195 -keypass 6Bw7XCrUOH2J
6.1.2,同一台机器上多实例分别使用不同的证书

这个应该是在 做my.yml的时候就把节点名字都写入my.yml然后在生成 out下的 证书,在根据证书来用search-guard加固,同上面的加证书一样,每一个节点都有不一样的证书和密码。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值