关于 Elkeid Agent
Agent提供端上组件的基本能力支撑,包括数据通信、资源监控、组件版本控制、文件传输、机器基础信息采集等。
Agent本身不提供安全能力,作为一个插件底座以系统服务的方式运行。各类功能插件的策略存放于服务器端的配置,Agent接收到相应的控制指令及配置后对自身及插件进行开启、关闭、升级等操作。
Agent与Server之间采用bi-stream gRPC进行通信,基于自签名证书开启双向TLS验证,保障信道安全。其中,Agent -> Server 方向信息流动称为数据流,Server -> Agent 方向信息流动一般为控制流,使用protobuf的不同message类型。Agent本身支持客户端侧服务发现,也支持跨Region级别的通信配置,实现一个Agent包在多个网络隔离的环境下进行安装,基于底层一个TCP连接,在上层实现了Transfer与FileOp两种数据传输服务,支撑了插件本身的数据上报与Host中的文件交互。
Plugins作为安全能力插件,与Agent的进程关系一般为“父——子”进程。以两个pipe作为跨进程通信方式,plugins lib提供了Go与Rust的两个插件库,负责插件端信息的编码与发送。值得一提的是,插件发送数据后,会被编码为Protobuf二进制数据,Agent接收到后无需二次解编码,再其外层拼接好Header特征数据,直接传输给Server,一般情况下Server也无需解码,直接传输至后续数据流中,使用时进行解码,一定程度上降低了数据传输中多次编解码造成的额外性能开销。
Agent采用Go实现,在Linux下,通过systemd作为守护方式,受cgroup限制控制资源使用,支持aarch64与x86-64架构,最终编译、打包为deb与rpm包分发,格式均符合systemd及Debian、RHEL规范,可以直接提供至对应的软件仓库中进行后续版本维护。在后续版本中,将会发布用于Windows平台下的Agent。
运行时要求
Agent及Plugin提供的大部分功能需要以root权限运行在宿主机(Host)层面,在权限受限的容器中,部分功能可能会存在异常。
快速开始
通过 elkeidup 的完整部署,可以直接得到用于Debian/RHEL系列发行版的安装包,并按照 Elkeid Console - 安装配置 界面的命令进行安装部署。
手动编译
环境要求
确认相关配置
- 需要确保
transport/connection
目录下的ca.crt
、client.key
、client.crt
三个文件与Agent Centerconf
目录下的同名文件保持一致。 - 需要确保
transport/connection/product.go
文件中的参数都配置妥当:- 如果是手动部署的Server:
serviceDiscoveryHost["default"]
需被赋值为 ServiceDiscovery 服务或代理服务的内网监听地址与端口,例如:serviceDiscoveryHost["default"] = "192.168.0.1:8088"
privateHost["default"]
需被赋值为 AgentCenter 服务或代理服务的内网监听地址与端口,例如:privateHost["default"] = "192.168.0.1:6751"
- 如有Server的公网接入点,
publicHost["default"]
需被赋值为 AgentCenter 服务或代理服务的外网监听地址与端口,例如:publicHost["default"]="203.0.113.1:6751"
- 如果是通过 elkeidup 部署的Server,可以根据部署Server机器的
~/.elkeidup/elkeidup_config.yaml
文件获得对应配置:- 在配置文件中找到 Nginx 服务的IP,具体的配置项为
nginx.sshhost[0].host
- 在配置文件中找到 ServiceDiscovery 服务的IP,具体的配置项为
sd.sshhost[0].host
serviceDiscoveryHost["default"]
需被赋值为 ServiceDiscovery 服务的IP,并将端口号设置为8088,例如:serviceDiscoveryHost["default"] = "192.168.0.1:8088"
privateHost["default"]
需被赋值为 Nginx 服务的IP,并将端口号设置为8090,例如:privateHost["default"] = "192.168.0.1:8090"
- 在配置文件中找到 Nginx 服务的IP,具体的配置项为
- 如果是手动部署的Server:
编译
在Agent根目录,执行:
BUILD_VERSION=1.7.0.24 bash build.sh
在编译过程中,脚本会读取 BUILD_VERSION
环境变量设置版本信息,可根据实际需要进行修改。
编译成功后,在根目录的 output
目录下,应该可以看到2个deb与2个rpm文件,它们分别对应不同的系统架构。
版本升级
- 如果没有创建过客户端类型的组件,请在 Elkeid Console-组件管理 界面新建对应组件。
- 在 Elkeid Console - 组件管理 界面,找到“elkeid-agent”条目,点击右侧“发布版本”,填写版本信息并上传对应平台与架构的文件,点击确认。
- 在 Elkeid Console - 组件策略 界面,(如有)删除旧的“elkeid-agent”版本策略,点击“新建策略”,选中刚刚发布的版本,点击确认。后续新安装的Agent均会自升级到最新版本。
- 在 Elkeid Console - 任务管理 界面,点击“新建任务”,选择全部主机,点击下一步,选择“同步配置”任务类型,点击确认。随后,在此页面找到刚刚创建的任务,点击运行,即可对存量旧版本Agent进行升级。
License
Elkeid Agent is distributed under the Apache-2.0 license.