Compare commits
15 Commits
df658bddcd
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| e412681f96 | |||
| 82ac465600 | |||
| efc147a37c | |||
| 3663fbceea | |||
| 5df71eb9bc | |||
| ce9f2a2335 | |||
| ab1ee8354f | |||
| b0459c875d | |||
| 6399d7a97a | |||
| 4a40bf5d71 | |||
| 4fb62aa7f3 | |||
| 7fddfc7e66 | |||
| a8dc3257a1 | |||
| 9b50ed3ce4 | |||
| 225ebe8cc5 |
4
.gitignore
vendored
@@ -1,3 +1 @@
|
||||
pipelines/
|
||||
hosts/host03/dados
|
||||
rk-siem-collector/
|
||||
roteiros/05-lab03/dados/
|
||||
|
||||
BIN
assets/rk-siem-discover-logs-host02.png
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
assets/rk-siem-index-pattern-name-02.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
assets/rk-siem-lab02-esquema.png
Normal file
|
After Width: | Height: | Size: 182 KiB |
BIN
assets/rk-siem-lab03-01.png
Normal file
|
After Width: | Height: | Size: 314 KiB |
BIN
assets/rk-siem-lab03-02.png
Normal file
|
After Width: | Height: | Size: 318 KiB |
BIN
assets/rk-siem-lab03-03.png
Normal file
|
After Width: | Height: | Size: 339 KiB |
BIN
assets/rk-siem-lab03-04.png
Normal file
|
After Width: | Height: | Size: 141 KiB |
BIN
assets/rk-siem-lab03-05.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
assets/rk-siem-lab03-06.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
assets/rk-siem-lab03-07.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
assets/rk-siem-lab03-08.png
Normal file
|
After Width: | Height: | Size: 176 KiB |
BIN
assets/rk-siem-selecao-timestamp-02.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
assets/rk-siem-titulo-ingestao-lab02.png
Normal file
|
After Width: | Height: | Size: 68 KiB |
BIN
assets/rk-siem-titulo-ingestao-lab03.png
Normal file
|
After Width: | Height: | Size: 79 KiB |
BIN
assets/rk-siem-visualizacao-host02-logs.png
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
assets/rk-siem-youtube_lab01.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
assets/rk-siem-youtube_lab02.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
assets/rk-siem-youtube_lab03.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
@@ -87,7 +87,7 @@ docker compose up -d rk-siem-core
|
||||
docker compose up -d rk-siem-ui
|
||||
```
|
||||
|
||||
(Após alguns segundos você já poderá subir a interface Web RK-SIEM-UI acessando http://localhost:5061 em um navegador)
|
||||
(Após alguns segundos você já poderá subir a interface Web RK-SIEM-UI acessando http://localhost:5601 em um navegador)
|
||||
|
||||

|
||||
|
||||
@@ -165,4 +165,4 @@ Clique no botão 'Next step' para o próximo passo.
|
||||
|
||||
**Assista à Videoaula explicativa sobre o assunto clicando na imagem abaixo:**
|
||||
|
||||
<a href="https://www.youtube.com/watch?v=DoedlfxmR6g" target="_blank"><img width="400" height="120" alt="assistavideo" src="../../assets/rk-siem-youtube.png" /></a>
|
||||
<a href="https://www.youtube.com/watch?v=DoedlfxmR6g" target="_blank"><img width="400" height="120" alt="assistavideo" src="../../assets/rk-siem-youtube_lab01.png" /></a>
|
||||
@@ -32,7 +32,7 @@ template(name="json-template" type="list") {
|
||||
|
||||
# Envio para o RK-CORE
|
||||
action(type="omelasticsearch"
|
||||
server="172.19.0.1"
|
||||
server="172.18.0.1" ## IP do Docker RK-SIEM-CORE (mude se o IP não for esse)
|
||||
serverport="9200"
|
||||
template="json-template"
|
||||
searchIndex="host01-logs"
|
||||
|
||||
@@ -1 +1,176 @@
|
||||
ops
|
||||

|
||||
|
||||

|
||||
|
||||
Neste segundo laboratório o objetivo é enviar Logs de um host com Linux (Debian) em seu formato nativo (Syslog) para um Logshipper (Fluent-Bit) instalado no próprio host que providenciará o envio em formato JSON para o RK-SIEM.
|
||||
|
||||
Para isso também utilizaremos um Docker com o Debian Linux "enxuto" (slim) adicionado dos seguintes pacotes:
|
||||
|
||||
<ul>
|
||||
<li>RSyslog (Gerenciador de Logs do Linux)</li>
|
||||
<li>Fluent-Bit</li>
|
||||
<li>Apache2 -Servidor Web para gerar logs de acesso a serem enviados para o RK-SIEM</li>
|
||||
</ul>
|
||||
|
||||
Conteúdo do docker-compose.yml referente ao Host 02:
|
||||
|
||||
```
|
||||
services:
|
||||
rk-siem-host02:
|
||||
image: ricardokleber/rk-siem-host02:latest
|
||||
container_name: rk-siem-host02
|
||||
hostname: rk-siem-host02
|
||||
tty: true
|
||||
stdin_open: true
|
||||
restart: always
|
||||
```
|
||||
|
||||
**Nenhum conteúdo foi adicionado ao arquivo de configuração do RSyslog!!!**
|
||||
|
||||
Conteúdo adicionado ao arquivo de configuração do Fluent-Bit (*/etc/fluent-bit/fluent-bit.conf*) para conexão ao RK-SIEM e envio dos Logs autenticando-se com usuário admin/admin:
|
||||
|
||||
```
|
||||
# Capturar logs somente do apache (exemplo)
|
||||
|
||||
[INPUT]
|
||||
Name tail
|
||||
Path /var/log/apache2/access.log
|
||||
Tag apache-logs-acesso
|
||||
```
|
||||
|
||||
```
|
||||
# Envio para o RK-SIEM-CORE
|
||||
|
||||
[OUTPUT]
|
||||
Name opensearch
|
||||
Match apache-logs-acesso
|
||||
Host 172.18.0.1
|
||||
Port 9200
|
||||
Index host02-logs
|
||||
HTTP_User admin
|
||||
HTTP_Passwd admin
|
||||
tls On
|
||||
tls.verify Off
|
||||
```
|
||||
|
||||
|
||||
|
||||
***
|
||||
|
||||
**Roteiro Passo a Passo:**
|
||||
|
||||
**1. Baixe o Repositório GIT do projeto**
|
||||
|
||||
```
|
||||
git clone https://gitlab.ifrncn.com.br/ricardokleber/rk-siem.git
|
||||
```
|
||||
|
||||
**2. Entre no diretório/pasta do projeto referente ao LAB02**
|
||||
|
||||
(O docker-compose deste diretório já contém as configurações do HOST02)
|
||||
|
||||
```
|
||||
cd rk-siem/roteiros/04-lab02
|
||||
```
|
||||
|
||||
**3. Levante o RK-SIEM-CORE**
|
||||
|
||||
```
|
||||
docker compose up -d rk-siem-core
|
||||
```
|
||||
|
||||
**4. Levante o RK-SIEM-UI**
|
||||
|
||||
```
|
||||
docker compose up -d rk-siem-ui
|
||||
```
|
||||
|
||||
(Após alguns segundos você já poderá subir a interface Web RK-SIEM-UI acessando http://localhost:5601 em um navegador)
|
||||
|
||||

|
||||
|
||||
**5. Levante o RK-SIEM-HOST02**
|
||||
|
||||
```
|
||||
docker compose up -d rk-siem-host02
|
||||
```
|
||||
|
||||
**6. Entre no HOST02 e ative os serviços RSyslog e Apache2 e, em seguida, execute o Fluent-Bit em background**
|
||||
|
||||
```
|
||||
docker exec -it rk-siem-host02 bash
|
||||
```
|
||||
|
||||
```
|
||||
rsyslogd
|
||||
```
|
||||
|
||||
```
|
||||
service apache2 start
|
||||
```
|
||||
|
||||
```
|
||||
/opt/fluent-bit/bin/fluent-bit -c /etc/fluent-bit/fluent-bit.conf
|
||||
```
|
||||
|
||||
***
|
||||
|
||||
**7. Como filtramos no Fluent-Bit para enviar somente logs de acesso ao Servidor Web, vamos gerar pelo menos um acesso no próprio host**
|
||||
|
||||
```
|
||||
curl http://localhost
|
||||
```
|
||||
|
||||
**8. Acesse o RK-SIEM com as credenciais padrão**
|
||||
|
||||
```
|
||||
Username: admin | Password: admin
|
||||
```
|
||||
|
||||
**9. No Menu do canto superior esquerdo, na sessão 'Management' selecione 'Dashboards Management'**
|
||||
|
||||

|
||||
|
||||
**10. Selecione a opção 'Index patterns' para configurar o seu primeiro índice no RK-SIEM (para receber os Logs do HOST02)'**
|
||||
|
||||

|
||||
|
||||
**11. Clique no botão 'Create index pattern' para Criar seu primeiro índice**
|
||||
|
||||

|
||||
|
||||
Observe que o Host 02 já enviou logs para o RK-SIEM (A indicação do índice 'host02-logs' já aparece como fonte disponível)
|
||||
|
||||

|
||||
|
||||
**11. Preencha o campo 'Index pattern name' indicando que o índice que será criado deverá receber todo o tráfego de índices começando com 'host02-logs'**
|
||||
|
||||
```
|
||||
host02-logs*
|
||||
```
|
||||
|
||||

|
||||
|
||||
Clique no botão 'Next step' para o próximo passo.
|
||||
|
||||
**12. No campo 'Time field' você deverá indicar;selecionar o 'campo de índice de tempo' usado para indexar e exibir os logs. Clicando na seta surgirá o campo padrão utilizado em Logs '@timestamp'. Clique para selecioná-lo**
|
||||
|
||||
```
|
||||
@timestamp
|
||||
```
|
||||

|
||||
|
||||
|
||||
(Clique no botão 'Create index pattern' para finalizar a criação do índice).
|
||||
|
||||
**Você já poderá visualizar o log enviado do 'Host02' com o acesso ao servidor web local na seção 'Discover'**
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
***
|
||||
|
||||
**Assista à Videoaula explicativa sobre o assunto clicando na imagem abaixo:**
|
||||
|
||||
<a href="https://www.youtube.com/watch?v=kpBKzi5iLQo" target="_blank"><img width="400" height="120" alt="assistavideo" src="../../assets/rk-siem-youtube_lab02.png" /></a>
|
||||
@@ -1,8 +1,64 @@
|
||||
services:
|
||||
rk-siem-host02:
|
||||
rk-siem-core:
|
||||
image: ricardokleber/rk-siem-core:latest
|
||||
container_name: rk-siem-core
|
||||
environment:
|
||||
- cluster.name=rk-siem-core
|
||||
- node.name=rk-siem-node
|
||||
- discovery.type=single-node
|
||||
- bootstrap.memory_lock=true
|
||||
- "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" # Ajuste conforme sua RAM disponível
|
||||
- DISABLE_INSTALL_DEMO_CONFIG=false
|
||||
ulimits:
|
||||
memlock:
|
||||
soft: -1
|
||||
hard: -1
|
||||
nofile:
|
||||
soft: 65536
|
||||
hard: 65536
|
||||
volumes:
|
||||
- rk-siem-data:/usr/share/opensearch/data
|
||||
ports:
|
||||
- 9200:9200 # API REST
|
||||
- 9600:9600 # Performance Analyzer
|
||||
networks:
|
||||
- rk-siem-net
|
||||
|
||||
rk-siem-ui:
|
||||
image: ricardokleber/rk-siem-ui:latest
|
||||
container_name: rk-siem-ui
|
||||
ports:
|
||||
- 5601:5601 # Interface Web
|
||||
expose:
|
||||
- 5601
|
||||
command: ["/bin/bash", "-c", "/etc/init.d/opensearch-dashboards start && tail -f /var/log/opensearch-dashboards/opensearch-dashboards.stdout"]
|
||||
restart: always
|
||||
environment:
|
||||
- 'OPENSEARCH_HOSTS=["https://rk-siem-core:9200"]'
|
||||
- "DISABLE_SECURITY_DASHBOARDS_PLUGIN=false"
|
||||
networks:
|
||||
- rk-siem-net
|
||||
depends_on:
|
||||
- rk-siem-core
|
||||
|
||||
rk-siem-host01:
|
||||
image: ricardokleber/rk-siem-host01:latest
|
||||
container_name: rk-siem-host01
|
||||
hostname: rk-siem-host01
|
||||
tty: true
|
||||
stdin_open: true
|
||||
restart: always
|
||||
|
||||
rk-siem-host02:
|
||||
image: ricardokleber/rk-siem-host02:latest
|
||||
container_name: rk-siem-host02
|
||||
hostname: rk-siem-host02
|
||||
tty: true
|
||||
stdin_open: true
|
||||
restart: always
|
||||
|
||||
volumes:
|
||||
rk-siem-data:
|
||||
|
||||
networks:
|
||||
rk-siem-net:
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
[OUTPUT]
|
||||
Name opensearch
|
||||
Match apache-logs-acesso
|
||||
Host 172.20.0.1
|
||||
Host 172.18.0.1
|
||||
Port 9200
|
||||
Index host02-logs
|
||||
Type _doc
|
||||
|
||||
188
roteiros/05-lab03/README.md
Normal file
@@ -0,0 +1,188 @@
|
||||

|
||||
|
||||
***
|
||||
|
||||
**Como enviar Logs de hosts Windows para o RK-SIEM (se o padrão Microsoft é o .EVTX)?**
|
||||
|
||||

|
||||
|
||||
Neste terceiro laboratório o objetivo é enviar Logs de um host com Windows em seu formato nativo (.EVTX) para um Logshipper (Fluent-Bit) instalado no próprio host que providenciará o envio em formato JSON para o RK-SIEM.
|
||||
|
||||

|
||||
|
||||
Como estamos usando o ambiente Linux para nossas práticas (e para não usar um Máquina Virtual Windows VirtualBox ou VMWare à parte em nosso cenário) faremos uso de uma "adaptação" feita pelo projeto <a href="https://github.com/dockur/windows" target="_blank">Windows Dockur</a> que executa uma máquina virtual Windows (KVM) gerenciada de dentro de um container Docker.
|
||||
|
||||

|
||||
|
||||
Conteúdo do docker-compose.yml referente ao Host 03:
|
||||
|
||||
```
|
||||
services
|
||||
rk-siem-host03:
|
||||
image: docker.ifrncn.com.br/rk/rk-windows:latest
|
||||
container_name: rk-siem-host03
|
||||
devices:
|
||||
- /dev/kvm # Essencial para aceleração de hardware (KVM)
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
ports:
|
||||
- 8006:8006 # Interface Web (NoVNC)
|
||||
volumes:
|
||||
- ./dados:/storage
|
||||
stop_grace_period: 2m
|
||||
restart: on-failure
|
||||
environment:
|
||||
VERSION: "7u" # Define a versão (win11, win10, etc)
|
||||
RAM_SIZE: "2G" # Memória RAM
|
||||
CPU_CORES: "2" # Quantidade de núcleos
|
||||
DISK_SIZE: "15G" # Tamanho do disco virtual
|
||||
USERNAME: "admin"
|
||||
PASSWORD: "admin"
|
||||
```
|
||||
|
||||
Em versões mais atuais do Windows (11 e/ou 2025 server) é só baixar gratuitamente a versão atualizada do <a href="https://fluentbit.io/" target="_blank">Fluent-Bit</a>, instalar e configurar seguindo as orientações deste roteiro.
|
||||
|
||||
Para não deixar nosso ambiente muito pesado, porém (em função dos recursos necessários para executar uma MV Windows 11/2025) fizemos a opção por instalar e configurar um Windows 7 necessitando, porém, da adição dos seguintes aplicativos:
|
||||
|
||||
<ul>
|
||||
<li>.NET Framework 4.8</li>
|
||||
<li>Fluent-Bit (versão 1.8.5)</li>
|
||||
<li>NSSM (para executar o Fluent-Bit como serviço</li>
|
||||
</ul>
|
||||
|
||||
Foram necessários, ainda, vários patches com atualizações no Windows 7 para que o sistema funcionasse perfeitamente:
|
||||
|
||||
<ul>
|
||||
<li>KB4503575</li>
|
||||
<li>KB4503575</li>
|
||||
<li>KB3191566</li>
|
||||
<li>KB4019990</li>
|
||||
<li>KB3033929</li>
|
||||
<li>KB2534111</li>
|
||||
<li>KB2872035</li>
|
||||
<li>KB2809215</li>
|
||||
<li>KB976902</li>
|
||||
</ul>
|
||||
|
||||
##
|
||||
|
||||
**ATENÇÃO!!! Se você optar por instalar "do zero" o Windows 7, deverá instalar todos os aplicativos e patches listados aqui, ou não funcionará**
|
||||
##
|
||||
|
||||
**Para facilitar/agilizar esta prática, sugerimos baixar e utilizar a pasta compartilhada 'dados' de um Windows7 já com todos os aplicativos e patches aplicados. Disponibilizamos o passo-a-pasos em nosso Git <a href="https://gitlab.ifrncn.com.br/ricardokleber/rk-windows7" target="_blank">https://gitlab.ifrncn.com.br/ricardokleber/rk-windows7</a>**
|
||||
|
||||
|
||||
Arquivo de configuração do Fluent-Bit (*C:\Program Files\fluent-bit\fluent-bit.conf*) para conexão ao RK-SIEM e envio dos Logs autenticando-se com usuário admin/admin:
|
||||
|
||||

|
||||
|
||||
**Verifique se o IP do RK-SIEM-CORE informado é o IP do gateway da máquina Windows ou o IP do seu host real (pode ser qualquer um deles)**
|
||||
|
||||
|
||||
***
|
||||
|
||||
**Roteiro Passo a Passo:**
|
||||
|
||||
**1. Baixe o Repositório GIT do projeto**
|
||||
|
||||
```
|
||||
git clone https://gitlab.ifrncn.com.br/ricardokleber/rk-siem.git
|
||||
```
|
||||
|
||||
**2. Entre no diretório/pasta do projeto referente ao LAB03**
|
||||
|
||||
(O docker-compose deste diretório já contém as configurações do HOST03)
|
||||
|
||||
```
|
||||
cd rk-siem/roteiros/05-lab03
|
||||
```
|
||||
|
||||
**3. Levante o RK-SIEM-CORE**
|
||||
|
||||
```
|
||||
docker compose up -d rk-siem-core
|
||||
```
|
||||
|
||||
**4. Levante o RK-SIEM-UI**
|
||||
|
||||
```
|
||||
docker compose up -d rk-siem-ui
|
||||
```
|
||||
|
||||
(Após alguns segundos você já poderá subir a interface Web RK-SIEM-UI acessando http://localhost:5601 em um navegador)
|
||||
|
||||

|
||||
|
||||
**5. Baixe e descompacte a pasta 'dados' com o Windows 7 configurado**
|
||||
|
||||
```
|
||||
wget http://arquivos.ifrncn.com.br/windows/rk-windows7-dados.tgz
|
||||
```
|
||||
|
||||
```
|
||||
tar -xvzf rk-windows7-dados.tgz
|
||||
```
|
||||
|
||||
**6. Levante o RK-SIEM-HOST03**
|
||||
|
||||
```
|
||||
docker compose up -d rk-siem-host03
|
||||
```
|
||||
|
||||
**7. Acesse o HOST03 usando um Navegador (http://localhost:8006) e verifique se o arquivo de configuração do Fluent-Bit está apontando corretamente para o IP do RK-SIEM-CORE**
|
||||
|
||||

|
||||
|
||||
**8. Acesse o RK-SIEM (http://localhost:5601) com as credenciais padrão**
|
||||
|
||||
```
|
||||
Username: admin | Password: admin
|
||||
```
|
||||
|
||||
**9. No Menu do canto superior esquerdo, na sessão 'Management' selecione 'Dashboards Management'**
|
||||
|
||||

|
||||
|
||||
**10. Selecione a opção 'Index patterns' para configurar o seu primeiro índice no RK-SIEM (para receber os Logs do HOST03)'**
|
||||
|
||||

|
||||
|
||||
**11. Clique no botão 'Create index pattern' para Criar o índice dos logs vindos do Host03**
|
||||
|
||||

|
||||
|
||||
Observe que o Host 03 já enviou logs para o RK-SIEM (A indicação do índice 'host03-logs' já aparece como fonte disponível)
|
||||
|
||||

|
||||
|
||||
**11. Preencha o campo 'Index pattern name' indicando que o índice que será criado deverá receber todo o tráfego de índices começando com 'host03-logs'**
|
||||
|
||||
```
|
||||
host03-logs*
|
||||
```
|
||||
|
||||

|
||||
|
||||
Clique no botão 'Next step' para o próximo passo.
|
||||
|
||||
**12. No campo 'Time field' você deverá indicar;selecionar o 'campo de índice de tempo' usado para indexar e exibir os logs. Clicando na seta surgirá o campo padrão utilizado em Logs '@timestamp'. Clique para selecioná-lo**
|
||||
|
||||
```
|
||||
@timestamp
|
||||
```
|
||||

|
||||
|
||||
|
||||
(Clique no botão 'Create index pattern' para finalizar a criação do índice).
|
||||
|
||||
**Você já poderá visualizar os logs enviados pelo 'Host03' na seção 'Discover'**
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
***
|
||||
|
||||
**Assista à Videoaula explicativa sobre o assunto clicando na imagem abaixo:**
|
||||
|
||||
<a href="https://www.youtube.com/watch?v=tSvIpqMLhsw" target="_blank"><img width="400" height="120" alt="assistavideo" src="../../assets/rk-siem-youtube_lab03.png" /></a>
|
||||
@@ -1,6 +1,63 @@
|
||||
services:
|
||||
rk-siem-host03:
|
||||
# image: ricardokleber/rk-siem-host03:latest
|
||||
rk-siem-core:
|
||||
image: ricardokleber/rk-siem-core:latest
|
||||
container_name: rk-siem-core
|
||||
environment:
|
||||
- cluster.name=rk-siem-core
|
||||
- node.name=rk-siem-node
|
||||
- discovery.type=single-node
|
||||
- bootstrap.memory_lock=true
|
||||
- "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" # Ajuste conforme sua RAM disponível
|
||||
- DISABLE_INSTALL_DEMO_CONFIG=false
|
||||
ulimits:
|
||||
memlock:
|
||||
soft: -1
|
||||
hard: -1
|
||||
nofile:
|
||||
soft: 65536
|
||||
hard: 65536
|
||||
volumes:
|
||||
- rk-siem-data:/usr/share/opensearch/data
|
||||
ports:
|
||||
- 9200:9200 # API REST
|
||||
- 9600:9600 # Performance Analyzer
|
||||
networks:
|
||||
- rk-siem-net
|
||||
|
||||
rk-siem-ui:
|
||||
image: ricardokleber/rk-siem-ui:latest
|
||||
container_name: rk-siem-ui
|
||||
ports:
|
||||
- 5601:5601 # Interface Web
|
||||
expose:
|
||||
- 5601
|
||||
command: ["/bin/bash", "-c", "/etc/init.d/opensearch-dashboards start && tail -f /var/log/opensearch-dashboards/opensearch-dashboards.stdout"]
|
||||
restart: always
|
||||
environment:
|
||||
- 'OPENSEARCH_HOSTS=["https://rk-siem-core:9200"]'
|
||||
- "DISABLE_SECURITY_DASHBOARDS_PLUGIN=false"
|
||||
networks:
|
||||
- rk-siem-net
|
||||
depends_on:
|
||||
- rk-siem-core
|
||||
|
||||
rk-siem-host01:
|
||||
image: ricardokleber/rk-siem-host01:latest
|
||||
container_name: rk-siem-host01
|
||||
hostname: rk-siem-host01
|
||||
tty: true
|
||||
stdin_open: true
|
||||
restart: always
|
||||
|
||||
rk-siem-host02:
|
||||
image: ricardokleber/rk-siem-host02:latest
|
||||
container_name: rk-siem-host02
|
||||
hostname: rk-siem-host02
|
||||
tty: true
|
||||
stdin_open: true
|
||||
restart: always
|
||||
|
||||
rk-siem-host03:
|
||||
image: docker.ifrncn.com.br/rk/rk-windows:latest
|
||||
container_name: rk-siem-host03
|
||||
devices:
|
||||
@@ -15,8 +72,14 @@ services:
|
||||
restart: on-failure
|
||||
environment:
|
||||
VERSION: "7u" # Define a versão (win11, win10, etc)
|
||||
RAM_SIZE: "2G" # Mínimo recomendado para Win11
|
||||
RAM_SIZE: "2G"
|
||||
CPU_CORES: "2" # Quantidade de núcleos
|
||||
DISK_SIZE: "15G" # Tamanho do disco virtual
|
||||
USERNAME: "admin"
|
||||
PASSWORD: "admin"
|
||||
|
||||
volumes:
|
||||
rk-siem-data:
|
||||
|
||||
networks:
|
||||
rk-siem-net:
|
||||
|
||||
29
roteiros/06-lab04/conf/fluent-bit.conf
Normal file
@@ -0,0 +1,29 @@
|
||||
# cat /etc/fluent-bit/fluent-bit.conf
|
||||
[SERVICE]
|
||||
Flush 1
|
||||
Log_Level info
|
||||
Daemon off
|
||||
|
||||
# Coleta logs do Arquivo Gerado
|
||||
[INPUT]
|
||||
Name tail
|
||||
Path /root/teste.log
|
||||
Tag logs_host04
|
||||
|
||||
# Envio para o RK-SIEM-CORE
|
||||
[OUTPUT]
|
||||
Name opensearch
|
||||
Match logs_host04
|
||||
Host 172.18.0.1
|
||||
Port 9200
|
||||
Index teste-logs
|
||||
Type _doc
|
||||
HTTP_User admin
|
||||
HTTP_Passwd admin
|
||||
tls On
|
||||
tls.verify Off
|
||||
Suppress_Type_Name On
|
||||
|
||||
#[OUTPUT]
|
||||
# Name stdout
|
||||
# Match *
|
||||
56
roteiros/06-lab04/docker-compose.yml
Normal file
@@ -0,0 +1,56 @@
|
||||
services:
|
||||
rk-siem-core:
|
||||
image: ricardokleber/rk-siem-core:latest
|
||||
container_name: rk-siem-core
|
||||
environment:
|
||||
- cluster.name=rk-siem-core
|
||||
- node.name=rk-siem-node
|
||||
- discovery.type=single-node
|
||||
- bootstrap.memory_lock=true
|
||||
- "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" # Ajuste conforme sua RAM disponível
|
||||
- DISABLE_INSTALL_DEMO_CONFIG=false
|
||||
ulimits:
|
||||
memlock:
|
||||
soft: -1
|
||||
hard: -1
|
||||
nofile:
|
||||
soft: 65536
|
||||
hard: 65536
|
||||
volumes:
|
||||
- rk-siem-data:/usr/share/opensearch/data
|
||||
ports:
|
||||
- 9200:9200 # API REST
|
||||
- 9600:9600 # Performance Analyzer
|
||||
networks:
|
||||
- rk-siem-net
|
||||
|
||||
rk-siem-ui:
|
||||
image: ricardokleber/rk-siem-ui:latest
|
||||
container_name: rk-siem-ui
|
||||
ports:
|
||||
- 5601:5601 # Interface Web
|
||||
expose:
|
||||
- 5601
|
||||
command: ["/bin/bash", "-c", "/etc/init.d/opensearch-dashboards start && tail -f /var/log/opensearch-dashboards/opensearch-dashboards.stdout"]
|
||||
restart: always
|
||||
environment:
|
||||
- 'OPENSEARCH_HOSTS=["https://rk-siem-core:9200"]'
|
||||
- "DISABLE_SECURITY_DASHBOARDS_PLUGIN=false"
|
||||
networks:
|
||||
- rk-siem-net
|
||||
depends_on:
|
||||
- rk-siem-core
|
||||
|
||||
rk-siem-host04:
|
||||
image: ricardokleber/rk-siem-host04:latest
|
||||
container_name: rk-siem-host04
|
||||
hostname: rk-siem-host04
|
||||
tty: true
|
||||
stdin_open: true
|
||||
restart: always
|
||||
|
||||
volumes:
|
||||
rk-siem-data:
|
||||
|
||||
networks:
|
||||
rk-siem-net:
|
||||
4
roteiros/06-lab04/pipelines/aplicar_pipeline.json
Normal file
@@ -0,0 +1,4 @@
|
||||
PUT /teste-logs/_settings
|
||||
{
|
||||
"index.default_pipeline": "rk-siem_web_logs"
|
||||
}
|
||||
1
roteiros/06-lab04/pipelines/deletar_pipeline.json
Normal file
@@ -0,0 +1 @@
|
||||
DELETE _ingest/pipeline/rk-siem_web_logs
|
||||
@@ -0,0 +1 @@
|
||||
GET /_settings?filter_path=*.settings.index.default_pipeline
|
||||
1
roteiros/06-lab04/pipelines/listar_pipelines.json
Normal file
@@ -0,0 +1 @@
|
||||
GET _ingest/pipeline
|
||||
@@ -0,0 +1,6 @@
|
||||
PUT /teste-logs/_settings
|
||||
{
|
||||
"index": {
|
||||
"default_pipeline": null
|
||||
}
|
||||
}
|
||||
61
roteiros/06-lab04/pipelines/rk-siem_ssh_logs.json
Normal file
@@ -0,0 +1,61 @@
|
||||
PUT _ingest/pipeline/rk-siem_ssh_logs
|
||||
{
|
||||
"description": "Pipeline do RK-SIEM para normalização de logs SSH",
|
||||
"processors": [
|
||||
{
|
||||
"grok": {
|
||||
"field": "log",
|
||||
"patterns": [
|
||||
"%{SYSLOGTIMESTAMP:timestamp} %{HOSTNAME:host} %{WORD:program}\\[%{NUMBER:pid}\\]: %{WORD:ssh_event} password for %{USER:user} from %{IP:source_ip} port %{NUMBER:source_port} ssh2",
|
||||
"%{SYSLOGTIMESTAMP:timestamp} %{HOSTNAME:host} %{WORD:program}\\[%{NUMBER:pid}\\]: %{WORD:ssh_event} for invalid user %{USER:user} from %{IP:source_ip} port %{NUMBER:source_port} ssh2",
|
||||
"%{SYSLOGTIMESTAMP:timestamp} %{HOSTNAME:host} %{WORD:program}\\[%{NUMBER:pid}\\]: Connection closed by (authenticating |)%{IP:source_ip} port %{NUMBER:source_port}"
|
||||
],
|
||||
"description": "Extrai eventos de Accepted, Failed e Disconnected do SSH"
|
||||
}
|
||||
},
|
||||
{
|
||||
"date": {
|
||||
"field": "timestamp",
|
||||
"formats": ["MMM d HH:mm:ss", "MMM dd HH:mm:ss"],
|
||||
"target_field": "@timestamp",
|
||||
"description": "Padroniza o tempo vindo do syslog (ex: Oct 10 13:55:36)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"set": {
|
||||
"if": "ctx.ssh_event == 'Accepted'",
|
||||
"field": "event.outcome",
|
||||
"value": "success"
|
||||
}
|
||||
},
|
||||
{
|
||||
"set": {
|
||||
"if": "ctx.ssh_event == 'Failed'",
|
||||
"field": "event.outcome",
|
||||
"value": "failure"
|
||||
}
|
||||
},
|
||||
{
|
||||
"geoip": {
|
||||
"field": "source_ip",
|
||||
"target_field": "geo",
|
||||
"ignore_missing": true,
|
||||
"description": "Enriquecimento: Localiza a origem do acesso"
|
||||
}
|
||||
},
|
||||
{
|
||||
"remove": {
|
||||
"field": ["log", "timestamp", "program"],
|
||||
"ignore_missing": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"on_failure": [
|
||||
{
|
||||
"set": {
|
||||
"field": "error.message",
|
||||
"value": "Falha no processamento do pipeline rk_siem_ssh_logs"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
10
roteiros/06-lab04/pipelines/rk-siem_ssh_logs_teste.json
Normal file
@@ -0,0 +1,10 @@
|
||||
POST _ingest/pipeline/rk-siem_ssh_logs/_simulate
|
||||
{
|
||||
"docs": [
|
||||
{
|
||||
"_source": {
|
||||
"log": "Oct 23 11:30:05 servidor-prod sshd[1234]: Failed password for root from 192.168.1.50 port 54321 ssh2"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
51
roteiros/06-lab04/pipelines/rk-siem_web_logs.json
Normal file
@@ -0,0 +1,51 @@
|
||||
PUT _ingest/pipeline/rk-siem_web_logs
|
||||
{
|
||||
"description": "Pipeline do RK-SIEM para normalização de logs HTTP - Ajustado para campo 'log'",
|
||||
"processors": [
|
||||
{
|
||||
"grok": {
|
||||
"field": "log",
|
||||
"patterns": [
|
||||
"%{IPORHOST:source_ip} - %{USER:user_id} \\[%{HTTPDATE:timestamp}\\] \"%{WORD:http_method} %{NOTSPACE:url_path} HTTP/%{NUMBER:http_version}\" %{NUMBER:status_code} %{NUMBER:bytes_sent}"
|
||||
],
|
||||
"description": "Extrai dados do campo 'log' enviado pelo Fluent-bit"
|
||||
}
|
||||
},
|
||||
{
|
||||
"date": {
|
||||
"field": "timestamp",
|
||||
"formats": [
|
||||
"dd/MMM/yyyy:HH:mm:ss Z"
|
||||
],
|
||||
"target_field": "@timestamp"
|
||||
}
|
||||
},
|
||||
{
|
||||
"convert": {
|
||||
"field": "status_code",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
{
|
||||
"user_agent": {
|
||||
"field": "user_agent_string",
|
||||
"target_field": "browser_info",
|
||||
"ignore_missing": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"remove": {
|
||||
"field": ["log", "timestamp"],
|
||||
"ignore_missing": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"on_failure": [
|
||||
{
|
||||
"set": {
|
||||
"field": "error.message",
|
||||
"value": "Falha no processamento do pipeline rk_siem_web_logs"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
10
roteiros/06-lab04/pipelines/rk-siem_web_logs_teste.json
Normal file
@@ -0,0 +1,10 @@
|
||||
POST _ingest/pipeline/rk-siem_web_logs/_simulate
|
||||
{
|
||||
"docs": [
|
||||
{
|
||||
"_source": {
|
||||
"log": "192.168.1.10 - - [23/Apr/2026:14:00:12 +0000] \"DELETE /index.html HTTP/1.1\" 500 5124"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
77
roteiros/06-lab04/scripts/rk-siem-gera-logs.py
Executable file
@@ -0,0 +1,77 @@
|
||||
import random
|
||||
import time
|
||||
from datetime import datetime
|
||||
|
||||
# Bancos de dados fictícios para os logs
|
||||
IPS = ["192.168.1.10", "10.0.0.5", "172.16.0.2", "45.33.11.2", "185.22.14.5", "200.150.10.1", "8.8.8.8"]
|
||||
USERS = ["root", "admin", "user1", "guest", "webmaster", "support", "devops", "db_admin"]
|
||||
PAGES = ["/index.html", "/login", "/admin/dashboard", "/api/v1/user", "/wp-login.php", "/config.php"]
|
||||
USER_AGENTS = [
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
|
||||
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36",
|
||||
"curl/7.68.0",
|
||||
"python-requests/2.25.1"
|
||||
]
|
||||
|
||||
def generate_apache_log():
|
||||
ip = random.choice(IPS)
|
||||
date = datetime.now().strftime('%d/%b/%Y:%H:%M:%S +0000')
|
||||
method = random.choice(["GET", "POST", "PUT", "DELETE"])
|
||||
page = random.choice(PAGES)
|
||||
status = random.choice([200, 201, 404, 500, 403, 301])
|
||||
size = random.randint(150, 8000)
|
||||
agent = random.choice(USER_AGENTS)
|
||||
return f'{ip} - - [{date}] "{method} {page} HTTP/1.1" {status} {size} "-" "{agent}"'
|
||||
|
||||
def generate_ssh_log():
|
||||
ip = random.choice(IPS)
|
||||
user = random.choice(USERS)
|
||||
date = datetime.now().strftime('%b %d %H:%M:%S')
|
||||
host = "host04"
|
||||
|
||||
if random.random() > 0.6: # 40% de chance de sucesso, 60% de falha
|
||||
return f'{date} {host} sshd[{random.randint(1000, 9999)}]: Failed password for {user} from {ip} port {random.randint(30000, 60000)} ssh2'
|
||||
else:
|
||||
return f'{date} {host} sshd[{random.randint(1000, 9999)}]: Accepted password for {user} from {ip} port {random.randint(30000, 60000)} ssh2'
|
||||
|
||||
def main():
|
||||
print("--- Gerador de Logs Customizado ---")
|
||||
|
||||
# 1. Escolha do tipo
|
||||
print("\n[1] Apache2 (HTTP)")
|
||||
print("[2] SSH (Auth)")
|
||||
service_choice = input("Escolha o tipo de log (1 ou 2): ")
|
||||
|
||||
# 2. Quantidade de linhas
|
||||
try:
|
||||
num_lines = int(input("Quantas linhas de log deseja gerar? "))
|
||||
except ValueError:
|
||||
print("Erro: Por favor, insira um número válido.")
|
||||
return
|
||||
|
||||
# 3. Nome do arquivo
|
||||
output_file = input("Digite o nome do arquivo de saída (ex: teste.log): ")
|
||||
|
||||
print(f"\nIniciando geração de {num_lines} linhas em '{output_file}'...")
|
||||
|
||||
try:
|
||||
with open(output_file, "w") as f:
|
||||
for i in range(num_lines):
|
||||
if service_choice == "1":
|
||||
line = generate_apache_log()
|
||||
else:
|
||||
line = generate_ssh_log()
|
||||
|
||||
f.write(line + "\n")
|
||||
|
||||
# Exibe progresso a cada 10% para não travar o terminal em arquivos gigantes
|
||||
if num_lines > 100 and i % (num_lines // 10) == 0:
|
||||
print(f"Progresso: {round((i/num_lines)*100)}%...")
|
||||
|
||||
print(f"\nSucesso! Arquivo '{output_file}' gerado com {num_lines} linhas.")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Ocorreu um erro ao gravar o arquivo: {e}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||