基于Suricata与ELK的网络流量检测

1.准备工作

这里两台虚拟机都是采用的ubuntu22.04版本

虚拟机IP 安装环境
192.168.17.143 ELK
192.168.17.142 suricata与filebeat

2.安装ELK

2.1 docker网络代理

第一步很重要,要不然docker镜像拉取不下来,自行问ai或者查阅一些blog。

2.2 拉取docker镜像

bash 复制代码
docker pull logstash:8.11.0
docker pull kibana:8.11.0
docker pull elasticsearch:8.11.0

#注意这里三个镜像版本的一致性
#如果没有将当前用户添加进docker的用户组记得加sudo

拉取镜像完成后使用docker images查看拉取镜像

然后我们可以创造我们的ELK文件目录,用作于我们的docker映射。可以使用mkdir命令以及vi or vim命令一个个创建。也可以使用此命令一次完成mkdir -p ~/elk/{es,logstash,kibana}

2.3 elasticsearch密码

在我们创建的elk/es/目录下再创建一个data目录,目录结构elk/es/data

然后我们将文件夹的主属性修改为1000,因为在docker容器中elasticsearch运行用户为1000。

bash 复制代码
elk-@elk-virtual-machine:~$ chown 1000:1000 -R elk/es/
elk-@elk-virtual-machine:~$ ls -al elk/es/
总计 12
drwxrwxr-x 3 elk- elk- 4096  2月 18 19:58
drwxrwxr-x 5 elk- elk- 4096  2月 19 16:45
drwxrwxr-x 5 elk- elk- 4096  2月 19 16:53 data

运行elasticsearch,使用-v来指定映射关系。

bash 复制代码
elk-@elk-virtual-machine:~/桌面$ docker run -d --name es -p 9200:9200 -p 9300:9300 -v ~/elk/es/data:/usr/share/elasticsearch/data elasticsearch:8.11.0

等待启动成功后,进入docker中的/usr/share/elasticsearch/bin目录,使用docker exec -it es bash进入docker然后再cd bin进入bin目录。

然后我们在当前的bin目录下,使用命令elasticsearch-setup-passwords interactive

将elasticsearch中的所有内置用户密码都一直修改为123456(为了方便记忆)。接着我们再去使用修改后的密码访问elasticsearch服务。

然后使用docker stop 以及docker rm 命令来删除刚才的elasticsearch容器。

2.4 编写yml文件并运行ELK服务

写docker-compose.yml文件,创建docker network

Docker服务 指定IP地址 端口
elasticsearch 172.16.200.10 9200
kibana 172.16.200.20 5601
logstash 172.16.200.30 5044
yml 复制代码
version: '3'

services:
  elasticsearch:
    container_name: es
    image: elasticsearch:8.11.0
    restart: "always"
    ports:
      - "9200:9200"
    expose:
      - "9300"
    volumes:
      - "/home/elk-/elk/es/data:/usr/share/elasticsearch/data"
    environment:
      discovery.type: single-node

    networks:
      elk:
        ipv4_address: 172.16.200.10

  kibana:
    container_name: kibana
    image: kibana:8.11.0
    restart: "always"
    ports:
      - "5601:5601"
    volumes:
      - "/home/elk-/elk/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml"
    networks:
      elk:
        ipv4_address: 172.16.200.20
    depends_on:
      - elasticsearch

  logstash:
    container_name: logstash
    image: logstash:8.11.0
    restart: "always"
    expose:
      - "5044"
    volumes:
      - "/home/elk-/elk/logstash/logstash.yml:/usr/share/logstash/logstash.yml"
    depends_on:
      - elasticsearch
    networks:
      elk:
        ipv4_address: 172.16.200.30

networks:
  elk:
    driver: bridge
    ipam:
      config:
        - subnet: "172.16.200.0/24"

接着创建kibana的配置文件~/elk/kibana/kibana.yml以及logstash的配置文件~/elk/logstash/logstash.yml

kibana的配置文件内容:

yml 复制代码
server.name: kibana
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://172.16.200.10:9200"]
elasticsearch.username: "kibana_system"
elasticsearch.password: "123456"
xpack.monitoring.ui.container.elasticsearch.enabled: true

logstash的配置文件内容:

yml 复制代码
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://172.16.200.10:9200" ]
xpack.monitoring.elasticsearch.username: "logstash_system"
xpack.monitoring.elasticsearch.password: "123456"

再将~/elk/es、 ~/elk/kibana、 ~/elk/logstash的文件属性改为1000

bash 复制代码
chown 1000:1000 -R ~/elk/es/
chown 1000:1000 -R ~/elk/kibana/
chown 1000:1000 -R ~/elk/logstash/

启动ELK

bash 复制代码
#启动docker容器ELK
docker compose up -d
#查看docker容器
docker ps


http访问192.168.17.143:9200与192.168.17.143:5601使用账户elastic和密码123456登录查看。

3.安装Suricata

由于前面我们是在192.168.17.143上运行的ELK服务,这里我们在192.168.17.142上来运行suricata以及filebeat服务。

bash 复制代码
# 安装必要依赖项
sudo apt install autoconf automake build-essential cargo cbindgen libjansson-dev libpcap-dev libcap-ng-dev libmagic-dev liblz4-dev libpcre2-dev libtool libyaml-dev make pkg-config rustc zlib1g-dev -y
# 下载源代码
wget https://www.openinfosecfoundation.org/download/suricata-8.0.0.tar.gz
# 解压
tar xvzf suricata-8.0.0.tar.gz
# 构建安装软件包
cd suricata-8.0.0
# 在该命令下运行配置脚本
./configure --enable-nfqueue --prefix=/usr --sysconfdir=/etc --localstatedir=/var
# 使用该命令安装软件包
sudo make && sudo make install-full

当我们安装完成suricata后可以使用suricata-update来下载suricata规则,并确保suricata处于运行状态。

如果这里suricata是exited而不是running,记得求助ai尝试解决。

修改suricata配置文件,文件路径为/etc/suricata/suricata.yaml,确认一下网卡名称(可以安装net-tools,使用ifconfig来确认自己虚拟机的网卡名称),一般虚拟机都是ens33

4.安装filebeat

bash 复制代码
# 下载deb包
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.11.0-amd64.deb
# 安装deb包
sudo dpkg -i filebeat-8.4.3-amd64.deb

修改filebeat配置文件,文件路径为/etc/filebeat/filebeat.yml

yml 复制代码
output.elasticsearch:
  hosts: ["http://你运行ELK服务虚拟机的IP:9200"]
  username: "elastic"
  password: "123456"

setup.kibana:
  host: "http://<你运行ELK服务虚拟机的IP>:5601"

启用filebeat的suricata模块

bash 复制代码
sudo filebeat modules enable suricata

/etc/filebeat/modules.d/suricata.yml中的enabled的值改为true,并且要将路径配置清楚/var/log/suricata/eve.json,以防后续在传输数据时出现问题。

执行命令,将suricata的仪表板添加到kibana中。

bash 复制代码
filebeat setup

查看仪表盘如下,已经导入成功

启动filebeat,并设置开机自启

bash 复制代码
systemctl enable filebeat
systemctl start filebeat

5.测试结果展示



参考链接

https://cloud.tencent.com/developer/article/2457775

https://blog.csdn.net/Purpose_7/article/details/127314558

相关推荐
十三画者2 天前
【文献分享】CANVAS:基于细胞构架与邻域信息的组织病理学虚拟空间肿瘤分析
人工智能·机器学习·数据挖掘·数据分析·数据可视化
凌云拓界2 天前
NodeVerdict | 性能门禁:把追踪数据变成 CI 规则
ci/cd·信息可视化·开源·node.js·bug·数据可视化·安全架构
杨超越luckly2 天前
Agent应用指南:巨幕之下 · 中国 IMAX 影院205城的空间布局
人工智能·arcgis·html·agent·数据可视化
做前端的娜娜子3 天前
从 0 到 1 打造一个配置可视化后台:一次前端配置中心化改造的实战复盘
前端·设计模式·数据可视化
山海鲸可视化3 天前
数字孪生技术:创新性破解城市高温难题
大数据·运维·数字孪生·数据可视化·可视化大屏
北墨NoLimit4 天前
TRAE Work实战:把办公Agent竞品调研从2-3天压到32分钟,有完整指令模板
前端·人工智能·数据可视化
NutShell Wang5 天前
每帧重建整条路径、每秒倾倒 48MB 给 GC:实时折线图渲染架构的实测复盘
前端·性能优化·架构·图形渲染·数据可视化·vibe coding
精益数智工坊5 天前
账龄分析怎么做才不流于形式?如何真正落地账龄分析?
大数据·人工智能·数据可视化
尘世中一位迷途小书童5 天前
无人机航线里的云台角度怎么调?Cesium 做了个视锥 + 鹰眼联动
前端·javascript·数据可视化
Highcharts.js6 天前
五大痛点拖慢数据分析平台决策效率:Highchart可视化与AI分析解决方案解析
人工智能·信息可视化·数据分析·数据可视化·highcharts·ai可视化分析