Sistema de detección de tráfico malicioso en tiempo real que utiliza listas negras públicas, trazas estáticas de malware y análisis heurístico para identificar amenazas en el tráfico DNS, HTTP e IP.

Maltrail es un sistema de detección de tráfico de red que identifica la comunicación con infraestructura maliciosa conocida y reporta anomalías de tráfico seleccionadas. Compara dominios, URLs, direcciones IP, pares IP:port y valores de User-Agent observados en la red contra un conjunto de indicadores llamados trails.
Una detección se registra como un único evento que contiene el origen, el destino, el protocolo, el trail coincidente, la clasificación y la fuente del 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)
Maltrail está diseñado para la monitorización de red basada en indicadores. Sus detecciones heurísticas complementan
la coincidencia de trails, pero no sustituyen a la telemetría de endpoint ni a un sistema de prevención de intrusiones
de propósito general.
## Características
- Una compilación completa de trails que combina más de 3.000 archivos estáticos incluidos, 42 integraciones de feeds públicos
y trails opcionales proporcionados por el operador.
- Un sensor multihilo en Rust que utiliza libpcap, con workers de captura opcionales de Linux `PACKET_FANOUT`.
- Un servidor en Python que proporciona la interfaz de informes, la ingesta de eventos y la API HTTP.
- Trails personalizados y listas blancas en texto plano que pueden revisarse y controlarse por versiones.
- Heurísticas para escaneos, agotamiento de DNS, búsquedas similares a DGA, descargas sospechosas, sondeos de proxy,
valores de User-Agent sospechosos y actividad de red relacionada.
- Registro local de eventos, registro remoto de Maltrail, CEF sobre syslog y salida JSON de Logstash.
- Validación del despliegue con `maltrail-sensor -T` y métricas opcionales de Prometheus.
## Contenido
- [Arquitectura](#architecture)
- [Interfaz de informes](#reporting-interface)
- [Rendimiento](#performance)
- [Instalación](#installation)
- [Instalador](#installer)
- [Compilación desde el código fuente](#building-from-source)
- [Systemd](#systemd)
- [Docker](#docker)
- [Configuración](#configuration)
- [Trails](#trails)
- [Eventos y API](#events-and-api)
- [Operaciones](#operations)
- [Monitorización](#monitoring)
- [Retención de eventos](#event-retention)
- [Documentación](#documentation)
- [Contribuir](#contributing)
- [Proyecto](#project)
- [Licencia](#license)
- [Mantenedores](#maintainers)
- [Patrocinadores](#sponsors)
- [Presentaciones y publicaciones](#presentations-and-publications)
- [Lista negra derivada](#derived-blacklist)
- [Integraciones de terceros](#third-party-integrations)
- [Agradecimientos](#acknowledgements)
## Arquitectura
Maltrail consta de dos procesos independientes que pueden ejecutarse en el mismo host o en hosts separados:```text
┌──────────┐ events (UDP or file) ┌──────────┐
│ sensor │ ───────────────────────► │ server │ ◄── browser
└──────────┘ └──────────┘
Rust Python
libpcap + PACKET_FANOUT reporting UI + API
trail matching + heuristics
El sensor captura el tráfico, realiza la coincidencia de rastros y el análisis heurístico, y produce eventos.
Puede escribir eventos localmente (LOG_DIR), enviarlos a un servidor Maltrail remoto (LOG_SERVER), o hacer
ambas cosas. También puede emitir CEF sobre syslog (SYSLOG_SERVER) y JSON a Logstash
(LOGSTASH_SERVER).
El servidor recibe y almacena eventos remotos, sirve registros de eventos disponibles localmente, y proporciona la interfaz web y la API.
Maltrail incluye una interfaz de informes basada en navegador para explorar el tráfico detectado, con actualizaciones en vivo, búsqueda por campos, búsqueda retrospectiva, vistas geográficas, triaje, vistas guardadas y exportación.

La interfaz es servida por server.py en HTTP_ADDRESS:HTTP_PORT. Es JavaScript puro con una
única dependencia de terceros en tiempo de ejecución (PapaParse, para el análisis de CSV) y sin paso de compilación. Se
visualiza un día a la vez, seleccionado con un selector de fecha que también funciona como una cuadrícula de densidad de eventos sobre los
registros diarios disponibles. Los eventos se transmiten desde /events y se agregan en el navegador en
amenazas — una fila por cada (source, trail) distinto — mostradas en una cuadrícula ordenable con un panel de detalles.
| Característica | Notas |
|---|---|
| Modo en vivo | Los eventos añadidos se envían a través de Server-Sent Events (/live) y se fusionan en la vista actual. Recurre al sondeo de rangos de bytes del registro diario cuando SSE no está disponible, o para sesiones que el flujo no puede servir. Las nuevas amenazas de alta severidad pueden generar una notificación de escritorio y una alerta sonora; ambas se pueden silenciar |
| Búsqueda | Tokens con ámbito de campo (src: dst: port: proto: type: trail: info: family: tag: uid: sev: dir: status:; family:interlock incluye interlock-1/-2, los fragmentos en los que llega dividido un volcado de feed) combinados con espacio como AND, - para excluir, comodines *, CIDR (src:10.0.0.0/8), y rangos numéricos y comparaciones (port:>1024, count:>=100). Los filtros activos aparecen como chips eliminables |
| Búsqueda retrospectiva | Busca en todos los registros diarios retenidos un indicador (/hunt), no solo en el día en vista. Limitada por un límite de días, un presupuesto de tiempo real y un tope de muestras; un día que el presupuesto interrumpió se informa por separado de los días completados en lugar de contarse como un total finalizado. Un índice sidecar por día (LOG_DIR/index/, USE_EVENT_INDEX) permite que el barrido omita cada línea que no coincida y hace que /counts sea exacto |
| Mapa mundial | Densidad de eventos por país para el día seleccionado (/geo), situando el endpoint externo de cada evento. Los eventos que no se pueden atribuir a una dirección externa se informan como no mapeados en lugar de adivinarse. Establezca HOME_LAT / HOME_LON para dibujar arcos de origen |
| Triaje | Estado por amenaza (nueva / en investigación / resuelta / falso positivo), notas de texto libre, etiquetas y ocultación. Las reglas de lista blanca y los pivotes OSINT están disponibles desde el menú contextual de la fila |
| Vistas guardadas | Presets de filtros con nombre |
| Exportación | La vista filtrada actual como CSV, JSON o indicadores defanged |
| Apariencia | Temas oscuro y claro, y pasos discretos de tamaño de texto |
El estado de triaje, las vistas guardadas, las etiquetas y la configuración de apariencia se almacenan en el navegador
(localStorage), no en el servidor: son por navegador y por origen, y no se comparten
entre analistas.
Las sesiones restringidas con un filtro de red solo ven eventos de sus propias redes, y esa restricción se aplica a los endpoints de recuentos, mapa y lista negra, así como a la lista de eventos.