Suricata+ELK 8.4.3(docker)可视化

主机1安装elk

主机2安装suricata+filebeat

主机1、主机2均为Ubuntu18.04

1 安装elk

1.1 准备

准备docker镜像

docker pull logstash:8.4.3
docker pull kibana:8.4.3
docker pull elasticsearch:8.4.3

image-20221013085104662

创建文件夹用于docker映射

mkdir -p /data/elk/{es,logstash,kibana}
image-20221013085341623

编辑文件/etc/sysctl.conf,在文件最后一行添加

vm.max_map_count=262144

image-20221014083744967

执行命令令配置生效。该配置限制了一个进程可以拥有的虚拟内存区域的数量,如果太小会导致容器无法启动,所以提前进行配置。elasticsearch运行要求该值最小为262144。

sysctl -p

image-20221014083816476

1.2 生成elasticsearch密码

创建文件夹/data/elk/es/data

修改文件夹属主和属组为1000。在docker容器中,elasticsearch运行用户为1000;如果系统中已存在uid=1000的用户,可以将文件夹权限给到777。

image-20221014083337116

运行elasticsearch,使用-v参数指定文件夹映射关系。

docker run -d --name es -p 9200:9200 -p 9300:9300 -v /data/elk/es/data:/usr/share/elasticsearch/data elasticsearch:8.4.3

image-20221014084120784

等容器内服务启动后,使用https访问目标主机的9200端口,发现要求输入用户名跟密码。

image-20221014084251859

在8.4.3版本的elasticsearch中,服务首次运行时会生成随机密码和随机enrollment token,如下图所示。

image-20221013090159778

但是由于我们使用了-d参数,无法看到回显信息,所以需要对密码进行重置。

进入docker中的/usr/share/elasticsearch/bin目录,默认情况下直接docker exec -it es bash拿到的是elasticsearch用户,且在/usr/share/elasticsearch路径下,所以直接进入bin目录即可。

image-20221014084546784

调用elasticsearch-setup-passwords设置内置用户的密码,interactive参数表示在交互式模式下手动指定密码。为了方便此处将所有密码都设置为123456

elasticsearch-setup-passwords interactive

image-20221014084624704

使用刚才设置的密码成功访问elasticsearch服务。

image-20221014084740632

而刚才生成的密码信息也已经存储到了映射的/data/elk/es/data中。

image-20221014084821346

停止并删除刚才创建的elasticsearch容器

1.3 运行elk

写docker-compose.yml文件,创建docker network,指定elasticseach的IP地址为172.16.200.10,kibana的地址为172.16.200.20,logstash的地址为172.16.200.30,指定kibana和logstash的配置文件映射

version: '3'

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

    networks:
      elastic:
        ipv4_address: 172.16.200.10

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

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

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

创建kibana的配置文件/data/elk/kibana/kibana.yml,其中 elasticsearch.hostselasticsearch.password根据实际情况填写,elasticsearch.password处使用之前设置的kibana_system用户的密码,非elastic用户的密码。

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的配置文件/data/elk/logstash/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"

/data/elk/es/data/elk/kibana/data/elk/logstash的文件属主和属组都修改为1000

image-20221014090325235

启动ELK

docker-compose up -d

image-20221014090614531

使用http访问9200端口,使用elastic用户的密码进行认证

image-20221014090653101

使用http访问5601端口,使用elastic用户的密码进行认证

image-20221014090820077

这两个随便点都可以

image-20221014090903811

到这里,elk配置暂告一段落

2 安装suricata

在主机2上安装suricata

使用官方文档中的快速安装方法

sudo add-apt-repository ppa:oisf/suricata-stable
sudo apt update
sudo apt install suricata jq

下载suricata规则

suricata-update

image-20221013134505501

检查suricata运行状态,为exited

systemctl status suricata

image-20221014091328972

修改suricata的配置文件/etc/suricata/suricata.yaml,确认网卡名称与本机相同。

image-20221014092828602

image-20221014092831393

重启suricata服务,为running状态

image-20221014093137063

在本次安装中,只使用了suricata的默认规则,可以根据实际需求安装其他规则包。

/var/log/suricata/eve.json中可以看到记录的事件

image-20221014094732152

3 安装filebeat

参考官方文档

下载deb包

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.4.3-amd64.deb

安装deb包

sudo dpkg -i filebeat-8.4.3-amd64.deb

image-20221014092006817

修改配置文件/etc/filebeat/filebeat.yml,直接将原来的filebeat.yml备份,然后重新写一个。filebeat.config.modules是为了联动suricata。由于elasticsearch没有启用TLS,所以不需要配置ssl.ca_trusted_fingerprint

output.elasticsearch:
  hosts: ["http://10.2.4.13:9200"]
  username: "elastic"
  password: "123456"
  # If using Elasticsearch's default certificate
  # ssl.ca_trusted_fingerprint: "<es cert fingerprint>"
setup.kibana:
  host: "http://10.2.4.13:5601"
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false

image-20221014092222564

启用filebeat的suricata模块

sudo filebeat modules enable suricata

image-20221014092459378

/etc/filebeat/modules.d/suricata.yml文件中enabled的值改为true

image-20221014093407717

执行命令将suricata的dashboard添加到kibana中

filebeat setup

image-20221014093642297

登录kibana,在Dashboard中看到filebeat添加的模板

image-20221014093800173

将filebeat开机自启,并启动filebeat

systemctl enable filebeat
systemctl start filebeat

image-20221014093855813

4 最终效果

随便找个工具攻击一下安装suricata的主机,生成数据

打开Dashboard中的任意模板,以Events Overview为例,看到如下效果

image-20221014094205764

Alert Overview的效果如下

image-20221014094550829

Discover模块也能够看到suricata传过来的事件信息。

image-20221014095002856

由于suricata的规则包比较粗略,所以记录了一些不必要的内容,所以后续还是要做suricata规则上的优化。

5 参考链接

https://www.osgeo.cn/suricata/quickstart.html#installation

https://www.elastic.co/guide/en/beats/filebeat/current/setup-repositories.html

https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation-configuration.html

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐