一、前言
在甲方做安全建设的时候,不可避免遇到大数量级的数据进行处理、分析的任务,比如分析整个公司的WAF日志、进程派生数据、K8s日志等等去发现风险,尤其在初期做反入侵的策略的时候,需要及时告警但又频繁修改策略,我们就需要一个能够编写策略而且可以顺利平滑发布新策略的系统。
这个系统是ELKEID HUB(由字节跳动开发并且开源),一个策略编写和分析平台,可以满足上面的需求,并且经过了几个月实践下来,对其比较满意。
二、搭建处理日均数亿的系统
ELKEID HUB需要搭配其他系统使用,需要自行配置Kafka、Elasticsearch、Kibana。
Kafka:它主要用于构建实时数据管道和流处理应用程序。在大数据生态系统中,数据的产生和处理往往是持续不断的,像网站的用户行为日志。
Elasticsearch:是一个分布式的、基于 RESTful API 的搜索和数据分析引擎。
Kibana:让用户能够更直观地理解和分析存储在 Elasticsearch 中的数据(后面用来查询分析数据)。
2.1、ELKEID HUB
Elkeid HUB 是一款由 Elkeid Team 维护的规则/事件处理引擎,支持流式/离线(社区版尚未支持)数据处理。 初衷是通过标准化的抽象语法/规则来解决复杂的数据/事件处理与外部系统联动需求。
参考文档:https://github.com/bytedance/Elkeid/blob/main/elkeidup/deploy_hub-zh_CN.md
这里也说一下这里的优缺点
先说下优点:性能高如json解码、正则都做了特殊优化(跟大佬交流得知)、平滑策略修改、可视化不错。
其实也有一些不足:比如ELKEID HUB很久没更新了(一些前端bug不修复),如果要使用分布式和编写插件的话需要购买商业版本(不能分布式的话,我觉得坑优点稍微大)。
推荐系统:ubtun20(ubuntu22会报不兼容)
# 配置可密钥登录
echo -e '\nPubkeyAuthentication yes' >> /etc/ssh/sshd_config
systemctl restart sshd
# 生成密钥
cd ~/.ssh/
ssh-keygen -t rsa -b 4096
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 测试是否密钥是否可用
ssh 127.0.0.1
# 下载
mkdir -p /root/.elkeidup && cd /root/.elkeidup
wget https://github.com/bytedance/Elkeid/releases/download/v1.9.1.4/elkeidup_package_v1.9.1.tar.gz.00
wget https://github.com/bytedance/Elkeid/releases/download/v1.9.1.4/elkeidup_package_v1.9.1.tar.gz.01
wget https://github.com/bytedance/Elkeid/releases/download/v1.9.1.4/elkeidup_package_v1.9.1.tar.gz.02
cat elkeidup_package_v1.9.1.tar.gz.* > elkeidup_package_v1.9.1.tar.gz
tar -xf elkeidup_package_v1.9.1.tar.gz
chmod a+x /root/.elkeidup/elkeidup
# ./elkeidup init --host {ip} --hub_only 生成配置文件config_example.yaml
./elkeidup init --host 10.234.170.51 --hub_only
cp config_example.yaml config.yaml
# 部署
./elkeidup deploy --hub_only
2.2、Kafka
通过容器部署Kafka,注意下面的方式无法远程访问(只能在容器内进行访问),如果有需求自行修改。
参考文档:https://github.com/bitnami/containers/tree/main/bitnami/kafka
version: "2"
services:
zookeeper:
image: docker.io/bitnami/zookeeper:3.9
ports:
- "2181:2181"
volumes:
- "zookeeper_data:/bitnami"
environment:
- ALLOW_ANONYMOUS_LOGIN=yes
kafka1:
image: docker.io/bitnami/kafka:3.4
ports:
- "9092:9092"
volumes:
- "kafka1_data:/bitnami"
environment:
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
depends_on:
- zookeeper
kafka2:
image: docker.io/bitnami/kafka:3.4
ports:
- "9092:9092"
volumes:
- "kafka2_data:/bitnami"
environment:
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
depends_on:
- zookeeper
volumes:
zookeeper_data:
driver: local
kafka1_data:
driver: local
kafka2_data:
driver: local