CentOS 7部署Elasticsearch7.4单点并进行安全认证

释放双眼,带上耳机,听听看~!

介绍

从Elastic Stack 6.8 和 7.1 版本开始(排除7.0),Elastic 公司默认在分发包中免费提供多项安全功能,例如 TLS 加密通信、基于角色的访问控制(RBAC)等等。

环境介绍

角色 IP地址 系统版本 配置 es版本
es服务器 192.168.31.216 CentOS Linux release 7.6.1810 2c/4G elasticsearch-7.4.0

部署elaticsearch

1.环境部署

[root@elastic_node1 ~]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.0-linux-x86_64.tar.gz
[root@elastic_node1 ~]# tar xf elasticsearch-7.4.0-linux-x86_64.tar.gz -C /usr/local/
[root@elastic_node1 ~]# mv /usr/local/elasticsearch-7.4.0 /usr/local/elastic7.4
[root@elastic_node1 ~]# mkdir /usr/local/elastic7.4/{data,logs,run}
[root@elastic_node1 ~]# useradd -s /bin/bash -U elastic                             #elastic不能以root身份启动,必须使用普通用户
[root@elastic_node1 ~]# chown -Rf elastic.elastic /usr/local/elastic7.4

2.修改文件描述符数量
因为elasticsearch对文件描述符的限制至少为65536,所以我们必须要修改系统的文件描述符数量

[root@elastic_node1 ~]# cat << EOF >> /etc/security/limits.conf
elastic soft nofile 65536
elastic hard nofile 65536
EOF

3.修改max_map_count值

临时设置:
[root@elastic_node1 ~]# sysctl -w vm.max_map_count=655360
vm.max_map_count = 655360

永久设置:
[root@elastic_node1 ~]# echo 'vm.max_map_count=655360' >> /etc/sysctl.conf 
[root@elastic_node1 ~]# sysctl -p   
vm.max_map_count = 655360

4.无法分配内存问题

[root@elastic_node1 ~]# cat << EOF >> /etc/security/limits.conf
elastic soft memlock unlimited
elastic hard memlock unlimited
EOF

修改配置文件

1.复制配置文件

[root@elastic_node1 ~]# su - elastic                                        #切换到elastic用户进行操作
[elastic@elastic_node1 /]$ ulimit -n                                        #检查文件打开数
65536   
[elastic@elastic_node1 ~]$ cd /usr/local/elastic7.4/config
[elastic@elastic_node1 config]$ cp elasticsearch.yml elasticsearch.yml.default

2.elasticsearch.yml配置如下
以下配置文件elasticsearch.yml参数内容详解见 “https://abcops.cn/archives/961” 文章中的elasticsearch7.0配置文件详解

[elastic@elastic_node1 config]$ vim elasticsearch.yml
node.name: elastic
path.data: /usr/local/elastic7.4/data
path.logs: /usr/local/elastic7.4/logs
bootstrap.memory_lock: true
network.host: 192.168.31.216
network.tcp.no_delay: true
network.tcp.keep_alive: true
network.tcp.reuse_address: true
network.tcp.send_buffer_size: 256mb
network.tcp.receive_buffer_size: 256mb
transport.tcp.port: 9300
transport.tcp.compress: true
http.max_content_length: 200mb
http.cors.enabled: true
http.cors.allow-origin: "*"
http.port: 9200
cluster.initial_master_nodes: ["192.168.31.216:9300"]

3.修改jvm.options配置文件

[elastic@elastic_node1 config]$ grep -Ev "#|^$"jvm.options | head -5 
-Xms2g #Xms表示ES堆内存初始大小 
-Xmx2g #Xmx表示ES堆内存的最大可用空间 
#我这是测试环境,因内存空间不足,所以才分配较少的内存空间,ES是很耗内存的,如果在生产环境资源充足的情况下建议给到32G 
#过多的内存会导致用于缓存的内存越多,最终导致内存回收的时间也加长 #在生产中,设置的内存建议不要超过物理内存50%,以保证有足够内存留给操作系统 
#我机器是4G内存,我这里给了2G,如果你机器超出或等于机器物理内存的话,极大可能导致内存 OOM 后es进程被系统所 Killd 掉 

#GC配置 
-XX:+UseConcMarkSweepGC #使用CMS内存收集 -XX:CMSInitiatingOccupancyFraction=75 #使用CMS作为垃圾回收使用,75%后开始CMS收集 
-XX:+UseCMSInitiatingOccupancyOnly #使用手动定义初始化开始CMS收集 

启动 elasticserach 7.4

[elastic@elastic_node1 config]$ /usr/local/elastic7.4/bin/elasticsearch --daemonize --pidfile=/usr/local/elastic7.4/run/elastic.pid
[elastic@elastic_node1 elastic7.4]$ tail -f logs/elasticsearch.log                         #查看启动日志,是否存在ERROR信息

启动信息图示:

查看节点

[elastic@elastic_node1 elastic7.4]$ curl -XGET 'http://192.168.31.216:9200/_cat/nodes?v'
ip             heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.31.216            4          74  19    0.67    0.63     0.44 dilm      *      elastic

配置 x-pack 开启用户认证

X-Pack是一个Elastic Stack的扩展,将安全,警报,监视,报告和图形功能包含在一个易于安装的软件包中。ELK 6.8 以上版本已经全面集成x-pack不需要单独安装,其中最关键的一点是ES和Kibana的安全认证功能可以直接使用了,下面是开启配置步骤

1.elasticsearch开启安全认证

[elastic@elastic_node1 elastic7.4]$ cat << EOF >> /usr/local/elastic7.4/config/elasticsearch.yml
xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
EOF

2.重启elasticsearch

[elastic@elastic_node1 elastic7.4]$ cat /usr/local/elastic7.4/run/elastic.pid | xargs kill -HUP
[elastic@elastic_node1 elastic7.4]$ /usr/local/elastic7.4/bin/elasticsearch --daemonize --pidfile=/usr/local/elastic7.4/run/elastic.pid

3.Elasticsearch设置密码
以下两个命令可以来设置连接elasticsearch的密码
bin/elasticsearch-setup-passwords auto为各种内部堆栈用户生成随机密码
bin/elasticsearch-setup-passwords interactive手动定义内部堆栈密码

以下我采用随机生成密码,随机生成的密码请谨慎保管

[elastic@elastic_node1 elastic7.4]$ bin/elasticsearch-setup-passwords auto
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
The passwords will be randomly generated and printed to the console.
Please confirm that you would like to continue [y/N]y           #确认随机生成密码

Changed password for user apm_system
PASSWORD apm_system = e2sbet6XUJM2BMidIEoF

Changed password for user kibana                                #kibana连接es的用户名及密码
PASSWORD kibana = uYmh99dknj08J8eGkmOF

Changed password for user logstash_system                       #logstash连接es的用户名及密码
PASSWORD logstash_system = R7uczZAY55oIe4lqT1tg

Changed password for user beats_system                          #beats连接es的用户名及密码
PASSWORD beats_system = uqUjdUPWNVeqd16sALUV

Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = yJzCgWD3OY8UiCjKjt96          #远程监控es的用户名及密码

Changed password for user elastic
PASSWORD elastic = dW1pGPL01TrH7dQ86mdQ                         #应用程序连接es API的用户名及密码

验证连接es安全性

1.使用curl来验证
-u 指定用户名:密码

[elastic@elastic_node1 elastic7.4]$ curl -XGET -u elastic:dW1pGPL01TrH7dQ86mdQ 'http://192.168.31.216:9200/_cat/nodes?v'
ip             heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.31.216           10          75   3    0.00    0.10     0.25 dilm      *      elastic

2.使用浏览器来验证
浏览器中输入 "http://192.168.31.216:9200"

使用 Kibana 基于安全认证连接 ES

1.下载并部署Kibana

[root@elastic_node1 src]# wget https://artifacts.elastic.co/downloads/kibana/kibana-7.4.0-linux-x86_64.tar.gz
[root@elastic_node1 src]# tar xf kibana-7.4.0-linux-x86_64.tar.gz -C /usr/local/
[root@elastic_node1 src]# mv /usr/local/kibana-7.4.0-linux-x86_64 /usr/local/kibana7.4

2.修改Kibana配置文件

[root@elastic_node1 config]# cp kibana.yml kibana.yml.default
[root@elastic_node1 config]# mkdir /usr/local/kibana7.4/run
[root@elastic_node1 config]# cat kibana.yml
server.port: 5601
server.host: "192.168.31.216"
server.name: "kibana"
elasticsearch.hosts: "http://192.168.31.216:9200"
elasticsearch.preserveHost: true
kibana.index: ".kibana"
pid.file: /usr/local/kibana7.4/run/kibana.pid
logging.verbose: true
elasticsearch.username: "kibana"                        #指定刚使用elasticsearch生成的kibana连接的用户名及密码
elasticsearch.password: "uYmh99dknj08J8eGkmOF"

3.启动并运行Kibana
kibana同样不允许root用户直接运行

[root@elastic_node1 config]# useradd -s /bin/bash -U kibana
[root@elastic_node1 config]# chown -Rf kibana.kibana /usr/local/kibana7.4
[root@elastic_node1 config]# su - kibana
[kibana@elastic_node1 ~]$ nohup /usr/local/kibana7.4/bin/kibana &

4.访问Kibana
在浏览器中输入 http://192.168.31.216:5601

5.创建 roles 角色

人已赞赏
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧