Voltar às atualizações
New releaseAug 1, 2026

maltrail v2.2

Sistema de detecção de tráfego malicioso em tempo real usando listas negras públicas, rastros estáticos de malware e análise heurística para identificar ameaças em tráfego DNS, HTTP e IP.

Compartilhar

Maltrail

License Sensor Server Trails X

Maltrail

O Maltrail é um sistema de detecção de tráfego de rede que identifica comunicação com infraestrutura maliciosa conhecida e reporta anomalias de tráfego selecionadas. Ele compara domínios, URLs, endereços IP, pares IP:porta e valores de User-Agent observados na rede com um conjunto de indicadores chamados trails.

Uma detecção é registrada como um único evento contendo a origem, o destino, o protocolo, a trail correspondente, a classificação e a fonte da trail:```text "2026-08-07 09:14:22.117034" gw 10.13.13.2 57809 1.1.1.1 53 UDP DNS malware.bakewithdavid.com "asyncrat (malware)" (static)

O Maltrail foi concebido para monitorização de rede baseada em indicadores. As suas deteções heurísticas complementam
a correspondência de trilhos, mas não substituem a telemetria de endpoints nem um sistema de prevenção de intrusões
de uso geral.

## Funcionalidades

- Uma construção completa de trilhos que combina mais de 3.000 ficheiros estáticos incluídos, 42 integrações de feeds públicos
  e trilhos opcionais fornecidos pelo operador.
- Um sensor Rust multithreaded que utiliza libpcap, com workers de captura opcionais `PACKET_FANOUT` do Linux.
- Um servidor Python que fornece a interface de relatórios, a receção de eventos e a API HTTP.
- Trilhos personalizados e listas de permissões em texto simples que podem ser revistos e controlados por versões.
- Heurísticas para scanning, exaustão de DNS, consultas semelhantes a DGA, downloads suspeitos, sondagens de proxy,
  valores de User-Agent suspeitos e atividade de rede relacionada.
- Registo de eventos local, registo remoto do Maltrail, CEF via syslog e saída JSON do Logstash.
- Validação da implementação com `maltrail-sensor -T` e métricas Prometheus opcionais.

## Conteúdo

- [Arquitetura](#arquitetura)
- [Interface de relatórios](#interface-de-relatorios)
- [Desempenho](#desempenho)
- [Instalação](#instalação)
  - [Instalador](#instalador)
  - [Compilação a partir do código-fonte](#compilação-a-partir-do-código-fonte)
  - [Systemd](#systemd)
  - [Docker](#docker)
- [Configuração](#configuração)
- [Trilhos](#trilhos)
- [Eventos e API](#eventos-e-api)
- [Operações](#operações)
  - [Monitorização](#monitorização)
  - [Retenção de eventos](#retenção-de-eventos)
- [Documentação](#documentação)
- [Contribuição](#contribuição)
- [Projeto](#projeto)
  - [Licença](#licença)
  - [Mantenedores](#mantenedores)
  - [Patrocinadores](#patrocinadores)
  - [Apresentações e publicações](#apresentações-e-publicações)
  - [Lista negra derivada](#lista-negra-derivada)
  - [Integrações de terceiros](#integrações-de-terceiros)
  - [Agradecimentos](#agradecimentos)

## Arquitetura

O Maltrail consiste em dois processos independentes que podem ser executados no mesmo host ou em hosts separados:```text
   ┌──────────┐   events (UDP or file)   ┌──────────┐
   │  sensor  │ ───────────────────────► │  server  │ ◄── browser
   └──────────┘                          └──────────┘
    Rust                                  Python
    libpcap + PACKET_FANOUT               reporting UI + API
    trail matching + heuristics

O sensor captura o tráfego, realiza correspondência de trilhas e análise heurística, e produz eventos. Ele pode gravar eventos localmente (LOG_DIR), enviá-los a um servidor Maltrail remoto (LOG_SERVER), ou fazer ambos. Também pode emitir CEF via syslog (SYSLOG_SERVER) e JSON para o Logstash (LOGSTASH_SERVER).

O servidor recebe e armazena eventos remotos, serve os logs de eventos disponíveis localmente e fornece a interface web e a API.

Interface de relatórios

O Maltrail inclui uma interface de relatórios baseada em navegador para explorar o tráfego detectado, com atualizações ao vivo, busca por campos, caça retroativa, visualizações geográficas, triagem, visualizações salvas e exportação.

Interface de relatórios do Maltrail

A interface é servida por server.py em HTTP_ADDRESS:HTTP_PORT. É JavaScript puro com uma única dependência de runtime de terceiros (PapaParse, para análise de CSV) e sem etapa de build. Um dia é visualizado por vez, selecionado com um seletor de data que também funciona como uma grade de densidade de eventos sobre os logs diários disponíveis. Os eventos são transmitidos de /events e agregados no navegador em ameaças — uma linha por (origem, trilha) distinto — exibidas em uma grade ordenável com um painel de detalhes.

RecursoNotas
Modo ao vivoEventos adicionados são enviados via Server-Sent Events (/live) e mesclados na visualização atual. Recorre à sondagem de intervalos de bytes do log diário quando SSE não está disponível, ou para sessões que o stream não consegue atender. Novas ameaças de alta severidade podem gerar uma notificação de desktop e um alerta sonoro; ambos podem ser silenciados
BuscaTokens com escopo de campo (src: dst: port: proto: type: trail: info: family: tag: uid: sev: dir: status:; family:interlock inclui interlock-1/-2, os fragmentos nos quais um dump de feed chega dividido) combinados com espaço como AND, - para excluir, curingas *, CIDR (src:10.0.0.0/8) e intervalos e comparações numéricos (port:>1024, count:>=100). Filtros ativos aparecem como chips removíveis
Caça retroativaBusca todos os logs diários retidos por um indicador (/hunt), não apenas o dia em exibição. Limitada por um limite de dias, um orçamento de tempo real e um teto de amostras; um dia em que o orçamento foi cortado é relatado separadamente dos dias concluídos, em vez de ser contado como um total finalizado. Um índice sidecar por dia (LOG_DIR/index/, USE_EVENT_INDEX) permite que a varredura pule toda linha que não corresponde e torna /counts exato
Mapa-múndiDensidade de eventos por país para o dia selecionado (/geo), posicionando o endpoint externo de cada evento. Eventos que não podem ser atribuídos a um endereço externo são relatados como não mapeados, em vez de adivinhados. Defina HOME_LAT / HOME_LON para desenhar arcos de origem
TriagemStatus por ameaça (nova / investigando / resolvida / falso positivo), notas em texto livre, tags e ocultação. Regras de whitelist e pivôs de OSINT estão disponíveis no menu de contexto da linha
Visualizações salvasPredefinições de filtro nomeadas
ExportaçãoA visualização filtrada atual como CSV, JSON ou indicadores defanged
AparênciaTemas claro e escuro, e etapas discretas de tamanho de texto

O estado de triagem, visualizações salvas, tags e configurações de aparência são armazenados no navegador (localStorage), não no servidor: são por navegador e por origem, e não são compartilhados entre analistas.

Sessões restritas com um filtro de rede veem apenas eventos de suas próprias redes, e essa restrição se aplica às contagens, ao mapa e aos endpoints de blacklist, bem como à lista de eventos.

O enriquecimento de país e ASN para endereços individuais é consultado em stat.ripe.net pelo servidor, que armazena em cache os resultados e os serve à interface a partir de seu próprio endpoint /ripe; o navegador não fala com nada além do Maltrail. Defina DISABLE_RIPE_LOOKUPS para desativar completamente as consultas de saída. Sem elas — ou em um host sem acesso à internet — as bandeiras vêm da tabela RIR local e todo o resto na interface funciona offline.

Desempenho

O desempenho depende do processador, da composição do tráfego, do tamanho do conjunto de trilhas, do driver de captura e da interface de rede. Os números abaixo medem o caminho de processamento de pacotes do sensor isoladamente; não são medições de captura ao vivo de ponta a ponta.

Medições representativas em um AMD Ryzen 7 PRO 4750U com heurísticas habilitadas e um conjunto de trilhas de 1,5 milhão de linhas:

TráfegoTempo por pacote
Echo ICMP, 58 bytes101 ns
SYN TCP, 70 bytes302 ns
TLS em massa, 1.473 bytes402 ns
Consulta DNS com cache quente, 93 bytes452 ns
Tráfego misto, média de 866 bytes552 ns
Solicitação HTTP, 169 bytes602 ns
Consulta DNS com nome exclusivo, 93 bytes1.102 ns

Execuções de comparação offline usando a mesma captura, configuração e conjunto de trilhas gerados mediram um custo por pacote em estado estacionário 14–37× menor do que o sensor Python aposentado nos sistemas testados. Esses números separam o tempo de processo inteiro do estado estacionário, porque o carregamento de trilhas domina uma reprodução curta. A detecção em si é verificada separadamente, pelo corpus de 42 casos em sensor/tests/replay.rs.

Meça no sistema de destino com:```bash cargo bench --manifest-path sensor/Cargo.toml --bench hotpath

Um worker de captura é usado por padrão. Workers adicionais podem aumentar a capacidade de captura, mas o
hash de fluxo do Linux divide o estado por origem entre os workers e, portanto, reduz a sensibilidade de alguns
heurísticas de varredura. No teste documentado, 91% dos alertas de heurística de worker único permaneceram com dois
workers, 86% com quatro e 65% com oito. A correspondência exata de trilhas não foi alterada. Aumente
`CAPTURE_FANOUT` somente quando as métricas de descarte de captura mostrarem que é necessário.

A metodologia de benchmark, resultados de hardware, saída do profiler, medições de memória e verificações de fanout
ao vivo estão documentadas em [`sensor/docs/REPORT.md`](https://github.com/stamparm/maltrail/blob/master/sensor/docs/REPORT.md).

## Instalação

### Instalador

O instalador suporta Debian, Ubuntu, Raspberry Pi OS, RHEL, Fedora e openSUSE:```bash
curl -fsSL https://raw.githubusercontent.com/stamparm/maltrail/master/install.sh | sudo sh

Instala dependências, cria um checkout gerenciado em /opt/maltrail, verifica a soma de verificação do sensor pré-compilado, cria uma conta maltrail sem privilégios, instala unidades systemd, prepara os diretórios de log e estado, e inicia o sensor e o servidor. Reexecutar o instalador atualiza o checkout gerenciado.

Revise o script antes de executá-lo com privilégios elevados. A partir de um checkout existente, a execução de teste mostra os comandos sem alterar o sistema:```bash sh install.sh --dry-run

Opções comuns do instalador:```bash
sh install.sh --role sensor      # Install only the sensor
sh install.sh --ref 3.1.2        # Install a release tag instead of master
sh install.sh --no-service       # Install without changing systemd
sh install.sh --dry-run          # Print commands without applying them
sh install.sh --uninstall        # Remove the managed installation; keep logs and state

O painel está disponível em http://127.0.0.1:8338 após a instalação. Note que o HTTP_ADDRESS incluído é 0.0.0.0, portanto ele é acessível em todas as interfaces, não apenas em loopback — e as credenciais padrão são admin / changeme!. Altere USERS e defina HTTP_ADDRESS para 127.0.0.1 (ou coloque o servidor atrás de um proxy reverso com TLS) antes de o host estar em uma rede não confiável.

A construção inicial do trail pode levar vários minutos. O sensor não detecta correspondências de trail até que um conjunto de trails válido esteja disponível. A unidade systemd executa a validação -T do sensor antes da inicialização, de modo que privilégios ausentes, um diretório de log sem permissão de escrita ou um conjunto de trails inválido fazem a inicialização falhar de forma visível.

O harness de teste do instalador cobre contêineres Ubuntu, Debian, Fedora, openSUSE e Alpine. O Alpine usa musl e não utiliza o binário do sensor glibc pré-compilado; compile o sensor a partir do código-fonte nesse caso.

Compilando a partir do código-fonte

O sensor requer Rust 1.74 ou mais recente, cabeçalhos de desenvolvimento do libpcap e as ferramentas de capability do sistema. O servidor e o atualizador de trails requerem Python 3.6 ou mais recente.

Instale os pacotes da distribuição:```bash

Debian / Ubuntu / Raspberry Pi OS

sudo apt-get install cargo libpcap-dev libcap2-bin python3

RHEL / Fedora

sudo dnf install cargo libpcap-devel libcap python3

openSUSE / SLES

sudo zypper install cargo rust libpcap-devel libcap-progs python311

Então, compile e valide o sensor:```bash
git clone --depth 1 https://github.com/stamparm/maltrail.git
cd maltrail

cargo build --release --manifest-path sensor/Cargo.toml

sudo setcap cap_net_raw,cap_net_admin=eip \
  sensor/target/release/maltrail-sensor

sudo install -d -o "$USER" -g "$(id -gn)" -m 750 /var/log/maltrail

sensor/target/release/maltrail-sensor -T
sensor/target/release/maltrail-sensor

Inicie o servidor em outro terminal ou em outro host:```bash python3 server.py

Binários de sensor `x86_64` e `aarch64` pré-compilados estão anexados aos lançamentos atuais com checksums SHA-256.
Eles vinculam libpcap estaticamente e têm como alvo glibc 2.28, então a biblioteca C é a única coisa
de que precisam — nada para instalar, tanto no RHEL 8+, Debian 10+, Ubuntu 18.04+ quanto no Leap 15.x. Em
sistemas baseados em musl, como o Alpine Linux, compile a partir do código-fonte.

Binários das versões **3.1.1 e anteriores** não faziam isso: eles vinculavam libpcap dinamicamente e a solicitavam pelo
nome que o host de build AlmaLinux usa. Debian e Ubuntu fornecem a biblioteca idêntica sob o
nome mais antigo `libpcap.so.0.8`, então esses binários param antes mesmo de começar —```
./maltrail-sensor: error while loading shared libraries: libpcap.so.1: cannot open shared object file

— numa máquina que tenha o libpcap instalado. O install.sh cria o link com o nome em falta por si. Manualmente:```bash

adjust the directory for your architecture: aarch64-linux-gnu, or /usr/lib64 on RPM distributions

sudo ln -sf /usr/lib/x86_64-linux-gnu/libpcap.so.0.8 /usr/lib/x86_64-linux-gnu/libpcap.so.1 sudo ldconfig

### Systemd

As unidades fornecidas em `packaging/systemd/` executam ambos os processos como o
utilizador sem privilégios `maltrail`. O Systemd cria `/var/log/maltrail` e `/var/lib/maltrail`, restringe
o acesso ao sistema de ficheiros e concede ao sensor `CAP_NET_RAW` e `CAP_NET_ADMIN`.

O instalador configura estas unidades automaticamente. Para uma instalação existente a partir do código-fonte, siga
o procedimento manual de serviço em [`sensor/docs/INSTALL.md`](https://github.com/stamparm/maltrail/blob/master/sensor/docs/INSTALL.md).

Verifique o estado do serviço e os registos com:```bash
systemctl status maltrail-sensor maltrail-server
journalctl -u maltrail-sensor -f

Docker

Inicie a implementação Compose fornecida com:```bash docker compose -f docker/docker-compose.yml up -d

Configuração do contêiner, armazenamento, privilégios e verificações de integridade estão documentados em
[`docker/README.md`](https://github.com/stamparm/maltrail/blob/master/docker/README.md).

## Configuração

O Maltrail lê `maltrail.conf`, que contém configurações separadas de `[Sensor]` e `[Server]`. O
instalador coloca a configuração gerenciada em `/etc/maltrail.conf`.

Opções de sensor usadas com frequência incluem:

| Opção | Finalidade |
| --- | --- |
| `MONITOR_INTERFACE` | Interface ou interfaces de captura; `any` seleciona todas as interfaces suportadas |
| `CAPTURE_FILTER` | Filtro de captura BPF |
| `CAPTURE_FANOUT` | Número de sockets de captura Linux; o padrão é um |
| `CAPTURE_WORKERS` | Workers de captura, um socket cada; o padrão é `CAPTURE_FANOUT`, portanto um, a menos que algum deles seja definido |
| `LOG_DIR` | Diretório local de log de eventos |
| `TRAILS_FILE` | Banco de dados de trilhas gerado |
| `LOG_SERVER` | Servidor de eventos Maltrail remoto |
| `SYSLOG_SERVER` | Destino ou destinos de syslog CEF |
| `LOGSTASH_SERVER` | Destino ou destinos JSON do Logstash |
| `STATS_ADDRESS` | Listener de métricas Prometheus; desabilitado a menos que configurado |
| `UPDATE_PERIOD` | Intervalo de atualização das trilhas |
| `STATIC_TRAILS_URL` | De onde o conjunto de trilhas estáticas montado é buscado; fixe-o em uma versão datada para controlar quando novo conteúdo chega |
| `USER_WHITELIST` | Indicadores gerenciados pelo operador que não devem gerar alertas |
| `CUSTOM_TRAILS_DIR` | Diretório de trilhas gerenciado pelo operador |
| `STATIC_TRAILS_DIR` | Checkout opcional do repositório de trilhas; usado apenas para exibir a citação da fonte de uma trilha na interface |

`PROCESS_COUNT` se aplica ao sensor Python descontinuado e ao limitador de log de eventos legado; ele
**não** define a contagem de workers do sensor Rust. Configure os workers de captura com `CAPTURE_FANOUT` ou
`CAPTURE_WORKERS` em vez disso.

Execute a verificação de implantação após alterar a configuração:```bash
sensor/target/release/maltrail-sensor -T

A verificação valida configuração, trilhas, entradas da lista de permissões, filtro de captura, privilégios, armazenamento de logs, suporte a atualizações e configurações do worker. Uma verificação bem-sucedida inclui contagens positivas de trilhas e da lista de permissões, em vez de apenas confirmar que os arquivos existem.

Trilhas

Uma trilha é um indicador — um domínio, URL, endereço IP, par IP:porta, User-Agent, impressão digital JA3/JA4 ou hash de certificado — juntamente com o que significa e de onde veio. O atualizador mescla quatro fontes em TRAILS_FILE, nesta ordem:

fontede onde vem
Feedsfeeds/*.py, buscados diretamente pela sua implantação de cada publicador
PersonalizadasCUSTOM_TRAILS_DIR e CUSTOM_TRAILS_URL, seus próprios indicadores
Estáticaso conjunto montado de stamparm/trails, buscado de STATIC_TRAILS_URL
Listas do mecanismodata/mass_scanner*.txt, incluídas aqui porque mudam raramente

As trilhas estáticas vivem em seu próprio repositório. O conteúdo de detecção muda dezenas de vezes por dia; o mecanismo não muda, e mantê-los juntos significava que atualizar a detecção exigia puxar código e tornava o histórico deste repositório inutilizável. STATIC_TRAILS_URL aponta para o conjunto publicado mais recente:```text STATIC_TRAILS_URL https://github.com/stamparm/trails/releases/latest/download/trails.csv.gz

Aponte para um lançamento específico `content-YYYYMMDD-HHMM` para fixar uma versão, de modo que uma publicação ruim
não se torne imediatamente global. O conjunto é armazenado em cache ao lado de `TRAILS_FILE`, que é o que torna possível
uma reconstrução offline ou em ambiente isolado; o `sha256` publicado é verificado antes do download, de modo que uma implantação
que atualiza com mais frequência do que o conteúdo muda transfere 65 bytes em vez de 11 MB, e uma
carga útil que não corresponde ao seu digest é recusada em favor do cache.

`update_trails()` publica um novo `TRAILS_FILE` atomicamente e somente após uma compilação bem-sucedida. Feeds
que não retornam nada são relatados pelo nome, de modo que uma implantação não depende silenciosamente de uma fonte que
se aposentou silenciosamente.

Adicione seus próprios indicadores em `CUSTOM_TRAILS_DIR`, e qualquer coisa que nunca deva gerar um evento em
`USER_WHITELIST`. Mantenha ambos fora do diretório de instalação para que uma atualização não possa sobrescrevê-los.

Contribuições estáticas de trails vão para [stamparm/trails](https://github.com/stamparm/trails); novos feeds
vão aqui. De qualquer forma, um indicador precisa de uma classificação e de uma fonte que alguém possa verificar — veja
[Contributing](#contributing).

## Events e API

Maltrail registra um evento separado por espaços em branco por detecção, usando aspas CSV quando um valor
contém espaços:```text
"<time>" <sensor> <src_ip> <src_port> <dst_ip> <dst_port> <proto> <type> <trail> "<info>" <reference>

O campo type identifica o que correspondeu, incluindo DNS, IP, IPORT, URL, PATH, HTTP, UA, PORT, CERT, JA3 e JA4. O campo info contém a classificação do rastro, e reference identifica a lista estática, o feed, a fonte personalizada ou a heurística que o produziu. Os tipos JA3/JA4 disparam em impressões digitais TLS do cliente: a pilha TLS de um implante sobrevive a toda rotação de endereço e domínio, então seu hash de hello continua correspondendo depois que tudo o mais foi queimado (publicado pelo feed JA3 do SSLBL da abuse.ch).

Consulta de indicadores

Use /check para consultar um domínio, endereço IP ou URL:```bash curl 'http://127.0.0.1:8338/check?q=www.sub.evil.example'

Aqui está a tradução do conteúdo:

📊 Estatísticas do Projeto

Se você achar esta ferramenta útil, considere dar uma ⭐ no repositório para mostrar seu apoio! Isso ajuda o projeto a crescer e alcançar mais pessoas.

📈 Tendências de Uso

O projeto tem visto um crescimento constante em adoção desde seu lançamento inicial. Atualizações regulares garantem compatibilidade com as versões mais recentes das ferramentas e frameworks de segurança.

🤝 Contribuições

Contribuições são bem-vindas! Se você tiver ideias para novos recursos, encontrar bugs ou quiser melhorar a documentação, sinta-se à vontade para abrir uma issue ou enviar um pull request.

📄 Licença

Este projeto é licenciado sob a MIT License - veja o arquivo LICENSE para mais detalhes.

🙏 Agradecimentos

  • A todos os contribuidores que dedicaram seu tempo e esforço para melhorar esta ferramenta
  • À comunidade de segurança cibernética por seu feedback e suporte contínuos
  • Aos mantenedores de projetos de código aberto que tornaram este trabalho possível

Feito com ❤️ para a comunidade de segurança cibernética

{
  "query": "www.sub.evil.example",
  "found": true,
  "trail": "evil.example",
  "info": "asyncrat (malware)",
  "reference": "(static)",
  "confidence": 100
}
```
O campo `confidence` (0-100, ou `null` quando indisponível) indica o quão fortemente as fontes respaldam a
listagem: 40 para um único feed, +15 por feed adicional que concorde de forma independente até 100, e nota
máxima para entradas personalizadas e estáticas do próprio operador. Ele é calculado no momento da atualização
do trail a partir da concordância dos feeds em um sidecar `trails.confidence` ao lado de `trails.csv`; um
servidor que puxe trails de um `UPDATE_SERVER` não tem proveniência para pontuar e reporta `null`. Use-o para
priorizar a triagem — uma listagem de feed único em 40 merece uma segunda olhada antes de ganhar uma regra de
firewall.

Uma consulta de subdomínio pode corresponder ao seu domínio pai listado. Consultas de URL verificam
`host/path` antes de verificar apenas o host. O servidor lê o banco de dados de trails mapeado em memória e
observa atualizações de trails sem reinicialização.

Trails públicos estáticos e de feeds estão disponíveis sem autenticação, de forma consistente com o endpoint
`/trails` usado por sensores remotos. Trails personalizados exigem uma sessão autorizada; uma consulta não
autorizada apenas de personalizados é reportada como um erro. Os dados de eventos permanecem autenticados.

## Operações

### Monitoramento

Use `maltrail-sensor -T` como um gate de implantação e configuração. A unit systemd fornecida o executa
como `ExecStartPre`.

Para confirmar que a detecção em si funciona — não apenas que os processos iniciam — execute:```bash
python3 server.py --detect-test
```
Ele reproduz um pcap elaborado de tráfego malicioso emulado (correspondências de trail em uma consulta DNS, um IP, um
`IP:porta`, um caminho de URL e um cabeçalho `Host`, além das heurísticas de injeção SQL, traversal, RCE, XSS, sonda de proxy,
sinkhole, `Host` ausente e varredura de porta/web/infecção) através do sensor instalado
e verifica que cada detecção esperada é acionada. Não requer root, interface ou conjunto de trails
próprio. Uma instalação saudável imprime `20/20 detecção(ões) acionada(s)`.

Quando `STATS_ADDRESS` estiver configurado, monitore pelo menos estas métricas do Prometheus:

| Métrica | Significado operacional |
| --- | --- |
| `maltrail_up == 0` | Nenhum worker de captura está em execução |
| `maltrail_capture_dropped_total` aumentando | O anel de captura está descartando pacotes |
| `maltrail_local_log_errors_total` aumentando | Eventos foram produzidos, mas não puderam ser gravados localmente |
| `maltrail_remote_log_errors_total` aumentando | Eventos não puderam ser entregues a um destino remoto; com `DISABLE_LOCAL_LOG_STORAGE` eles são perdidos |
| `maltrail_trail_generation` não avançando | O conjunto de trails ativo não está sendo atualizado |
| `maltrail_log_dir_free_bytes` | Capacidade restante para armazenamento local de eventos |
| `maltrail_state_saturations_total` aumentando | Um limite de estado de heurística foi atingido |
| `maltrail_throttle_evictions_total` aumentando | A tabela de limitação de eventos está no seu limite, então os eventos são agregados antes do configurado |

A saturação de estado afeta a heurística correspondente; a correspondência exata de trails permanece ativa.

Envie `SIGHUP` ou use `systemctl reload maltrail-sensor` para solicitar uma recarga de trails. Arquivos de trail
atualizados por outro processo são detectados automaticamente e publicados para os workers sem reiniciar
o sensor.

O armazenamento condensado de observáveis (`USE_CONDENSED_STORAGE`, `meta.sqlite`) suporta as visualizações de
novidade e retro-hunt do servidor. O índice auxiliar do log de eventos por dia (`USE_EVENT_INDEX`,
`LOG_DIR/index/*.sqlite`, aproximadamente o dobro do tamanho do log em disco) é o que torna `/counts` exato e
`/hunt` rápido; ele é mantido incrementalmente a partir dos próprios logs e pode ser reconstruído com
`server.py --rebuild-index`. A compatibilidade com o sensor descontinuado está documentada em
[`sensor/docs/COMPATIBILITY.md`](https://github.com/stamparm/maltrail/blob/master/sensor/docs/COMPATIBILITY.md).

### Retenção de eventos

O Maltrail não rotaciona nem exclui logs de eventos. Os operadores são responsáveis por definir retenção,
arquivamento e exclusão de acordo com os requisitos de armazenamento e a política organizacional.

Práticas recomendadas:

- Envie a cópia durável de eventos para um servidor Maltrail remoto ou SIEM com `LOG_SERVER`,
  `SYSLOG_SERVER` ou `LOGSTASH_SERVER`.
- Alerte sobre `maltrail_log_dir_free_bytes` com margem suficiente para a taxa de eventos esperada.
- Rotacione, arquive ou remova logs diários locais usando ferramentas externas.
- Mantenha os arquivos necessários para a interface de relatórios descomprimidos em `LOG_DIR`; arquive arquivos comprimidos
  em outro lugar.

Quando o sistema de arquivos de logs está cheio, o sensor não consegue anexar eventos. Os logs de eventos também podem conter endereços IP
e domínios que são regulamentados como dados pessoais em algumas jurisdições; a política de retenção
deve considerar os requisitos aplicáveis.

## Documentação

| Documento | Conteúdo |
| --- | --- |
| [`sensor/docs/INSTALL.md`](https://github.com/stamparm/maltrail/blob/master/sensor/docs/INSTALL.md) | Instalação, privilégios, configuração e solução de problemas |
| [`sensor/docs/ARCHITECTURE.md`](https://github.com/stamparm/maltrail/blob/master/sensor/docs/ARCHITECTURE.md) | Internals do sensor e fluxo de dados |
| [`sensor/docs/COMPATIBILITY.md`](https://github.com/stamparm/maltrail/blob/master/sensor/docs/COMPATIBILITY.md) | Diferenças deliberadas em relação ao sensor Python descontinuado |
| [`sensor/docs/REPORT.md`](https://github.com/stamparm/maltrail/blob/master/sensor/docs/REPORT.md) | Medições, perfis e resultados de testes |
| [`sensor/docs/ROADMAP.md`](https://github.com/stamparm/maltrail/blob/master/sensor/docs/ROADMAP.md) | Trabalho aberto do sensor |
| [`SekuriPy Labs`](https://www.sekuripy.hr/labs/maltrail/) | Notas de engenharia, benchmarks e artigos técnicos |

## Contribuindo

Adições de trails, manutenção de feeds, relatórios de bugs, documentação e melhorias no sensor são bem-vindos.
Envios de trails devem incluir uma fonte confiável e devem usar a classificação mais restrita
apropriada.

Execute as verificações relevantes antes de enviar código. O gate completo do sensor é:```bash
bash sensor/tools/check.sh
```
It runs formatting, Clippy with warnings denied, and the debug and release test suites. Run the
Python server suite with:```bash
bash tests/run.sh python3
```
## Projeto

### Licença

O Maltrail é distribuído sob a Licença MIT. Consulte [`LICENSE`](https://github.com/stamparm/maltrail/blob/master/LICENSE).

### Mantenedores

- Miroslav Stampar ([@stamparm](https://github.com/stamparm))
- Mikhail Kasimov ([@MikhailKasimov](https://github.com/MikhailKasimov))

### Patrocinadores

- [Sansec](https://sansec.io/) (2024–2025)
- [Sansec](https://sansec.io/) (2020–2021)

### Apresentações e publicações

- 47.ª Reunião do TF-CSIRT, Praga, 2016
  ([slides](https://web.archive.org/web/20161109135211/https://www.terena.org/activities/tf-csirt/meeting47/M.Stampar-Maltrail.pdf))
- _Detect attacks on your network with Maltrail_, Linux Magazine, 2022
  ([artigo](https://www.linux-magazine.com/Issues/2022/258/Maltrail))
- _Best Cyber Threat Intelligence Feeds_, Silent Push, 2022
  ([análise](https://www.silentpush.com/blog/best-cyber-threat-intelligence-feeds))
- _Research on Network Malicious Traffic Detection System Based on Maltrail_, Nanotechnology
  Perceptions, 2024
  ([artigo](https://nano-ntp.com/index.php/nano/article/view/1915/1497))

### Lista negra derivada

Uma lista apenas de domínios derivada dos rastros estáticos de `malware/` é publicada em
[`maltrail-malware-domains.txt`](https://raw.githubusercontent.com/stamparm/aux/master/maltrail-malware-domains.txt).
Ela pode ser usada como entrada para sistemas de filtragem de DNS, mas os operadores devem revisá-la e testá-la antes de
ativar o bloqueio. Listas de inteligência de ameaças podem conter falsos positivos ou indicadores que não são
apropriados para todos os ambientes.

### Integrações de terceiros

- [Porta FreeBSD](https://www.freshports.org/security/maltrail)
- [Plugin de Gateway OPNsense](https://github.com/opnsense/plugins/pull/1257)
- [Projeto D4](https://www.d4-project.org/2019/09/25/maltrail-integration.html)
- [BlackArch Linux](https://github.com/BlackArch/blackarch/blob/master/packages/maltrail/PKGBUILD)
- [Validin](https://x.com/ValidinLLC/status/1719666086390517762)
- [Complemento Maltrail para Splunk](https://splunkbase.splunk.com/app/7211)
- [Decodificador e regras Maltrail para Wazuh](https://github.com/MikhailKasimov/maltrail-wazuh-decoder-and-rules)
- [GScan](https://github.com/grayddq/GScan) (apenas rastros)
- [MalwareWorld](https://www.malwareworld.com/) (apenas rastros)
- [Lista de bloqueio de domínios oisd](https://oisd.nl/?p=inc) (apenas rastros)
- [NextDNS](https://github.com/nextdns/metadata/blob/e0c9c7e908f5d10823b517ad230df214a7251b13/security/threat-intelligence-feeds.json) (apenas rastros)
- [NoTracking](https://github.com/notracking/hosts-blocklists/blob/master/SOURCES.md) (apenas rastros)
- [OWASP Mobile Audit](https://github.com/mpast/mobileAudit#environment-variables) (apenas rastros)
- [Mobile Security Framework MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF/commit/12b07370674238fa4281fc7989b34decc2e08876) (apenas rastros)
- [pfBlockerNG-devel](https://github.com/pfsense/FreeBSD-ports/blob/devel/net/pfSense-pkg-pfBlockerNG-devel/files/usr/local/www/pfblockerng/pfblockerng_feeds.json) (apenas rastros)
- [Sansec eComscan](https://sansec.io/kb/about-ecomscan/ecomscan-license) (apenas rastros)
- [Palo Alto Networks Cortex XSOAR](https://xsoar.pan.dev/docs/reference/integrations/github-maltrail-feed) (conector de rastros)

### Agradecimentos

- Thomas Kristner
- Eduardo Arcusa Les
- James Lay
- Ladislav Baco (@laciKE)
- John Kristoff (@jtkdpu)
- Michael M&uuml;nz (@mimugmail)
- David Brush
- @Godwottery
- Chris Wild (@briskets)
- Keith Irwin (@ki9us)
- Simon Szustkowski (@simonszu)

Categorias