Elastic Stack在x-pack中提供了免费的TLS加密通信和基于角色的访问控制(RBAC)。前面两篇博客分别介绍了ELK的安装和脚本配置以及SSL自签名证书的生成。
这篇博客我们仅使用一个elasticsearch节点并采取nginx加x-pack的方式确保elasticsearch的安全。接着为Kibana启用安全功能以及配置基于角色的访问控制,来远程访问elasticsearch。最后配置logstash的远程连接功能。
配置elasticsearch节点
步骤一:elasticsearch上配置TLS
进入elasticsearch目录
如果是deb安装的elasticsearch,主目录在/usr/share/elasticsearch目录下,config目录就是/etc/elasticsearch;如果是tar.gz直接在解压后的目录下即可。
接着在elasticsearch目录下使用下列命令生成ssl证书:
代码语言:txt复制bin/elasticsearch-certutil cert -out
config/elastic-certificates.p12 -pass ""
在config目录的elasticsearch.yml配置文件,在文件末尾黏贴下列代码:
代码语言:txt复制xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
保存文件,然后就可以启动elasticsearch了
生成密码
在elasticsearch目录下使用下面的命令生成密码:
代码语言:txt复制bin/elasticsearch-setup-passwords auto
也可以将auto改为interactive自定义密码。
生成的密码形式如下:
代码语言:txt复制Changed password for user apm_system
PASSWORD apm_system =
Changed password for user kibana
PASSWORD kibana =
Changed password for user logstash_system
PASSWORD logstash_system =
Changed password for user beats_system
PASSWORD beats_system =
Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user =
Changed password for user elastic
PASSWORD elastic =
记录上述密码。以上密码将是后续软件登录elasticsearch的重要凭证。
配置nginx
修改/etc/nginx/nginx.conf脚本
在http{}中加入下面代码:
代码语言:txt复制server {
listen 你的PORT ssl http2;
listen [::]:你的PORT ssl http2;
server_name 你的IP;
root /usr/share/nginx/html;
access_log /var/log/nginx/elasticsearch_access.log;
error_log /var/log/nginx/elasticsearch_error.log;
ssl_certificate "/path/cert.crt";
ssl_certificate_key "/path/cert.key";
ssl_session_cache shared:SSL:1m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_timeout 10m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4!DHE;
ssl_prefer_server_ciphers on;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
proxy_pass http://127.0.0.1:9200;#访问你的端口时,会自动代理到127.0.0.1的9200端口
}
}
其中.crt和.key文件通过上一篇生成SSL证书的方法生成。
重启nginx
代码语言:txt复制systemctl restart nginx.service
配置kibana远程访问
之前的博客已经介绍过与elasticsearch处在同一节点的启动。为了减少对计算资源的占用,我将kibana放到了本地,仅在需要使用的时候开启kibana服务远程连接elasticsearch服务器。
打开kibana的config目录下的kibana.yml文件。将下面两行的注释取消:
代码语言:txt复制elasticsearch.username: "user"
elasticsearch.password: "pass"
将”user”改为”kibana”,将”password”改为刚才生成的用户kibana的密码”setup-passwords”。
修改该配置文件中的elasticsearch的host:
代码语言:txt复制elasticsearch.hosts: ["elasticsearch的IP:Port"]
接着取消下列注释,将值改为从full改为none,这样改的目的是不要验证我们自签名的证书,或者也可以配置ca证书的路径(这个方法我没试过,当然更安全一点^_^)
代码语言:txt复制elasticsearch.ssl.verificationMode: none
接着启动kibana,用户名密码是刚才生成的超级用户elastic和其对应的密码。
创建新角色的方法去查参考文献吧哈哈哈
::: tip
kibana必须和初次连接elasticsearch的kibana版本相同,最好kibana和elasticsearch的版本一直都相同。
:::
配置logstash远程连接elasticsearch
修改logstash.yml
cd到logstash文件夹打开config目录下的logstash.yml。取消X-Pack Settings中下面配置的注释并修改:
代码语言:txt复制xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.username: logstash_system
xpack.monitoring.elasticsearch.password: setup-passwords
xpack.monitoring.elasticsearch.hosts: ["elasticsearch的IP:Port"]
xpack.monitoring.elasticsearch.ssl.certificate_authority: /path/ca.crt
上面的用户名密码是之前elasticsearch为logstash自动生成的。签名ca是自签名SSL时我们自己生成的ca
修改pipelines.conf
上一篇博客中我们以收集nginx日志为例,列出了详细的配置,这次我们在之前的脚本上添加了登陆elasticsearch的用户名和密码,以及访问elasticsearch时验证自签名证书的cacert:
代码语言:txt复制input {
beats {
port => "5044"
}
}
# The filter part of this file is commented out to indicate that it is
# optional.
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
geoip {
source => "clientip"
}
}
output {
elasticsearch {
hosts => [ "elasticsearch的IP:Port" ]
index => "nginx-access-%{ YYYY.MM.dd}"
cacert => '/path/ca.crt'
user => "elastic"
password => "setup-passwords"
}
}
修改保存好后就可以启动logstash了。
logstash的后台命令如下:
代码语言:txt复制nohup /path/logstash-X.X.X/bin/logstash -f /path/logstash-X.X.X/nginx-pipelines.conf --config.reload.automatic &
配置filebeats
因为filebeats和logstash运行在同一主机下,所以filebeats的配置与上一篇博客相同。
这里介绍一下filebeats后台运行的方法。
使用nohup命令之后,关掉窗口的时候filebeats也会自动关闭,因此需要使用下面的办法:
代码语言:txt复制sudo apt-get install screen (或者 yum install screen)
screen
nohup /path/filebeat-X.X.X-linux-x86_64/filebeat -e -c /path/filebeat-X.X.X-linux-x86_64/filebeat.yml > /path/filebeat-X.X.X-linux-x86_64/filebeat.log &