
maltrail v3.0
Система обнаружения вредоносного трафика в реальном времени, использующая публичные чёрные списки, статические следы вредоносного ПО и эвристический анализ для выявления угроз в DNS-, HTTP- и IP-трафике.

Maltrail
Maltrail — это система обнаружения сетевого трафика, которая выявляет взаимодействие с известной вредоносной инфраструктурой и сообщает об отдельных аномалиях трафика. Она сопоставляет домены, URL-адреса, IP-адреса, пары IP:port и значения User-Agent, наблюдаемые в сети, с набором индикаторов, называемых trails.
Обнаружение фиксируется как отдельное событие, содержащее источник, назначение, протокол, совпавший trail, классификацию и источник 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 предназначен для сетевого мониторинга на основе индикаторов. Его эвристические обнаружения дополняют
сопоставление с трейлами, но не заменяют телеметрию конечных точек или систему предотвращения вторжений
общего назначения.
## Возможности
- Полная сборка трейлов, объединяющая более 3 000 встроенных статических файлов, 42 интеграции с публичными фидами
и дополнительные трейлы, предоставляемые оператором.
- Многопоточный сенсор на Rust с использованием libpcap и опциональными воркерами захвата Linux `PACKET_FANOUT`.
- Сервер на Python, обеспечивающий интерфейс отчётности, приём событий и HTTP API.
- Пользовательские трейлы и белые списки в виде простого текста, которые можно проверять и контролировать версии.
- Эвристики для сканирования, исчерпания DNS, DGA-подобных запросов, подозрительных загрузок, прокси-зондирований,
подозрительных значений User-Agent и связанной сетевой активности.
- Локальное журналирование событий, удалённое журналирование Maltrail, CEF через syslog и вывод Logstash JSON.
- Проверка развёртывания с помощью `maltrail-sensor -T` и опциональные метрики Prometheus.
## Содержание
- [Архитектура](#architecture)
- [Интерфейс отчётности](#reporting-interface)
- [Производительность](#performance)
- [Установка](#installation)
- [Установщик](#installer)
- [Сборка из исходного кода](#building-from-source)
- [Systemd](#systemd)
- [Docker](#docker)
- [Конфигурация](#configuration)
- [Трейлы](#trails)
- [События и API](#events-and-api)
- [Эксплуатация](#operations)
- [Мониторинг](#monitoring)
- [Хранение событий](#event-retention)
- [Документация](#documentation)
- [Участие в разработке](#contributing)
- [Проект](#project)
- [Лицензия](#license)
- [Сопровождающие](#maintainers)
- [Спонсоры](#sponsors)
- [Презентации и публикации](#presentations-and-publications)
- [Производный чёрный список](#derived-blacklist)
- [Сторонние интеграции](#third-party-integrations)
- [Благодарности](#acknowledgements)
## Архитектура
Maltrail состоит из двух независимых процессов, которые могут работать на одном хосте или на разных хостах:```text
┌──────────┐ events (UDP or file) ┌──────────┐
│ sensor │ ───────────────────────► │ server │ ◄── browser
└──────────┘ └──────────┘
Rust Python
libpcap + PACKET_FANOUT reporting UI + API
trail matching + heuristics
Сенсор захватывает трафик, выполняет сопоставление по следам и эвристический анализ, а затем формирует события.
Он может записывать события локально (LOG_DIR), отправлять их на удалённый сервер Maltrail (LOG_SERVER) или делать
и то, и другое. Он также может передавать CEF через syslog (SYSLOG_SERVER) и JSON в Logstash
(LOGSTASH_SERVER).
Сервер принимает и хранит удалённые события, обслуживает локально доступные журналы событий и предоставляет веб-интерфейс и API.
Интерфейс отчётности
Maltrail включает браузерный интерфейс отчётности для исследования обнаруженного трафика, с живыми обновлениями, поиском по полям, ретроспективным поиском, географическими представлениями, триажем, сохранёнными представлениями и экспортом.

Интерфейс обслуживается server.py по адресу HTTP_ADDRESS:HTTP_PORT. Это чистый JavaScript с
единственной сторонней зависимостью времени выполнения (PapaParse, для разбора CSV) и без этапа сборки. Одновременно
просматривается один день, выбираемый с помощью средства выбора даты, которое также служит сеткой плотности событий по
доступным ежедневным журналам. События передаются потоком из /events и агрегируются в браузере в
угрозы — одна строка на каждую отдельную пару (source, trail) — отображаемые в сортируемой сетке с панелью деталей.
| Возможность | Примечания |
|---|---|
| Живой режим | Добавленные события передаются через Server-Sent Events (/live) и объединяются с текущим представлением. При недоступности SSE происходит откат к опросу диапазонов байтов ежедневного журнала, либо для сессий, которые поток не может обслужить. Новые угрозы высокой важности могут вызывать уведомление на рабочем столе и звуковое оповещение; оба можно отключить |
| Поиск | Токены с областью действия по полям (src: dst: port: proto: type: trail: info: family: tag: uid: sev: dir: status:; family:interlock подтягивает interlock-1/-2, осколки, на которые разбивается один дамп фида) в сочетании с пробелом как AND, - для исключения, * как подстановочные знаки, CIDR (src:10.0.0.0/8), а также числовые диапазоны и сравнения (port:>1024, count:>=100). Активные фильтры отображаются в виде удаляемых чипов |
| Ретроспективный поиск | Ищет во всех сохраняемых ежедневных журналах по одному индикатору (/hunt), а не только по просматриваемому дню. Ограничен лимитом дней, бюджетом реального времени и пределом выборки; день, который бюджет прервал досрочно, сообщается отдельно от завершённых дней, а не засчитывается как завершённый итог. Побочный индекс по дням (LOG_DIR/index/, USE_EVENT_INDEX) позволяет проходу пропускать каждую несовпадающую строку и делает /counts точным |
| Карта мира | Плотность событий по странам для выбранного дня (/geo), с размещением внешней конечной точки каждого события. События, которые не могут быть отнесены к внешнему адресу, сообщаются как неотображённые, а не угадываются. Установите HOME_LAT / HOME_LON, чтобы рисовать дуги происхождения |
| Триаж | Статус каждой угрозы (новая / в расследовании / решена / ложное срабатывание), заметки в свободной форме, теги и скрытие. Правила белого списка и точки опоры OSINT доступны из контекстного меню строки |
| Сохранённые представления | Именованные предустановки фильтров |
| Экспорт | Текущее отфильтрованное представление в виде CSV, JSON или обезвреженных индикаторов |
| Внешний вид | Тёмная и светлая темы, а также дискретные шаги размера текста |
Состояние триажа, сохранённые представления, теги и настройки внешнего вида хранятся в браузере
(localStorage), а не на сервере: они привязаны к браузеру и источнику и не разделяются
между аналитиками.
Сессии, ограниченные сетевым фильтром, видят только события из своих собственных сетей, и это ограничение применяется к конечным точкам подсчётов, карты и чёрного списка, а также к списку событий.
Обогащение данными о странах и ASN для отдельных адресов запрашивается на stat.ripe.net
сервером, который кэширует результаты и передаёт их интерфейсу из своей собственной конечной точки /ripe;
браузер не общается ни с чем, кроме Maltrail. Установите DISABLE_RIPE_LOOKUPS, чтобы полностью отключить
исходящие запросы. Без них — или на хосте без доступа к интернету — флаги берутся
из локальной таблицы RIR, а всё остальное в интерфейсе работает офлайн.