Essa solução é indicada para quando queremos realizar uma retenção maior que 90 dias e sabemos que se mantermos uma retenção longa no wazuh, a chance de ele quebrar e muito grande assim como começar a ficar muito lento o wazuh, para isso vamos realizar a retenção no elastic search, onde ficara de backup, se um dia quisermos voltar a um longo periodo de dados podemos apenas implementar o Kibana para visualização, ou buscar via API mesmo
Com isso criaremos o Logstash e o elastic em Docker recebendo dados do wazuh, teremos a seguinte infraestrutura:
Primeiramente vamos criar a pasta dados onde será salvo as informações do elastic search para manter persistência, adapte conforme seu cenário
Criar o Dockerfile, onde vai montar uma imagem ubuntu com o logstash e a configuração uma vez que a imagem padrão do logstash fornecia diversas falhas
# Use a imagem base do Ubuntu
FROM ubuntu:20.04
# Mantenha o sistema atualizado e instale as dependências
RUN apt-get update && apt-get install -y \
tcpdump \
wget \
apt-transport-https \
openjdk-11-jre-headless \
curl \
gnupg \
software-properties-common
# Adicionar a chave GPG e o repositório do Logstash
RUN wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add - && \
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" > /etc/apt/sources.list.d/elastic-7.x.list && \
apt-get update && apt-get install -y logstash
# Copia a configuração do Logstash para o container
COPY logstash.conf /etc/logstash/conf.d/logstash.conf
# Expor a porta 514 para syslog e a 9600 para a API do Logstash (opcional)
EXPOSE 514 514/udp 9600
# Comando de inicialização do Logstash
CMD ["/usr/share/logstash/bin/logstash", "-f", "/etc/logstash/conf.d/logstash.conf"]
Agora vamos criar o arquivo de configuração do Logstash
input {
syslog {
port => 514
type => "syslog"
}
}
output {
elasticsearch {
hosts => ["http://172.20.0.10:9200"]
index => "syslog-%{+YYYY.MM.dd}"
user => "elastic"
password => "sua_senha"
}
}
Agora vamos criar o docker-compose.yml no qual vai criar a imagem do logstash, criar a rede e subir os containers:
version: '3.7'
services:
elasticsearch:
image: elasticsearch:8.5.3
container_name: elasticsearch
volumes:
- ./dados:/usr/share/elasticsearch/data
networks:
lab_network:
ipv4_address: 172.20.0.10
ports:
- "9200:9200"
- "9300:9300"
environment:
- "discovery.type=single-node"
- "ELASTIC_PASSWORD=sua_senha"
- "xpack.security.enabled=true"
- "xpack.security.authc.api_key.enabled=true"
logstash:
build: .
container_name: logstash-container
networks:
lab_network:
ipv4_address: 172.20.0.11
ports:
- "514:514/udp"
- "9600:9600"
volumes:
- ./logstash.conf:/etc/logstash/conf.d/logstash.conf
restart: unless-stopped
networks:
lab_network:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/24
Para dar o start use os seguinte comandos:
docker-compose build
docker-compose up -d
Agora vamos aplicar a configuração no wazuh:
<syslog_output>
<server>192.168.15.128</server>
<port>514</port>
<level>3</level>
<format>json</format>
</syslog_output>
Após isso você já poderá ver os logs chegando no elastic, vamos analisar:
wazuh envoando dados para o logstash via syslog:
Agora vamos ver os dados chegando no elastic:
como podemos ver ele já criou o index de hoje