当前位置: 首页 > news >正文

ELK开启安全策略

背景

近期,我们的开发系统在一次客户漏洞扫描中被检测出存在高危漏洞,其中一项便是Elasticsearch(ES)未配置用户名密码访问。尽管此前我们的ES集群主要作为基础设施在内网运行,并未直接对外暴露,但此次扫描结果明确指出了潜在的安全风险。为了消除这些隐患,并进一步提升系统的整体安全性,我们决定对ELK Stack进行全面的安全加固。

注意,本篇不会介绍elk相关的部署操作,而是基于已经部署好的elk服务,进行安全配置,关于elk的部署,可以参考官方文档或者其他博客,笔者也曾出过一篇相关的博客,地址:https://xie.infoq.cn/article/809dd91a0ec9d6e23c3db67dc

ElasticSearch相关

配置证书

生成证书

使用es自带的cert工具生成证书

# 创建ca
./bin/elasticsearch-certutil ca

执行此命令后,系统会提示您输入一个密码,请按需输入并牢记。如果忘记密码,将无法使用该CA证书。

如果按默认保存,您将获得一个p12格式的CA证书文件(elastic-stack-ca.p12)。您可以通过openssl查看其包含的信息:

可以通过openssl查看其包含的信息,此命令将显示p12证书文件的详细信息,包括证书链和私钥。请注意,输出内容可能较多。

openssl pkcs12 -info -nodes -in elastic-stack-ca.p12

您还可以查看CA证书的过期时间:

openssl pkcs12 -in elastic-stack-ca.p12 -nodes -nokeys -clcerts | openssl x509 -enddate -noout

接下来,利用已创建的CA证书生成ES服务所需的加密证书:

bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

执行此命令后,同样会提示您输入密码。完成后,您将获得ES服务所需的证书文件(elastic-certificates.p12)。

同样的,可以使用刚才查看证书内容和过期时间的方法查看一下这个证书的信息,该文件就是我们下面需要放到es的配置文件里,进行传输层加密的证书。

提取CA证书

p12证书是一个类似加密文件的文件类型,不能直接再kibana,logstash等客户端使用,需要需要将其提取成crt文件

openssl pkcs12 -in config/certs/elastic-certificates.p12 -cacerts -nokeys -out config/certs/elastic-ca.crt

注意,关于证书的格式大家可以自行了解一下,p12格式在多数场景下是不能直接用的,需要解压转换成crt或者pem格式。

生成提取证书的操作只执行一次就行,然后将生成的证书复制到集群内的各个节点

授权

完成证书的生成和提取操作后,需要将证书文件复制到集群各个节点,然后进行授权操作,一般是对证书所在路径和文件进行授权就可以,基本就是下面这几个语句

注意,我这里的路径写的是相对路径,操作时要确保你在证书所在目录的主路径里,比如/usr/elasticsearch等。

sudo chown -R elsearch:elsearch /config/certs/*
chmod 600 /home/elastic/elasticsearch-7.14.1/config/certs/*
sudo chown -R elsearch:elsearch /config
chmod 750 /config

同步证书

将准备好的证书文件同步到其他服务器,注意,要尽量确保每个节点的es服务存储路径规则一致,这主要是为了运维方便,如果不一致,配置证书的时候要小心一点,别弄错了。

# 注意生产环境如果有安全要求,可以使用更安全可靠的方式进行同步
scp -r ./config/certs 192.168.0.188:/opt/elastic/config/certs
scp -r ./config/certs 192.168.0.189:/opt/elastic/config/certs

至此,准备工作完成

修改配置

修改每个节点的配置文件,在elasticsearch.yml文件中添加以下安全配置:

http://www.xdnf.cn/news/1291051.html

相关文章:

  • 【递归、搜索与回溯算法】穷举、暴搜、深搜、回溯、剪枝
  • String里常用的方法
  • w481社区老人健康信息管理系统的设计与实现
  • 5.语句几个分类
  • BGE:智源研究院的通用嵌入模型家族——从文本到多模态的语义检索革命
  • 开源WAF新标杆:雷池SafeLine用语义分析重构网站安全边界
  • 【C#】利用数组实现大数数据结构
  • 银发经济时代:科技赋能养老,温情守护晚年,让老人不再孤独无助
  • LeetCode 面试经典 150_数组/字符串_整数转罗马数字(18_12_C++_中等)(模拟)(对各位进行拆解)
  • STM32HAL 快速入门(六):GPIO 输入之按键控制 LED
  • JMeter 测试 WebSocket 接口的详细教程
  • HarmonyOS NDK的JavaScript/TypeScript与C++交互机制
  • 实战多屏Wallpaper壁纸显示及出现黑屏问题bug分析-学员作业
  • 从0开始配置conda环境并在PyCharm中使用
  • 基于Apache Flink的实时数据处理架构设计与高可用性实战经验分享
  • Flink中的窗口
  • 解决程序连不上RabbitMQ:Attempting to connect to/access to vhost虚拟主机挂了的排错与恢复
  • Windows也能用!Claude Code硬核指南
  • 【报错解决】Conda - Downloaded bytes did not match Content-Length
  • Java零基础笔记16(Java编程核心:存储读写数据方案—File文件操作、IO流、IO框架)
  • 搜索引擎核心机制解析
  • 5.0.9.1 C# wpf通过WindowsFormsHost嵌入windows media player(AxInterop.WMPLib)
  • C# WPF本地Deepseek部署
  • 集成电路学习:什么是CV计算机视觉
  • IPA1299至为芯替代TI ADS1299的脑机接口芯片
  • 网络安全合规6--服务器安全检测和防御技术
  • 高级IO(五种IO模型介绍)
  • Spring、Spring MVC、Spring Boot与Spring Cloud的扩展点全面梳理
  • Spring Boot 集成 机器人指令中枢ROS2工业机械臂控制网关
  • 从“存得对”到“存得准”:MySQL 数据类型与约束全景指南