README.md

FiReMQ (Файловая ретрансляция по MQTT

FiReMQ (Файловая ретрансляция по MQTT) — это серверная система для гибкой, автоматической развёртки программ, самораспаковывающихся архивов и выполнения удалённых команд (в cmd или PowerShell от любого пользователя) на большом количестве компьютеров, не связанных одной сетью.

FiReMQ способна эффективно обрабатывать до тысячи агентов одновременно, обеспечивая постоянную обратную связь через MQTT, включая сбор характеристик агентов и контроль выполнения запросов (ссылки на GitFlic и GitHub).

 

FiReAgent — это программное обеспечение, которое устанавливается на клиентские компьютеры для обработки запросов от FiReMQ.

Подробней о FiReAgent на репозитории GitFlic или GitHub.

FiReMQ является кроссплатформенным (для Linux или Windows), рекомендую использовать Linux, так серверная часть работает более производительно и эффективно, чем в Windows, так же хоть и очень редко, но в Windows может встретиться такая проблема, называемая “буферизация в консоли Windows”, при которой работа программы приостановится, пока не нажать в командной строке клавишу Enter для сброса буфера.

 

Не весь задуманный функционал ещё реализован, обновления будут периодически выходить как серверной, так и клиентской части.

Проектом занимаюсь как хобби в свободное от основной работы время.

Все идеи, разработка, реализация и тестирование делаю своими силами и на сколько хватает знаний, стараясь в процессе обучаться чему-то новому, поэтому могу иной раз что-то упустить из виду в процессе отладки или разработки, тем не менее, стараюсь делать упор в безопасность, считаю это важным приоритетом, хоть и приходится иной раз идти на компромиссы.

 

Проект полностью открытый и бесплатный, распространяется по лицензии MIT.


Под капотом:

FiReAgent является консольной программой агентом, работящая в режиме службы, совместно с другими программами-модулями на компьютере клиента, связь с серверной частью FiReMQ производится через защищённый (mTLS + авторизация по логину и паролю) канал MQTT (с уровнем гарантии доставки QoS2), этот лёгкий TCP протокол хорошо оптимизирован для работы в нестабильных или низкокачественных сетях.

Протокол для скачивания клиентами бинарных файлов с сервера выбран QUIC, это современный транспортный протокол, работающий поверх UDP, великолепно показал себя в тестах с разными размерами файлов при кратковременных обрывах связи, или переключении сети, в нём так же реализовал докачку файлов при кратковременных разрывах интернета, загрузка всегда продолжается с того места, где произошёл разрыв + реализована перезакачка файла в случаях неверного хеша (проверка хеша реализована при загрузке файла на сервер и при скачивании клиентом “на лету” через быстрый алгоритм XXH3), защита используется в виде mTLS + индивидуальные, одноразовые токены с коротким сроком жизни, так же если нет активных задач, то QUIC порт отключается для снижения поверхности атак.

Все важные данных хранятся во встраиваемой, быстрой и отказоустойчивой БД типа “ключ — значение”, которую легко бэкапить.

За защиту от большинства атак отвечает Coraza WAF — это высокопроизводительный брандмауэр веб-приложений, использующий набор правил OWASP CRS (обновление правил легко реализовано в WEB админке во вкладке “О проекте”), так же в защите используется валидация вводимых данных на стороне сервера, строгий набор заголовков безопасности HTTP, защита от DoS атак, использование CSRF токенов для POST запросов, “base64Captcha” капча после ввода 2-х неудачных попыток логина или пароля на странице авторизации и алгоритм шифрования “chaCha20-Poly1305” для данных куки в WEB браузере.


Что может FiReMQ + FiReAgent:

В FiReMQ всё взаимодействие с клиентами производится через WEB админку.

  • Можно производить удалённую установку программ, для этого выделяются нужны клиенты и выбрать “Установка ПО”, где нужно загрузить исполняемый файл на сервер, есть возможность выбора места загрузки файла, так же можно указать необходимые аргументы для его запуска, выполнить запуск от любого доступного пользователя со стороны клиента (нужно наличие достаточных прав доступа) как с повышенными правами, так и без них, либо же можно просто указать, что бы агент скачал файл, без его запуска вовсе.

     

    Можно производить удалённое выполнение cmd или PowerShell команд, для этого выделяются нужны клиенты и выбрать “Выполнить cmd / PowerShell”, в комплекте есть шпаргалка с готовым списком команд для обеих видов терминала с их кратким описанием (команды можно использовать как самостоятельно, так и для своих скриптов), есть возможность указать рабочую папку, а так же выполнить команды от любого доступного пользователя со стороны клиента, как с повышенными правами, так и без них. Все команды на стороне клиента выполняются как скрипты.

     

  • Отчёт с обратной связью о выполненных запросах от каждого клиента по установкам ПО и по cmd / PowerShell можно посмотреть, открыв окно “Отчёт”, в котором будет две соответствующие вкладки, в которых можно выбрать ранее созданный запрос (в виде короткой даты и времени создания), там же можно повторить запрос  для каждого клиента индивидуально, удалить конкретного клиента из списка (независимо выполнился запрос или ещё нет), либо удалить весь запрос со всеми клиентами.

     

  • Админские учётные записи (в WEB админке) общие, так как расчёт на 1-2 админов, хотя ограничения на количества создаваемых учётных записей нет. В планах потом при обновлении пароля, добавить обязательное подтверждение старым паролем, а так же создать утилиту для безопасного сброса пароля от учётной записи, в случае, если в БД одна учётка и забыт от неё пароль, либо просто забыт пароль.

     

  • Можно создавать любое количество групп и подгрупп для клиентов и перемещать клиентов между ними.

     

  • У каждого клиента можно просмотреть актуальную информацию по его “железу”, как через кастомный способ, реализованный в модуле на стороне клиента, так и через AIDA64 (опционально, если добавлен в установщике FiReAgent).

     

  • Для каждого клиента можно посмотреть информацию о его белом и локальном IP, его ID и дату когда клиент последний стал онлайн или офлайн, а так же задать ему любое, понятное имя.

     

  • Поддерживается автоматическое разлогирование из учётной записи в целях безопасности, если нет активности с сервером из WEB админки в течение 40 минут.

     

  • Поддерживаются горячие клавиши для Переименования клиента “F2” (можно удерживать F2 и курсором проводить вниз по списку с клиентами, для появления строки с вводом нового имени - это массовый вызов переименования, сохранение же происходит нажатием Enter на конкретном клиенте, отменить переименование можно клавишей Esc, так же ведя по списку, либо обновить страницу), для получения кастомной (Lite) информации о клиенте “F1”, либо из Aida64 “F4”.


  •  Установка FiReMQ на сервер:
Установка рассчитана на Linux-дистрибутивы с пакетным форматом DEB (Debian, Ubuntu, Mint и др.), для этого создал готовый DEB-пакет (RPM пакета пока нет, если потребуется в будущем, создам).
Процесс установки очень простой, с минимальным использованием консоли. Установку и настройку самого Linux сервера я не рассматриваю.
Для пробы можно скачать на Windows, распаковать и просто запустить исполняемый файл "FiReMQ.exe".
  1. Загрузить на Linux сервер любым способом DEB пакет и установить его командой “apt install ./firemq-*-linux-amd64.deb” (необходимые зависимости подтянутся автоматически).
  2. В процессе установки будет запрос на указание белого IP-адреса или домена, тут важно не ошибиться в воде и нажать Enter.
  3. Необходимо скачать 3 файла сертификата с Linux сервера по пути “/etc/firemq/certs”, а именно: “client-cert.pem”, “client-key.pem”, и “server-cacert.pem”, они необходимы под подключения клиентской части FiReAgent к серверу!
  4. Зайти в WEB админку по IP адресу и порту по умолчанию 8443, Логин и пароль по умолчанию “FiReMQ”, ОБЯЗАТЕЛЬНО СМЕНИТЬ при первом входе “Меню → Учётные записи Админов”, а так же сменить логин и пароль MQTT “Меню → MQTT авторизация”, по умолчанию стоит тоже “FiReMQ”, после смены ещё раз зайти в “Меню → MQTT авторизация” и ОТКЛЮЧИТЬРезервный аккаунт” (данный пункт меню ещё не до конца реализован, его статус должен быть “Выключен”).
  5. Установка и настройка FiReMQ завершена, осталось настроить проброс портов на маршрутизаторе, для MQTT нужно открыть TCP порт (по умолчанию 8883) и для QUIC протокола UDP порт (по умолчанию 4242), порт WEB админки лучше НЕ выбрасывать без необходимости наружу.

 

Почти все пути объявлены в главном конфиге “/etc/firemq/config/server.conf”, если по какой то причине потребуется изменить расположение того или иного файла, либо изменить порт, то это можно сделать в нём, затем сохранить конфиг и перезапустить сервер командой “systemctl restart firemq”.

Осталось подготовить установщик FiReAgent, добавив в него скаченные сертификаты и простейший конфиг файл для развёртки на клиентских машинах, для этого нужно перейти в репозиторий GitFlic или GitHub, выбрать и подготовить один из двух способов развёртки агента и установить клиентам

После запуска агента, почти сразу же в WEB админке FiReMQ появится данный клиент в группе “Новые клиенты”, подгруппа “Нераспределённые”, где можно будет его переименовать и переместить в новую группу с подгруппой.


Узнать версию FiReMQ или ServerUpdater:

FiReMQ --version
ServerUpdater --version

Либо из WEB админки в окне “О проекте”.


Описание исполняемых файлов:

  • FiReMQ — основное серверное приложение, которая работает как служба (Go).
  • ServerUpdater — утилита ручной проверки обновления FiReMQ с репозитория GitFlic или GitHub, ручное обновление запускается из WEB админки в окне “О проекте” (Go).
  • 7z/7zzs — утилита архиватора 7-ZIP.

Сертификаты FiReMQ:

На Linux сервере PEM сертификаты расположены по пути "/etc/firemq/certs":
- "server-cacert.pem" - Корневой сертификат сервера
- "server-cert.pem"   - Серверный сертификат
- "server-key.pem"    - Приватный ключ сервера

- "client-cacert.pem" - Корневой сертификат клиента
- "client-cert.pem"   - Клиентский сертификат
- "client-key.pem"    - Приватный ключ клиента

Сертификаты генерируются автоматически при первой установке DEB-пакета, либо при их удалении из каталога “/etc/firemq/certs” и перезапуске FiReMQ.

Можно заменить сертификаты на свои, для этого сначала нужно остановить службу командой “systemctl stop firemq”, затем удалить все сертификаты из “/etc/firemq/certs”, скопировав на их место свои, назначить пользователя и группу “firemq” новым сертификатом командой “sudo chown firemq:firemq /etc/firemq/certs/*” и запустить FiReMQ “systemctl start firemq” (FiReMQ сама поменяет права на файлы сертификатов на нужные).

 

В папке “Документы” лежит ручная инструкция “Создание mTLS сертификатов FiReMQ (на стороне сервера).odt” по созданию сертификатов, она не понадобится, но в ней понятно описано, как генерируются сертификаты самой FiReMQ.


Пути расположения файлов в Linux:

- “/etc/firemq/certs/” — тут генерируются и хранятся файлы PEM сертификатов при первом запуске FiReMQ (по умолчанию пустая).

- “/etc/firemq/config/” — тут хранятся конфиги правил OWASP CRS (“coraza.conf”, “crs-setup.conf” и папка “rules”), файл ключа “chacha20_key” для шифрования/дешифрования логина авторизованного админа в куках браузера, конфиг “mqtt_config.json” с логином и паролем MQTT и главный конфиг “server.conf”, в котором указаны почти все пути и настройки FiReMQ.

- “/opt/firemq/” —  тут лежат бинарные файлы “FiReMQ” и “ServerUpdater”.

- “/usr/local/share/firemq/7z” —  тут хранится бинарный файл архиватора 7-ZIP “7zzs” и файл с его лицензией.

- “/usr/local/share/firemq/data” —  тут статические данные WEB админки (HTML, JS, CSS, SVG, ICO).

- “/var/backups/firemq/Backup/” —  тут будут создаваться не более одной копии архивов с бэкапами FiReMQ и правил OWASP CRS (появляются после первого обновления).

- “/var/lib/firemq/db” —  тут создастся папка с БД (BadgerDB) при первом запуске FiReMQ, рекомендую делать бэкап этой БД (желательно при остановленной службе FiReMQ), позже реализую автобэкапы автоматически.

- “/var/lib/firemq/Downloads” —  сюда загружаются бинарные файлы из WEB админки “Установка ПО”, и ожидающие скачивания клиентами через протокол QUIC.

- “/var/lib/firemq/Info_files” —   сюда загружаются сжатые в “.html.xz” файлы с информацией о “железе” клиентов сформированные кастомным способом и через AIDA64 (если добавлена в установщик FiReAgent’а).

- “/var/log/firemq/” —  тут создаются логи от FiReMQ (пока ещё не реализовано) и ServerUpdater.


Удаление FiReAgent из WEB админки:

Предусмотрено централизованное, массовое, либо одиночное удаление установленных агентов “FiReAgent” из WEB админки.

Для этого достаточно выделить клиентов в WEB админке, которых нужно удалить, открыть “Меню → Удаление “FiReAgent””, ввести подтверждающее слово “Удаляем!” и нажать кнопку “Удалить”, после чего данные клиенты удалятся из отчёта загрузок сервера (если были), из БД и произойдёт полное удаление со стороны клиентов.


Скриншоты:

Все скриншоты в папке “Скриншоты”, так, как их много.

Скриншот


Наглядное древо FiReMQ в Linux:

📁 /

  • 📁 etc

    • 📁 firemq

      • 📁 certs

        • 📄 client-cacert.pem
        • 📄 client-cert.pem
        • 📄 client-key.pem
        • 📄 server-cacert.pem
        • 📄 server-cert.pem
        • 📄 server-key.pem
      • 📁 config

        • 📄 chacha20_key

        • 📄 coraza.conf

        • 📄 crs-setup.conf

        • 📄 mqtt_config.json

        • 📁 rules

          • 📄 asp-dotnet-errors.data
          • 📄 iis-errors.data
          • 📄 java-classes.data
          • 📄 lfi-os-files.data
          • 📄 LICENSE
          • 📄 php-errors.data
          • 📄 php-function-names-933150.data
          • 📄 php-variables.data
          • 📄 REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example
          • 📄 REQUEST-901-INITIALIZATION.conf
          • 📄 REQUEST-905-COMMON-EXCEPTIONS.conf
          • 📄 REQUEST-911-METHOD-ENFORCEMENT.conf
          • 📄 REQUEST-913-SCANNER-DETECTION.conf
          • 📄 REQUEST-920-PROTOCOL-ENFORCEMENT.conf
          • 📄 REQUEST-921-PROTOCOL-ATTACK.conf
          • 📄 REQUEST-922-MULTIPART-ATTACK.conf
          • 📄 REQUEST-930-APPLICATION-ATTACK-LFI.conf
          • 📄 REQUEST-931-APPLICATION-ATTACK-RFI.conf
          • 📄 REQUEST-932-APPLICATION-ATTACK-RCE.conf
          • 📄 REQUEST-933-APPLICATION-ATTACK-PHP.conf
          • 📄 REQUEST-934-APPLICATION-ATTACK-GENERIC.conf
          • 📄 REQUEST-941-APPLICATION-ATTACK-XSS.conf
          • 📄 REQUEST-942-APPLICATION-ATTACK-SQLI.conf
          • 📄 REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION.conf
          • 📄 REQUEST-944-APPLICATION-ATTACK-JAVA.conf
          • 📄 REQUEST-949-BLOCKING-EVALUATION.conf
          • 📄 RESPONSE-950-DATA-LEAKAGES.conf
          • 📄 RESPONSE-951-DATA-LEAKAGES-SQL.conf
          • 📄 RESPONSE-952-DATA-LEAKAGES-JAVA.conf
          • 📄 RESPONSE-953-DATA-LEAKAGES-PHP.conf
          • 📄 RESPONSE-954-DATA-LEAKAGES-IIS.conf
          • 📄 RESPONSE-955-WEB-SHELLS.conf
          • 📄 RESPONSE-956-DATA-LEAKAGES-RUBY.conf
          • 📄 RESPONSE-959-BLOCKING-EVALUATION.conf
          • 📄 RESPONSE-980-CORRELATION.conf
          • 📄 RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example
          • 📄 restricted-files.data
          • 📄 restricted-upload.data
          • 📄 ruby-errors.data
          • 📄 scanners-user-agents.data
          • 📄 sql-errors.data
          • 📄 ssrf.data
          • 📄 unix-shell-builtins.data
          • 📄 unix-shell.data
          • 📄 web-shells-asp.data
          • 📄 web-shells-php.data
          • 📄 windows-powershell-commands.data
        • 📄 server.conf

  • 📁 opt

    • 📁 firemq

      • 📄 FiReMQ
      • 📄 ServerUpdater
  • 📁 usr

    • 📁 local

      • 📁 share

        • 📁 firemq

          • 📁 7z

            • 📄 7zzs
            • 📄 License Linux ‘7zzs’.txt
          • 📁 data

            • 📄 auth.html

            • 📁 css

              • 📄 auth.css
              • 📄 clients.css
              • 📄 groups.css
              • 📄 info-viewer.css
              • 📄 menu.css
              • 📄 modal.css
              • 📄 push.css
              • 📄 style.css
            • 📄 favicon.ico

            • 📁 icon

              • 📄 AccountsAdmin.svg
              • 📄 CheckMark.svg
              • 📄 Del_FiReAgent.svg
              • 📄 Delete.svg
              • 📄 DeleteAll.svg
              • 📄 Edit.svg
              • 📄 Exit_Account.svg
              • 📄 Global_IP.svg (не задействована)
              • 📄 Hide_Passwd.svg
              • 📄 Info_Aida64.svg
              • 📄 Info_Lite.svg
              • 📄 local_IP.svg (не задействована)
              • 📄 Logging.svg
              • 📄 Move.svg
              • 📄 MoveAll.svg
              • 📄 Mqtt.svg
              • 📄 O_Project.svg
              • 📄 PC_Off.svg
              • 📄 PC_On.svg
              • 📄 Show_Passwd.svg
              • 📄 SoftInstal.svg
              • 📄 Terminal.svg
            • 📄 index.html

            • 📁 js

              • 📄 auth.js
              • 📄 clients.js
              • 📄 csrf.js
              • 📄 groups.js
              • 📄 info-viewer.js
              • 📄 menu.js
              • 📄 modal.js
              • 📄 push.js
  • 📁 var

    • 📁 backups

      • 📁 firemq

        • 📁 Backup

          • 📄 bak_05.10.25(в_16.34.03)_OWASP_CRS_4.18.0.7z
          • 📄 bak_20.10.25(в_18.57.21)_ver=17.09.25_FiReMQ.zip
    • 📁 lib

      • 📁 firemq

        • 📁 db

          • 📁 FiReMQ_DB

            • 📄 000729.sst
            • 📄 000730.sst
            • 📄 000731.sst
            • 📄 000732.sst
            • 📄 000733.sst
            • 📄 000734.sst
            • 📄 001202.vlog
            • 📄 001203.vlog
            • 📄 DISCARD
            • 📄 KEYREGISTRY
            • 📄 MANIFEST
        • 📁 Downloads

          • 📄 Test.exe
        • 📁 Info_files

          • 📄 Aida_000714-TEST_268859b.html.xz
          • 📄 Lite_000714-TEST_268859b.html.xz
    • 📁 log

      • 📁 firemq
        • 📄 ServerUpdater.log

Заметки:

Автоматические проверки обновлений с репозиториев происходят только вручную с WEB админки из окна “О проекте” + создаётся один бэкап предыдущей версии, для возможности отката в случае каких либо непредвиденных проблем.

Если остановить службу “systemctl stop firemq” и запустить FiReMQ напрямую “/opt/firemq/FiReMQ”, то он будет работать в режиме отладки.

Хоть FiReMQ и имеет очень хорошую, базовую защиту, тем не менее без надобности лучше НЕ выставлять WEB админку наружу в интернет, безопасность лишней не бывает.

Если по какой то причине нужно создать свой DEB пакет (рекомендую Debian), то можно воспользоваться готовой пошаговой инструкцией “Создание DEB пакета.odt” из папки “Документы”.

Подключение между сервером и клиентами защищено с помощью mTLS, как в MQTT (TCP соединение) + авторизация по логину и паролю, так и через QUIC (UDP соединение) + индивидуальные, одноразовые токены с коротким сроком жизни.

Никакая информация со стороны клиентов, либо сервера не передаётся на чужие сервера!


Автор Otto, г. Омск 2025

Описание

Серверная система для гибкой, автоматической развёртки программ, самораспаковывающихся архивов и выполнения удалённых команд ( в cmd или PowerShell от любого пользователя) на большом количестве компьютеров, не связанных одной сетью.

Конвейеры
0 успешных
0 с ошибкой