Automated Router Mikrotik AddressList (ARMA) — это конвейерная система на Python для интеллектуального управления ACL в сетях на базе MikroTik (RouterOS 6). Система автоматически собирает данные из DNS, BGP-реестров и сетевых соединений, анализирует, фильтрует и обогащает их, после чего генерирует и разворачивает готовые конфигурации (Address Lists) на целевых устройствах. Система построена вокруг центрального оркестратора, координирующего выполнение независимых модулей.
MikroTik-ARMA - это картограф и координатор сетевых объектов. Его ключевой принцип - превращать неструктурированные данные (DNS-запросы, IP, ASN) в актуальную и применимую "карту" для управления сетью.
Как правило поддержание актуальных списков для фильтрации и приоритезации трафика требует:
- Ручного сбора IP и доменов из различных источников;
- Распространения обновлений на сетевые устройства;
- Постоянного контроля актуальности данных.
- Независимость от чужих списков: Вы сами определяете критерии (шаблоны доменов, ASN), а система отбирает соответствующие домены и IP-адреса на основе реальной сетевой активности.
- Прозрачность и контроль: Вы всегда видите, на основании каких данных построены те или иные правила (YAML/JSON-отчёты), и можете их проверить или скорректировать.
- Единая точка истины: Все данные для фильтрации и приоритезации управляются из централизованной конфигурации, а не разбросаны по отдельным устройствам.
- Сквозная автоматизация:
- Сбор данных на основании сетевой активности;
- Обогащение данными об ASN;
- Генерация конфигов;
- Синхронизация с устройствами.
Система не даёт 100% гарантии достоверности, так как результат зависит от внешних источников и факторов:
- DNS-серверов, которые резолвят домены;
- MMDB-баз для определения геолокации и принадлежности IP к AS;
- Качества и актуальности исходных списков доменов (шаблоны), ASN;
- Индивидуальных особенностей инфраструктуры (топология, используемые практики администрирования).
Именно поэтому MikroTik-ARMA следует рассматривать как координатора, а не абсолютного арбитра.
Он предоставляет наилучшие из возможных данных на основе заданных критериев, беря на себя тяжелую работу по сбору, анализу и синхронизации сетевых данных, но оставляя конечный контроль над сетевыми политиками и принятие решений администратору.
Проект начинался как инструмент "для себя", но вырос в полноценную систему, потому что проблема, которую он решает - универсальна.
Important
DNS-анализ (опционально)
Система поддерживает два режима сбора DNS-данных (модуль dns_fwd):
- Классический режим - требует предустановленного и настроенного dnscrypt-proxy, выступающего в роли DNS-резолвера в сети.
- Режим через коллектор логов (модуль
dns_logs_collector) - позволяет собирать DNS-запросы из различных источников (dnsmasq,dnscrypt-proxy) через именованные каналы (named pipes). Подробнее см. dns_logs_collector ‐ коллектор логов DNS сервисов.
Warning
Модули (sync_master, sync_slave) синхронизации данных на устройствах MikroTik разрабатывались исключительно под API RoS6 с использованием модуля RouterOS-api. На 7-й версии работоспособность модулей не проверялась.
Note
Остальные зависимости модулей, необходимые для работы проекта содержаться в файле requirements.txt
Полный список системных требований и зависимостей приведён в Wiki - Установка и требования.
Проект постепенно развивается. На текущий момент его возможности состоят из:
- Анализ DNS-запросов
- Поддержка wildcard-шаблонов (*.example.com), IDN-доменов (пример.рф, .бел), корневых зон (.com, .net);
- Кэширование доменов, не прошедших резолвинг (NXDOMAIN, таймауты);
- Параллельная обработка DNS запросов;
- Сохранение необработанных данных в структурированном виде (YAML).
- Автоматический сбор BGP-префиксов
- Генерация конфигураций MikroTik
- Преобразование "сырых" данных в готовые RSC скрипты для импорта;
- Поддержка раздельных генераций RSC - для доменов, IP доменов и ASN.
- Синхронизация Address Lists (Master & Slave)
- Режимы работы: только домены, только IP, только ASN, или комбинированные режимы;
- Автоматическое обновление списков на устройстве;
- Поддержка IPv4/IPv6;
- Обработка кастомных списков (составленные вручную или через дополнительный функционал системы)
- Централизованное управление
- Оркестрация через общий скрипт (запуск всего или части проекта, уведомления в Telegram, Email об успешном/провальном запуске);
- Ротация логов, резервное копирование, конфигурация через YAML и JSON5;
- Анализ активных сетевых соединений (Connections)
- Позволяет извлекать IP-адреса непосредственно с устройств MikroTik из таблицы активных соединений.
- Базовая фильтрация (MikroTik) по исходным и целевым адресам, а также, по connection-mark.
- Интеграция с данными системы - возможность фильтрации извлечённых IP-адресов на основе полученных YAML/JSON данных системы ARMA (например, для исключения уже известных адресов, а также, на вхождение адреса в определённую AS).
- Анализ и обогащение IP-адресов (Geo-ASN)
- Парсер доменов верхнего уровня
- Автоматический сбор и поддержка в актуальном состоянии полного списка TLD с официального реестра IANA.
- Преобразование сырых данных в структурированный формат для использования другими модулями системы.
- Фильтрация и инкрементальное обновление DNS-данных
- Фильтрация и преобразование YAML-данных от DNS-анализатора.
- Поддержка накопления и обновления результатов между запусками системы без потери данных.
- Автоматическое резервное копирование MikroTik
- Подключение к списку устройств по SSH и выполнение команды экспорта конфигурации.
- Сохранение резервных копий (RSC-файлов) только на локальном сервере управления, без использования файловой памяти роутеров.
- Интеграция в общий цикл работы системы для регулярного создания бэкапов.
- Динамическое управление BGP-маршрутами
- Интеграция с ExaBGP - динамический анонс и отзыв маршрутов на основе изменений в исходных данных (TXT-файлы);
- Интеграция с конвейером данных MikroTik-ARMA - сгенерированные другими модулями системы, обеспечивая сквозную автоматизацию: от анализа данных до изменения маршрутизации;
- Гибкая настройка - поддержка базовых BGP-атрибутов (communities, AS-path, local-preference) для тонкого управления политиками;
- Надёжность - Graceful shutdown, кэширование состояния, health-check HTTP сервер для мониторинга.
- Гибкий сбор DNS-логов (экспериментально)
- Модуль-демон для непрерывного сбора DNS-запросов из named pipe;
- Поддержка плагинов для различных форматов логов (dnscrypt-proxy, dnsmasq);
- Сохранение в JSONL, автоматическая ротация, очистка устаревших данных.
- Открытая модульная архитектура
- Система построена вокруг скрипта-оркестратора, который позволяет интегрировать собственные Python скрипты, через общий конфигурационный файл;
- Вы можете расширить функционал. Например, добавить другие внешние источники или дополнительные модули фильтрации для создания сообственных списков под более специфичные задачи.
- Проект распространяется под лицензией GPLv3, что поощряет модификации и совместное развитие.
Система не влияет на трафик и не настраивает правила фильтрации напрямую (Firewall Filter/Mangle/RAW и т.д.), а предоставляет структурированные и актуальные данные, которые можно использовать для:
- Фильтрация трафика - блокировка рекламы, вредоносных IP, серверов с
нежелательным контентом. - Упреждающая защита - автоматическое пополнение списков угроз (например, на основе динамических списков вредоносных доменов или IP из опасных AS).
- Балансировка и маршрутизация - приоритизация или отделение трафика к определённым сервисам (YouTube, VoIP) или CDN.
- Гео-маршрутизация - применение правил на основе принадлежности IP-адресов к странам (используя данные об AS).
- Составление карты сетевой активности - автоматическое создание списков IP/доменов на основе реальных DNS-запросов и активных соединений.
- Аудит и отчетность - постоянно актуальные списки для анализа того, какие ресурсы используются в сети.
- Автоматическое составление списков IP/доменов на основе реальной сетевой активности.
- Централизованное управление списками - синхронизация единых политик на одном или нескольких устройствах MikroTik.
- Автоматизация рутины - исключение ручного копирования IP-адресов и доменов в конфигурации.
- Резервное копирование - интеграция с процессом автоматического сбора и хранения конфигураций устройств.
- ...
Более подробно ознакомиться с проектом Wiki.
PS. Проект создавался "не программистом" в содружестве с ИИ, но с упором на практичность и эффективность. Если вам близка философия безумной автоматизации и вы готовы мириться с некоторым своеобразием подхода для достижения результата - Welcome to the club!🤝