Skip to content

FatNik329/MikroTik-ARMA

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

119 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MikroTik-ARMA

License Release Wiki badge Language RouterOS DNScrypt-proxy RouterAPI RIPEstat bgp.tools IPLocate IPinfo IANA ExaBGP AI Russia

MikroTik-ARMA

Описание

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):

  1. Классический режим - требует предустановленного и настроенного dnscrypt-proxy, выступающего в роли DNS-резолвера в сети.
  2. Режим через коллектор логов (модуль 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 - Установка и требования.

Ключевые возможности

Проект постепенно развивается. На текущий момент его возможности состоят из:

Основной функционал

  1. Анализ DNS-запросов
    • Поддержка wildcard-шаблонов (*.example.com), IDN-доменов (пример.рф, .бел), корневых зон (.com, .net);
    • Кэширование доменов, не прошедших резолвинг (NXDOMAIN, таймауты);
    • Параллельная обработка DNS запросов;
    • Сохранение необработанных данных в структурированном виде (YAML).
  2. Автоматический сбор BGP-префиксов
    • Получение IPv4/IPv6-префиксов для указанных AS (Autonomous Systems) из публичных реестров: RIPE Stat, BGP.tools;
    • Кэширование локальных данных для снижения нагрузки на внешние сервисы API;
    • Сохранение необработанных данных в структурированном виде (JSON).
  3. Генерация конфигураций MikroTik
    • Преобразование "сырых" данных в готовые RSC скрипты для импорта;
    • Поддержка раздельных генераций RSC - для доменов, IP доменов и ASN.
  4. Синхронизация Address Lists (Master & Slave)
    • Режимы работы: только домены, только IP, только ASN, или комбинированные режимы;
    • Автоматическое обновление списков на устройстве;
    • Поддержка IPv4/IPv6;
    • Обработка кастомных списков (составленные вручную или через дополнительный функционал системы)
  5. Централизованное управление
    • Оркестрация через общий скрипт (запуск всего или части проекта, уведомления в Telegram, Email об успешном/провальном запуске);
    • Ротация логов, резервное копирование, конфигурация через YAML и JSON5;

Дополнительные возможности

  1. Анализ активных сетевых соединений (Connections)
    • Позволяет извлекать IP-адреса непосредственно с устройств MikroTik из таблицы активных соединений.
    • Базовая фильтрация (MikroTik) по исходным и целевым адресам, а также, по connection-mark.
    • Интеграция с данными системы - возможность фильтрации извлечённых IP-адресов на основе полученных YAML/JSON данных системы ARMA (например, для исключения уже известных адресов, а также, на вхождение адреса в определённую AS).
  2. Анализ и обогащение IP-адресов (Geo-ASN)
    • Объединение IP-адресов из нескольких источников ARMA (TXT, JSON, YAML).
    • Исключение адресов, уже присутствующих в DNS-записях системы.
    • Сопоставление оставшихся IP с автономными системами (ASN) и их префиксами с использованием MMDB-базы сервисов:
  3. Парсер доменов верхнего уровня
    • Автоматический сбор и поддержка в актуальном состоянии полного списка TLD с официального реестра IANA.
    • Преобразование сырых данных в структурированный формат для использования другими модулями системы.
  4. Фильтрация и инкрементальное обновление DNS-данных
    • Фильтрация и преобразование YAML-данных от DNS-анализатора.
    • Поддержка накопления и обновления результатов между запусками системы без потери данных.
  5. Автоматическое резервное копирование MikroTik
    • Подключение к списку устройств по SSH и выполнение команды экспорта конфигурации.
    • Сохранение резервных копий (RSC-файлов) только на локальном сервере управления, без использования файловой памяти роутеров.
    • Интеграция в общий цикл работы системы для регулярного создания бэкапов.
  6. Динамическое управление BGP-маршрутами
    • Интеграция с ExaBGP - динамический анонс и отзыв маршрутов на основе изменений в исходных данных (TXT-файлы);
    • Интеграция с конвейером данных MikroTik-ARMA - сгенерированные другими модулями системы, обеспечивая сквозную автоматизацию: от анализа данных до изменения маршрутизации;
    • Гибкая настройка - поддержка базовых BGP-атрибутов (communities, AS-path, local-preference) для тонкого управления политиками;
    • Надёжность - Graceful shutdown, кэширование состояния, health-check HTTP сервер для мониторинга.
  7. Гибкий сбор DNS-логов (экспериментально)
    • Модуль-демон для непрерывного сбора DNS-запросов из named pipe;
    • Поддержка плагинов для различных форматов логов (dnscrypt-proxy, dnsmasq);
    • Сохранение в JSONL, автоматическая ротация, очистка устаревших данных.
  8. Открытая модульная архитектура
    • Система построена вокруг скрипта-оркестратора, который позволяет интегрировать собственные Python скрипты, через общий конфигурационный файл;
    • Вы можете расширить функционал. Например, добавить другие внешние источники или дополнительные модули фильтрации для создания сообственных списков под более специфичные задачи.
    • Проект распространяется под лицензией GPLv3, что поощряет модификации и совместное развитие.

В каких целях может применяться

Система не влияет на трафик и не настраивает правила фильтрации напрямую (Firewall Filter/Mangle/RAW и т.д.), а предоставляет структурированные и актуальные данные, которые можно использовать для:

Фильтрация и безопасность

  • Фильтрация трафика - блокировка рекламы, вредоносных IP, серверов с нежелательным контентом.
  • Упреждающая защита - автоматическое пополнение списков угроз (например, на основе динамических списков вредоносных доменов или IP из опасных AS).

Оптимизация трафика

  • Балансировка и маршрутизация - приоритизация или отделение трафика к определённым сервисам (YouTube, VoIP) или CDN.
  • Гео-маршрутизация - применение правил на основе принадлежности IP-адресов к странам (используя данные об AS).

Анализ и мониторинг

  • Составление карты сетевой активности - автоматическое создание списков IP/доменов на основе реальных DNS-запросов и активных соединений.
  • Аудит и отчетность - постоянно актуальные списки для анализа того, какие ресурсы используются в сети.
  • Автоматическое составление списков IP/доменов на основе реальной сетевой активности.

Администрирование инфраструктуры

  • Централизованное управление списками - синхронизация единых политик на одном или нескольких устройствах MikroTik.
  • Автоматизация рутины - исключение ручного копирования IP-адресов и доменов в конфигурации.
  • Резервное копирование - интеграция с процессом автоматического сбора и хранения конфигураций устройств.
  • ...

Wiki

Более подробно ознакомиться с проектом Wiki.


PS. Проект создавался "не программистом" в содружестве с ИИ, но с упором на практичность и эффективность. Если вам близка философия безумной автоматизации и вы готовы мириться с некоторым своеобразием подхода для достижения результата - Welcome to the club!🤝