华为云云耀云服务器L实例评测|华为云上试用主机安全产品Elkeid

文章目录

  • 华为云云耀云服务器L实例评测|华为云上试用主机安全产品Elkeid
    • 一、背景:什么是主机安全
    • 二、主机安全之Elkeid
      • 1. Elkeid 介绍
      • 2. Elkeid Server
      • 3. Elkeid Server 架构
        • Elkeid AgentCenter(下面简称AC)
        • Elkeid Service Discovery(下面简称SD)
        • Elkeid Manager
    • 三、华为云上安装部署试用Elkeid
      • 1. 华为云主机准备
      • 2. Elkeid安装和配置
      • 3. docker安装过程问题记录
        • docker 报错:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
        • docker报错: No chain/target/match by that name.
      • 4. Elkeid使用
    • 四、参考

华为云云耀云服务器L实例评测|华为云上试用主机安全产品Elkeid

一、背景:什么是主机安全

随着云技术的发展,现在各大银行、大小企业和政府都在频繁使用云技术,在这些领域,安全显然是一个非常重要的因素。云主机作为数据存储的场所,正面临着黑客不断入侵的威胁,那么主机安全是什么?

主机安全具体是指保证主机在数据存储和处理的保密性、完整性,可用性,它包括硬件、固件、系统软件的自身安全,以及一系列附加的安全技术和安全管理措施,从而建立一个完整的主机安全保护环境。

我国的信息安全经过二十多年的建设,在防病毒、网络和边界安全方面到得了一定成果,而主机环境安全建设却相对较薄弱,主机是信息安全最重要,也是最后一门防线。

其实主机安全,从我个人理解角度出发,更多的时候是一个主机层入侵检测系统HIDS (Host-based Intrusion Detection System),主要通过收集主机层的信息来实现入侵检测/行为审计/攻击溯源/资产盘点/合规基线检测等能力。

我们今天 就是要在华为云上体验使用一下Elkeid,Elkeid: 是字节跳动的一个开源的 HIDS 项目。

二、主机安全之Elkeid

1. Elkeid 介绍

Elkeid 开源版本项目地址:https://github.com/bytedance/Elkeid

安全领域的开源项目,这个开源项目叫做 Elkeid,意思是瑶光/破军,也是北斗七星之一,它解决的问题就是主机安全

Elkeid 是火山引擎旗下的 CWPP 产品,旨在满足现代企业在复杂技术架构下的安全需求。Elkeid 起源于字节跳动(ByteDance)内部最佳实践,原生集成了针对 服务器/容器/Serverless 等多种工作负载的反入侵能力,涵盖了 服务器与容器反入侵、容器集群反入侵、应用运行时保护 RASP(Runtime Application Self-Protection)、威胁溯源与猎捕、工作负载资产盘点、工作负载漏洞发现,暴露面分析等能力,并提供开放式策略引擎,帮助企业在一体式的解决方案下更好地保障云上、云下的工作负载安全。

Elkeid 是由字节跳动内部安全与风控团队自研的一个新的主机安全解决方案,它具备几个鲜明的特点。

  • 一个就是规模大,能够支撑字节跳动内部百万级的服务器数量。当然讲到这块,也稍微剧透一下字节跳动内部的服务器规模。
  • 另外一个特点,就是 Elkeid 采用了我们内核态的技术进行大多数指标和信息的收集。
  • 这样一方面可以极大地提升性能,另一方面也可以去采集更多更丰富的数据,从而大大增强我们的检测能力。

目前,Elkeid完整版本部署规模已达到100万量级,其稳定性/性能/数据采集能力/检测能力/溯源能力等均得到了实战验证,均有不俗表现。

产品优势

  • 百万级Agent的后台架构解决方案
  • 分布式,去中心化,集群高可用
  • 部署简单,依赖少,便于维护

注意:该产品未完全开源,截止目前(2023-9)其中Elkeidup 自动化部署工具和Hub没有开源,前端也没有开源~。

2. Elkeid Server

Elkeid Server 需要配合端上的数据采集层(Elkeid Driver/Agent)一起使用,实现了对大规模Agent的监控,管理和策略更新。能适配各种复杂的网络环境,可单机也可集群部署。具体部署方案,请移步Repo查看。

开源地址:https://github.com/bytedance/Elkeid/tree/main/server

3. Elkeid Server 架构

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
Elkeid Server 大体包含4个模块:

  • AgentCenter:负责与Agent进行通信,采集Agent数据并简单处理后汇总到消息队列集群(Kafka集群),同时也负责对Agent进行管理包括Agent的升级,配置修改,任务下发等。

  • ServiceDiscovery:后台中的各个服务模块都需要向ServiceDiscovery中心定时注册、同步服务信息,从而保证各个服务模块中的实例相互可见,便于直接通信。

  • Manager:负责对整个后台进行管理并提供相关的查询、管理接口。

  • 实时/离线计算模块:消费server采集到消息队列中的数据,进行实时和离线的分析与检测。(此部分还未开源)

简单来说就是:

  • AgentCenter收集Agent数据

  • Manager管理着AgentCenter和这些计算模块

  • ServiceDiscovery把这些所有的服务、节点都串联了起来

  • 实时/离线计算模块对这些数据进行分析和检测

Elkeid 后台大体包含5个模块:

  1. AgentCenter(AC),负责与Agent进行通信,采集Agent数据并简单处理后汇总到消息队列集群,同时也负责对Agent进行管理包括Agent的升级,配置修改,任务下发等。同时AC也对外提供HTTP接口,Manager通过这些HTTP接口实现对AC和Agent的管理和监控。

  2. ServiceDiscovery(SD),后台中的各个服务模块都需要向SD中心定时注册、同步服务信息,从而保证各个服务模块中的实例相互可见,便于直接通信。由于SD维护了各个注册服务的状态信息,所以当服务使用方在请求服务发现时,SD会进行负载均衡。比如Agent请求获取AC实例列表,SD直接返回负载压力最小的AC实例。

  3. Manager,负责对整个后台进行管理并提供相关的查询、管理接口。包括管理AC集群,监控AC状态,控制AC服务相关参数,并通过AC管理所有的Agent,收集Agent运行状态,往Agent下发任务,同时manager也管理实时和离线计算集群。

  4. Elkeid Console: Elkeid 前端部分。

  5. Elkeid HUB :Elkeid HIDS RuleEngine。

简单来说就是AgentCenter收集Agent数据,Elkeid HUB对这些数据进行分析和检测,Manager管理着AgentCenter和这些计算模块,ServiceDiscovery把这些所有的服务、节点都串联了起来,通过Elkeid Console可查看告警和资产数据等。

Elkeid AgentCenter(下面简称AC)

AC一方面需要从Agent采集数据并进行初步处理,然后把处理后数据写入Kafka集群(供后续分析模块消费),另一方面要向Agent下发指令,这个通信是双向的。

同时AC也对外提供HTTP接口,Manager通过这些HTTP接口实现对AC和Agent的管理和监控。

在这里插入图片描述相关技术介绍:

  • 通信效率:在百万级Agent的情况下,如此大量级的数据对后端的压力不容小觑。而通信和处理效率主要受通信协议和编码方式的影响。对比各种通信方式,我们最终选择使用gRPC双向流的方式。

    • 一方面gRPC基于HTTP2协议标准设计开发,相对于其他RPC框架,gRPC带来了更多强大功能,如双向流、头部压缩等。这些都很好的符合我们现在的需求,同时通信效率也很高。

    • 另一方面我们采用Protobuf作为编码方式。Protobuf具备了标准的IDL和IDL编译器,同时序列化数据非常简洁,紧凑;另外编解码速度在众多序列化协议中也处于领先。

  • 通信安全性:Agent是具备root权限的应用,Server具备对Agent下发指令的能力,如果通信链路被控制,将是灾难性的。这里我们使用了双向SSL校验,一方面保证了Agent/Server不会与未知的对端通信,另一方面SSL也保证了通信过程数据都是加密的。

总结: grpc双向流 + 双向SSL校验。

Elkeid Service Discovery(下面简称SD)

服务发现/负载均衡机制大致两个设计思路,一个集中代理,一个是端代理。

集中代理方式例如F5、nginx,请求先发送到集中代理点,代理再根据一定的负载均衡算法进行转发,服务的响应也会先到代理点,再转发到请求端。这个方式虽然是最常见的,但有两个问题,一个是经过代理来回转发,请求响应的时延会增加,另一个是在大规模Agent请求下,代理点的负载压力太大,因此在大规模部署的环境下不能使用这个方案。

在这里插入图片描述

相关技术介绍:

  • 服务提供方定时向SD发送注册信息,包括服务名字,实例ip,端口,负载状态等,这样SD就维护着所有这个服务实例的状态。

  • SD这个服务中的各个节点间需要进行数据同步,例如上面1中注册信息发送到NodeA上,NodeA需要把这个信息同步给NodeB,这样如果有请求访问NodeB,NodeB也有对应的注册信息。

  • 服务使用方通过服务名,请求服务发现/注册中心,获取对应服务名下能使用的实例IP、端口列表,进而可以直接访问。

  • SD各个节点间的数据同步是以广播的方式批量同步,保证了一定的性能。某个时间点节点间的数据并不是一致的,但最终能保持一致,满足分布式CAP理论中的AP,在大规模Agent,AC场景下,并没什么影响。此外也没用到任何一致性中间件(etcd,zookeeper等),部署方便,维护简单。

  • 由于SD维护了各个注册服务的状态信息,所以当服务使用方在请求服务发现时,SD会进行负载均衡。比如Agent请求获取AC实例列表,SD直接返回负载压力最小的AC实例。

Elkeid Manager

Manager管理整个后台,并提供各种查询、管理接口。包括管理AC集群,监控AC状态,控制AC服务相关参数,并通过AC管理所有的Agent,收集Agent运行状态,往Agent下发任务,同时manager也管理实时和离线计算集群。

鉴于Manager管理着后台的各个集群,所以任何的管理操作都是对集群的操作,调用Manger的接口请求会通过Manager转发给目标集群所有的节点,然后再收集所有节点的响应,再进行处理。为了提升这个过程的响应速度和稳定性,Manager内部实现了一个简单的分布式任务管理系统。

三、华为云上安装部署试用Elkeid

1. 华为云主机准备

  1. 购买华为云主机,本次评测系统如下:
    在这里插入图片描述2. 创建新的安全组,开发所有端口方便测试
    在这里插入图片描述更改安全组,如下,选择我们的开发所有端口的这个安全组:
    在这里插入图片描述
  2. 开发所有端口后,我们ssh登录上华为云主机即可~

2. Elkeid安装和配置

官方参考:http://elkeid.bytedance.com/docs/elkeidup/deploy-zh_CN.html
基本参考官方文档,即可!

由于评测环境资源有限,我这里使用官方的docker安装简单试用一下Elkeid~
0. 先安装docker

yum install docker

1、单机docker快速部署 (单机测试环境推荐)
注:宿主机请优先使用centos 7.x 或 debian 9/10,容器内的服务依赖了systemd,而systemd使用了cgroup,容器内外systemd版本相差过大会导致容器内的systemd运行异常,无法启动相应服务。

1.1、导入镜像

# 从release下载的是分卷的镜像,需要先合并镜像
wget https://github.com/bytedance/Elkeid/releases/download/v1.9.1.4/elkeidup_image_v1.9.1.tar.gz.00
wget https://github.com/bytedance/Elkeid/releases/download/v1.9.1.4/elkeidup_image_v1.9.1.tar.gz.01
wget https://github.com/bytedance/Elkeid/releases/download/v1.9.1.4/elkeidup_image_v1.9.1.tar.gz.02
wget https://github.com/bytedance/Elkeid/releases/download/v1.9.1.4/elkeidup_image_v1.9.1.tar.gz.03
cat elkeidup_image_v1.9.1.tar.gz.* > elkeidup_image_v1.9.1.tar.gz

亲测,华为云下载这个很慢,建议迅雷下载后自行上传。

#导入镜像
docker load -i elkeidup_image_v1.9.1.tar.gz

1.2、运行容器

docker run -d --name elkeid_community \--restart=unless-stopped \-v /sys/fs/cgroup:/sys/fs/cgroup:ro \-p 8071:8071 -p 8072:8072 -p 8080:8080 \-p 8081:8081 -p 8082:8082 -p 8089:8080  -p 8090:8090\--privileged \elkeid/all-in-one:v1.9.1

1.3、设置对外IP
使用本机IP,不能使用127.0.0.1。

docker exec -it elkeid_community bashcd /root/.elkeidup/# 命令为交互式
./elkeidup public {ip}./elkeidup agent init
./elkeidup agent build
./elkeidup agent policy createcat ~/.elkeidup/elkeid_passwd

经过测试 2C2G安装 elkeid,报错如下,估计是内存太小了~
在这里插入图片描述
我们再次以2C4G机器做验证,还是报同样的冲突,因为字节elkeipdup没有开源,所以原因未知(大概率还是资源大小问题,我本地安装测试无问题)~
本次评测暂时处理到这里~~

3. docker安装过程问题记录

docker 报错:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

这个错误表示无法连接到 Docker daemon,常见的原因包括:

  1. Docker daemon 没有运行
    可以使用 sudo systemctl status docker 来检查docker服务是否运行,如果未运行可以使用 sudo systemctl start docker 来启动
sudo systemctl start docker
sudo systemctl enable docker

docker报错: No chain/target/match by that name.

报错完整信息:

[root@dev elkeid]# docker run -d --name elkeid_community \
>   --restart=unless-stopped \
>   -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
>   -p 8071:8071 -p 8072:8072 -p 8080:8080 \
>   -p 8081:8081 -p 8082:8082 -p 8089:8080  -p 8090:8090\
>   --privileged \
>   elkeid/all-in-one:v1.9.1
5f24d42cfccf965d9a3ce6b7e5323049ff4fb9ef09d3ad1541b2391b28e3385b
/usr/bin/docker-current: Error response from daemon: driver failed programming external connectivity on endpoint elkeid_community (fd39db5e047de94bbba8f65474cf54ea9605062b36e630e4c46de56fe782c3e9):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8090 -j DNAT --to-destination 172.17.0.2:8090 ! -i docker0: iptables: No chain/target/match by that name.(exit status 1)).

问题分析:这个问题是在使用 docker run 命令启动容器时,Docker 在设置容器的端口映射规则时失败了。
具体是在使用 iptables 添加 DNAT 规则失败,提示 iptables 没有指定的链、目标或匹配项。
这个问题常见于一些最小化的 Linux 发行版,默认没有安装 iptables 或 iptables 的 nat 模块。

问题解决:

  1. 确保主机上已经安装了 iptables 和 iptables 的 nat 模块
yum install iptables-services -y
  1. 启用 iptables 的 nat 功能
modprobe iptable_nat
  1. 重启 docker 服务
systemctl restart docker

4. Elkeid使用

顺利安装完成后,容器的/root/.elkeidup/elkeid_passwd文件记录了各组件的密码和相关的url。

访问elkeid_console,按照 安装配置 界面的命令进行Agent安装部署。

四、参考

【Elkeid 策略】抗击黑客:如何利用Elkeid构建入侵检测能力
参考URL: https://www.zhihu.com/column/c_1411384767867162624
字节跳动如何从0到1打造一个开源项目?
参考URL: https://www.51cto.com/article/711324.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/103194.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT Creator更改主题和编辑器风格(附几款黑色主题)

适用于qtcreator 一、使用自带主题与编辑器风格 打开Qt选择"工具"->"选项"; 2. 选择"环境"->"Theme"切换不同的主题风格 这里切换的是外边框的风格,如果编辑器中有同名的风格,编辑器的风格也…

快速排序算法的递归和非递归

基本思路 选择一个基准值,将数组划分三个区域,小于基准值的区域位于左侧,等于基准值的区域位于中间,大于基准值的区域位于右侧。将大于和小于区域继续进行分区,周而复始,不断进行分区和交换,直…

手写Spring:第7章-实现应用上下文

文章目录 一、目标:实现应用上下文二、设计:实现应用上下文三、实现:实现应用上下文3.1 工程结构3.2 Spring应用上下文和Bean对象扩展类图3.3 对象工厂和对象扩展接口3.3.1 对象工厂扩展接口3.3.2 对象扩展接口 3.4 定义应用上下文3.4.1 定义…

计算机竞赛 基于深度学习的植物识别算法 - cnn opencv python

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 MobileNetV2网络4 损失函数softmax 交叉熵4.1 softmax函数4.2 交叉熵损失函数 5 优化器SGD6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的植物识别算法 ** …

Leetcode - 112双周赛

一,2839. 判断通过操作能否让字符串相等 I ​ 该题的题意就是看 单数下标 和 偶数下标的 s1 和 s2 中的字母及其数量是否相等。 代码如下(也可以使用哈希表来做): class Solution {public boolean canBeEqual(String s1, String s2) {int[] a new in…

【Redis】深入探索 Redis 的数据类型 —— 字符串 string

文章目录 前言一、string 类型的操作命令设置和获取相关命令1. SET 和 GET2. MSET 和 MGET3. SETNX、SETEX、SETPX 计数相关命令1. INCR 和 INCRBY2. DECR 和 DECRBY3. INCRBYFLOAT 字符串操作相关命令1. APPEND2. GETRANGE3. SETRANGE4. STRLEN string 相关命令总结 二、strin…

2023数学建模国赛E题黄河水沙监测数据分析完整代码分析+处理结果+思路文档

已经写出国赛E题黄河水沙监测数据分析完整代码分析处理结果思路分析(30页),包括数据预处理、数据可视化(分组数据分布图可视化、相关系数热力图可视化、散点图可视化)、回归模型(决策树回归模型、随机森林回…

算法刷题记录-双指针/滑动窗口(LeetCode)

809. Expressive Words 思路 根据题目描述,我们可以知道,如果要将某个单词定义为可扩张(stretchy),需要满足如下两个条件: 所以,我们在实现的时候,可以通过两个指针p1和p2&#x…

QTableView通过setColumnWidth设置了列宽无效的问题

在用到QT的QTableView时,为了显示效果,向手动的设置每一列的宽度,但是如下的代码是无效的。 ui->tableView->setColumnWidth(0,150);ui->tableView->setColumnWidth(1,150);ui->tableView->setColumnWidth(2,150);ui->t…

OpenCV(二十九):图像腐蚀

1.图像腐蚀原理 腐蚀操作的原理是将一个结构元素(也称为核或模板)在图像上滑动,并将其与图像中对应位置的像素进行比较。如果结构元素的所有像素与图像中对应位置的像素都匹配,那么该位置的像素值保持不变。如果结构元素的任何一个…

WireShark抓包工具的安装

1.下载安装包 在官网或者电脑应用商城都可以下载 2.安装 打开安装包,点击next 点击next 选择UI界面,两种都装上 根据习惯选择 选择安装位置点击安装 开始安装安装成功

【python爬虫】14.Scrapy框架讲解

文章目录 前言Scrapy是什么Scrapy的结构Scrapy的工作原理 Scrapy的用法明确目标与分析过程代码实现——创建项目代码实现——编辑爬虫代码实现——定义数据代码实操——设置代码实操——运行 复习 前言 前两关,我们学习了能提升爬虫速度的进阶知识——协程&#xf…