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

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:port 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, o trail correspondente, a classificação e a origem do 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 projetado para monitoramento de rede baseado em indicadores. Suas detecções heurísticas complementam
a correspondência de trails, mas não substituem a telemetria de endpoint ou um sistema de prevenção de intrusão
de uso geral.
## Recursos
- Uma construção completa de trails combinando mais de 3.000 arquivos estáticos incluídos, 42 integrações de feeds públicos,
e trails opcionais fornecidos pelo operador.
- Um sensor Rust multithread usando libpcap, com workers de captura Linux `PACKET_FANOUT` opcionais.
- Um servidor Python fornecendo a interface de relatórios, ingestão de eventos e API HTTP.
- Trails personalizados em texto simples e whitelists que podem ser revisados e versionados.
- Heurísticas para varredura, esgotamento de DNS, consultas do tipo DGA, downloads suspeitos, sondagens de proxy,
valores de User-Agent suspeitos e atividades de rede relacionadas.
- Registro de eventos local, registro remoto do Maltrail, CEF sobre syslog e saída Logstash JSON.
- Validação de implantação com `maltrail-sensor -T` e métricas Prometheus opcionais.
## Conteúdo
- [Arquitetura](#architecture)
- [Interface de relatórios](#reporting-interface)
- [Desempenho](#performance)
- [Instalação](#installation)
- [Instalador](#installer)
- [Compilação a partir do código-fonte](#building-from-source)
- [Systemd](#systemd)
- [Docker](#docker)
- [Configuração](#configuration)
- [Trails](#trails)
- [Eventos e API](#events-and-api)
- [Operações](#operations)
- [Monitoramento](#monitoring)
- [Retenção de eventos](#event-retention)
- [Documentação](#documentation)
- [Contribuindo](#contributing)
- [Projeto](#project)
- [Licença](#license)
- [Mantenedores](#maintainers)
- [Patrocinadores](#sponsors)
- [Apresentações e publicações](#presentations-and-publications)
- [Blacklist derivada](#derived-blacklist)
- [Integrações de terceiros](#third-party-integrations)
- [Agradecimentos](#acknowledgements)
## 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 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
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 logs de eventos disponíveis localmente e fornece a interface web e a API.
O Maltrail inclui uma interface de relatórios baseada em navegador para explorar o tráfego detectado, com atualizações ao vivo, busca por campo, caça retroativa, visualizações geográficas, triagem, visualizações salvas e exportação.

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 (source, trail) distinto — exibidas em uma grade classificável com um painel de detalhes.
| Recurso | Notas |
|---|---|
| Modo ao vivo | Eventos anexados 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 o SSE não está disponível, ou para sessões que o stream não consegue atender. Novas ameaças de alta severidade podem acionar uma notificação de desktop e um alerta sonoro; ambos podem ser silenciados |
| Busca | Tokens 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 em que um dump de feed chega dividido) combinados com espaço como AND, - para excluir, curingas *, CIDR (src:10.0.0.0/8), e intervalos numéricos e comparações (port:>1024, count:>=100). Filtros ativos aparecem como chips removíveis |
| Caça retroativa | Pesquisa em todos os logs diários retidos por um indicador (/hunt), não apenas no dia em visualização. Limitada por um limite de dias, um orçamento de tempo real e um limite de amostras; um dia que o orçamento interrompeu é relatado separadamente dos dias concluídos em vez de contado como um total finalizado. Um índice sidecar por dia (LOG_DIR/index/, USE_EVENT_INDEX) permite que a varredura pule todas as linhas não correspondentes e torna /counts exato |
| Mapa mundial | Densidade 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 |
| Triagem | Status por ameaça (nova / em investigação / resolvida / falso positivo), notas de 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 salvas | Presets de filtro nomeados |
| Exportação | A visualização filtrada atual como CSV, JSON ou indicadores defanged |
| Aparência | Temas escuro e claro, 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 os resultados em cache e os serve à interface a partir de seu próprio endpoint /ripe;
o navegador não se comunica 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.