2019年5月21日,Elastic官方发布消息: Elastic Stack 新版本6.8.0 和7.1.0的核心安全功能现免费提供。
这意味着用户现在能够对网络流量进行加密、创建和管理用户、定义能够保护索引和集群级别访问权限的角色,并且使用 Spaces 为Kibana.

至此,现今出现了一个问题,有些公司用的还是ElasticSearch6.0.1以及比较老的ElasticSearch版本,这写版本的一些基于端口加密的功能等都是要收费的,如果想要使用这些功能的话就需要付费,如果不想付费就需要破解。

Tips

该部署全程都是一步一步实践得来的,需要有一定的动手能力,踩了很多坑呜呜。

其中有两篇文章给了我很多启发:

部署ElasticSearch

安装ElasticSearch

  • 上传(yum install lrzsz)
  • 解压(tar -zxvf 包名 -C 路径)
    • 如果想指定解压路径就必须加-C
  • 修改配置文件(vim config/elasticsearch.yml)
    • 注意这个配置文件并不是最新的,而后面还会修改。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
cluster.name: logs_production    # 集群名称,同名称为集群节点
node.name: node1 # 节点名称,默认会随机取名称
node.master: true # 是否为master节点
node.data: true # 是否为数据节点
path.data: /home/es/elasticsearch-6.0.1/data # 如果在path.data中写多个目录用“,”分隔,功能类似>于raid 0,而不是做备份
network.host: 192.168.88.161 # 监听主机
http.port: 9201 # 监听端口
transport.tcp.port: 9200 # 传输端口
transport.tcp.compress: true
# 设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点
discovery.zen.ping.unicast.hosts: ["192.168.88.161:9200", "192.168.88.162:9200","192.168.88.163:9200"]
cluster.routing.allocation.same_shard.host: true


# 另外一份配置文件
#配置es的集群名称,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。
cluster.name:bi-cluster
#节点名称
node.name:node-master
#存储数据的目录
path.data:/home/elasticsearch/data
#存储日志的目录
path.logs:/home/elasticsearch/logs
#设置绑定的ip地址还有其它节点和该节点交互的ip地址
network.host:0.0.0.0
#指定http端口,你使用head、kopf等相关插件使用的端口
http.port:9200
#设置节点间交互的tcp端口,默认是9300
transport.tcp.port:9300
#设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点。
discovery.zen.ping.unicast.hosts:["10.108.4.203:9300","10.108.4.204:9300","10.108.4.205:9300"]
#如果没有这种设置,遭受网络故障的集群就有可能将集群分成两个独立的集群-分裂的大脑-这将导致数据丢失
discovery.zen.minimum_master_nodes:3

创建es用户

1
2
3
4
5
6
7
8
9
10
11
12
# 在root用户下创建es用户并设置密码
useradd es
passwd es

# 创建es的home目录
mkdir /home/es

# 添加权限
visudo

:100
es ALL=(ALL) ALL

安装x-pack

1
2
3
4
5
6
离线安装:bin/elasticsearch-plugin install file:~/install/x-pack-6.0.1.zip

设置访问密码,命令:setup-passwords命令,该命令只能执行一次,之后可以在Kibana中的管理>用户 UI 更新密码
./bin/x-pack/setup-passwords interactive

用户名就是:elastic ,密码就是你刚刚设置的

破解

  • 注意破解只是在主节点一处破解就行,但是jar包需要覆盖所有,添加证书这也是在主节点上进行的!

  • 注意:在添加证书之前必须要设置xpack.security.enabled: false,并且重启集群,然后再执行命令。

  • 如果不按上述方式执行,也就相当于你使用了x-pack,并且想破解x-pack,这个是不被允许的,必须关掉再破解。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
###########1、
查看es证书日期
curl -XGET -u elastic:elastic 192.168.88.161:9201/_license
查询结果:
{
"license" : {
"status" : "active",
"uid" : "1ae30e6f-fd44-42dc-9923-4ed0eb240381",
"type" : "platinum",
"issue_date" : "2023-07-18T06:31:12.928Z",
"issue_date_in_millis" : 1689661872928,
"expiry_date" : "2049-12-31T16:00:00.999Z",
"expiry_date_in_millis" : 2524579200999,
"max_nodes" : 1000,
"issued_to" : "my",
"issuer" : "elasticsearch",
"start_date_in_millis" : 1498694400000
}
}
#############2、
修改license+.json文件,将查询结果内
uid、
issue_date_in_millis、
expiry_date_in_millis、
issued_to、
start_date_in_millis字段值就行修改
type值不需要修改,仍然使用"platinum",

#############3、
将jar包x-pack-6.0.1.jar,在elasticsearch-6.0.1/plugins/x-pack/下,进行替换(所有节点)

#############4、
执行es命令:
curl -XPUT -H 'Content-Type: application/json' -u elastic:qqq123 'http://192.168.88.161:9200/_xpack/license?acknowledge=true' -d @license+.json

返回结果:{"acknowledged":true,"license_status":"valid"}

重新查询证书,查看字段expiry_date是否已经改为2024或者2025的日期

破解完成之后,别着急重启es

  • 如果没有设置密码,要重设密码:

    • bin/elasticsearch-setup-passwords interactive
  • 修改elasticsearch.yml配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 添加如下2行,打开安全配置功能
    xpack.security.enabled: true
    xpack.security.transport.ssl.enabled: true

    # x-pack设置完毕后,head无法登陆的问题(无法登录再设置)
    # 在elasticsearch.yml中添加如下三行配置
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type

生成证书

破解完之后,你会发现哎,只能启动主节点,其他节点启动报错。

  • 找到x-pack目录下的脚本(如果不在bin/x-pack/的目录下,就可能在bin目录下)

  • 运行elasticsearch-certgen

  • 得到一个压缩包

  • 解压后得到四个文件(ca文件夹有两个,elasticsearch文件夹(上面自己定义的名字嗷)有两个)

  • 复制这两个文件夹到config目录下,同时分发到node2,node3相同的文件夹和目录下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[es@node1 elasticsearch-6.0.1]$ ll config/
总用量 20
drwxrwxr-x 2 es es 34 10月 30 15:07 ca
drwxrwxr-x 2 es es 58 10月 30 15:07 cert_directory
-rw-rw---- 1 es es 418 10月 30 14:01 elasticsearch.keystore
-rw-rw---- 1 es es 4070 10月 30 16:52 elasticsearch.yml
-rw-rw---- 1 es es 2672 12月 4 2017 jvm.options
-rw-rw---- 1 es es 5091 12月 4 2017 log4j2.properties
drwxr-x--- 2 es es 104 10月 30 14:01 x-pack
[es@node1 elasticsearch-6.0.1]$ ll config/ca
总用量 8
-rw-rw-r-- 1 es es 1310 10月 30 15:07 ca.crt
-rw-rw-r-- 1 es es 1675 10月 30 15:07 ca.key
[es@node1 elasticsearch-6.0.1]$ ll config/cert_directory/
总用量 8
-rw-rw-r-- 1 es es 1338 10月 30 15:07 cert_directory.crt
-rw-rw-r-- 1 es es 1679 10月 30 15:07 cert_directory.key


# 分发命令
scp *.crt *.key 192.168.0.162:/home/es/elasticsearch6.0.1/config/ca
scp *.crt *.key 192.168.0.163:/home/es/elasticsearch6.0.1/config/cert_directory
  • 最终在配置文件中添加如下
1
2
3
xpack.ssl.key: cert_directory/cert_directory.key
xpack.ssl.certificate: cert_directory/cert_directory.crt
xpack.ssl.certificate_authorities: ca/ca.crt
  • 最终的config/elasticsearch.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
cluster.name: logs_production    # 集群名称,同名称为集群节点
node.name: node2 # 节点名称,默认会随机取名称
node.master: false # 是否为master节点
node.data: true # 是否为数据节点
path.data: /home/es/elasticsearch-6.0.1/data # 如果在path.data中写多个目录用“,”分隔,功能类似>于raid 0,而不是做备份
network.host: 192.168.88.162 # 监听主机
http.port: 9201 # 监听端口
transport.tcp.port: 9200 # 传输端口
transport.tcp.compress: true
# 设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点
discovery.zen.ping.unicast.hosts: ["192.168.88.161:9200", "192.168.88.162:9200","192.168.88.163:9200"]
cluster.routing.allocation.same_shard.host: true

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true


http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type

xpack.ssl.key: cert_directory/cert_directory.key
xpack.ssl.certificate: cert_directory/cert_directory.crt
xpack.ssl.certificate_authorities: ca/ca.crt

Azkaban部署

下载并上传到Linux

1
2
3
4
# 不能上传的话
yum install lrzsz

# 下载(网上有安装包)

安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 首先解压文件
tar -zxvf azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz

# 解压后重新命名
mv azkaban-solo-server-0.1.0-SNAPSHOT azkaban-solo-server

# 移动到/export/server目录下
mv azkaban-solo-server /export/server/

# 修改配置文件(此步骤之前已经切换到/export/server目录下了)
vim azkaban-solo-server/conf/azkaban.properties

# 修改配置文件
default.timezone.id=Asia/Shanghai
jetty.port=8082

# 启动Azkaban
./bin/start-solo.sh