Automated Router Mikrotik AddressList (ARMA) — это конвейерная система на Python для интеллектуального управления ACL в сетях на базе MikroTik (RouterOS 6). Система автоматически собирает данные из DNS, BGP-реестров и сетевых соединений, анализирует, фильтрует и обогащает их, после чего генерирует и разворачивает готовые конфигурации (Address Lists) на целевых устройствах. Система построена вокруг центрального оркестратора, координирующего выполнение независимых модулей.
Important
Для работы модуля (dns_fwd) анализа DNS-запросов требуется предустановленный и настроенный dnscrypt-proxy, выступающий в роли DNS-резолвера в сети.
Warning
Модули (sync_master, sync_slave) синхронизации данных на устройствах MikroTik разрабатывались исключительно под 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
- Режимы работы: только домены, только IP, только ASN, или комбинированные режимы;
- Автоматическое обновление списков на устройстве;
- Поддержка IPv4/IPv6;
- Обработка кастомных списков (составленные вручную или через дополнительный функционал системы)
- Централизованное управление
- Оркестрация через общий скрипт (запуск всего или части проекта, уведомления в Telegram, Email об успешном/провальном запуске);
- Ротация логов, резервное копирование, конфигурация через YAML и JSON5;
- Анализ активных сетевых соединений (Connections)
- Позволяет извлекать IP-адреса непосредственно с устройств MikroTik из таблицы активных соединений.
- Базовая фильтрация (MikroTik) по исходным и целевым адресам, а также, по connection-mark.
- Интеграция с данными системы - возможность фильтрации извлечённых IP-адресов на основе полученных YAML/JSON данных системы ARMA (например, для исключения уже известных адресов, а также, на вхождение адреса в определённую AS).
- Анализ и обогащение IP-адресов (Geo-ASN)
- Объединение IP-адресов из нескольких источников (TXT, JSON).
- Исключение адресов, уже присутствующих в DNS-записях системы.
- Сопоставление оставшихся IP с автономными системами (ASN) и их префиксами с использованием MMDB-базы данных IPLocate.
- Парсер доменов верхнего уровня
- Автоматический сбор и поддержка в актуальном состоянии полного списка TLD с официального реестра IANA.
- Преобразование сырых данных в структурированный формат для использования другими модулями системы.
- Фильтрация и инкрементальное обновление DNS-данных
- Фильтрация и преобразование YAML-данных от DNS-анализатора.
- Поддержка накопления и обновления результатов между запусками системы без потери данных.
- Автоматическое резервное копирование MikroTik
- Подключение к списку устройств по SSH и выполнение команды экспорта конфигурации.
- Сохранение резервных копий (RSC-файлов) только на локальном сервере управления, без использования файловой памяти роутеров.
- Интеграция в общий цикл работы системы для регулярного создания бэкапов.
- Открытая модульная архитектура
- Система построена вокруг скрипта-оркестратора, который позволяет интегрировать собственные 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!🤝