README.md

FiReAgent (Агент файловой ретрансляции)

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

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

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

FiReAgent построен по модульному принципу, что позволяет снизить расход ОЗУ при работе в фоновом режиме. Все модули представляют собой отдельные программы, но большинство из них не способны работать самостоятельно — они запускаются и взаимодействуют через основное приложение FiReAgent.

 

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

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

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

 

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


  •  Описание модулей программы:

  • FiReAgent — основное приложение, которая работает как служба, запускает и взаимодействует с программами-модулями (Go).

  • ModuleCrypto — модуль обеспечивает шифрование и дешифрование сертификатов и конфига для подключения к серверу FiReMQ (C#).
  • ModuleCommand — модуль обеспечивающий выполнение cmd или PowerShell команд, через создание задач в планировщике Windows (C#).
  • ModuleQUIC — модуль-клиент, обеспечивающий безопасное и надёжное подключение к серверу, для скачивания файлов по современному протоколу QUIC, работающему поверх UDP (Go).
  • ModuleInfo — модуль сбора информации о “железе” клиента, кастомным способом и/или с помощью AIDA64 (опционально), формирует информацию в HTML файлы и отправляет на сервер (C#).
  • ClientUpdater — автономный модуль утилиты проверки обновления как FiReAgent, так и любых его частей, включая отдельные модули, файлы, папки и т.д. (Go).
  • Uninstaller — модуль, позволяющий полностью удалить FiReAgent с компьютера, как удалённо (через WEB админку FiReMQ), так и штатным способом (через установленные программы в Windows, либо запуском исполняемого файла “Uninstall.exe” из папки FiReAgent) (Go).

Утилиты не вошедшие в состав FiReAgent:

  • InstFiReAgent — утилита для первичной установки FiReAgent на компьютер клиента, позволяет установить программу для ручной первоначальной настройки, либо уже с сертификатами и заполненным конфигом (для автоматической развёртки) (Go).
  • GenCryAgent — утилита, для создания в пару кликов PFX сертификата, который устанавливается на клиентские компьютеры при установке FiReAgent (используется закрытый ключ этого PFX сертификата для расшифровки данных модулем ModuleCrypto) (Go).

Описание ключей запуска:

- Узнать версию установщика: InstFiReAgent --version
- Принудительная установка (без ожидания нажатия Enter): InstFiReAgent --force

 

Общая информация:

- Установщик InstFiReAgent распаковывает файлы в "C:\Program Files\FiReAgent".
- При установке создаёт папку "C:\ProgramData\FiReAgent", она используется как путь по умолчанию для скриптов и загрузок файлов (если не выбран другой путь в WEB админке FiReMQ).
- Установщик добавит папки в исключения Защитника Windows (если он не отключён).
- FiReAgent регистрируется в списке установленных программ.
- После завершения установки, служба FiReAgent запустится и подключается по MQTT к FiReMQ автоматически.
- Узнать версию любого модуля можно запустив его с флагом "--version".

 

Описание сертификатов, необходимых для работы FiReAgent:

На Linux сервере PEM сертификаты расположены по пути "/etc/firemq/certs", нужно скопировать только три из них:
- "client-cert.pem"   - Клиентский сертификат (брать с сервера FiReMQ).
- "client-key.pem"    - Приватный ключ клиента (брать с сервера FiReMQ).
- "server-cacert.pem" - Корневой сертификат сервера (брать с сервера FiReMQ).

- "CryptoAgent.pfx"   - Требуется для шифрования/дешифрования конфигов и ".pem" сертификатов, устанавливается в "Локальный компьютер" в хранилище "Личное" (генерировать утилитой "GenCryAgent").

 

Два способа развёртки FiReAgent (вместе с сертификатами и файлом авторизации):

1) Создать папку "экстра" или "extra"(регистр букв не важен) рядом с установщиком и поместить туда файлы: client-cert.pem, client-key.pem, server-cacert.pem, а также можно auth.txt и CryptoAgent.pfx (PFX сертификат должен быть с паролем "FiReAgent", либо без пароля вообще, для удаления пароля можно использовать скрипт "Удалить пароль из CryptoAgent.ps1").

2) Добавить свои ".pem" и/или ".pfx" сертификаты в архив "installation.7z" (папка "cert") и перекомпилировать код  установщика "InstFiReAgent".
В Архив "installation.7z" можно добавить ещё в папку "tool/AIDA64" (файлы и библиотеки AIDA64 не предоставляю из-за платной и закрытой лицензии AIDA64), исполняемый файл должен называться "aida64.exe", а так же заполненный конфиг "auth.txt" (папка "config").

 

  •  Подготовка установщика “InstFiReAgent”.
1) В первую очередь устанавливается серверная часть FiReMQ (смотреть справку на репозитории FiReMQ), затем необходимо скопировать с Linux сервера три файла сертификатов "client-cert.pem", "client-key.pem", "server-cacert.pem" из пути "/etc/firemq/certs" (НЕ переименовывать их).

2) Затем запустить утилиту "GenCryAgent", сгенерировав PFX сертификат "CryptoAgent.pfx" (он создаётся на 10 лет, но срок не важен, в данном сертификате используется ТОЛЬКО закрытый ключ для шифрования/дешифрования, поэтому даже после истичения срока ничего плохого не произойдёт).

3) Выбрать более предпочтительный способ добавления четырёх сертификатов при развёртке FiReAgent (как описано чуть выше):

СПОСОБ №1) При использовании этого способа, достаточно создать папку "экста" или "extra" (регистр букв не важен) рядом с установщиком "InstFiReAgent.exe", скопировав в неё PEM и PFX сертификаты, затем добавить заполненный "auth.txt" конфиг, его содержимое такое:
```
# IP-адрес или домен сервера FiReMQ (TCP)
ServerURL='указать белый IP-адрес или домен (без кавычек)'

# TCP порт MQTT брокера (mTLS)
PortMQTT=8883

# Логин для подключения к MQTT брокеру
LoginMQTT='логин должен быть сложным и длинным для безопасности (без кавычек)'

# Пароль для подключения к MQTT брокеру
PasswordMQTT='пароль тоже должен быть сложным и длинным для безопасности (без кавычек)'

# UDP порт для подключения к QUIC-серверу (mTLS)
PortQUIC=4242
```
Для автоматического режима запускать с ключом "--force" (InstFiReAgent.exe --force). При установке эти данные подхватятся автоматически, установив и сразу подключившись к серверу (в WEB админке почти сразу же появится данный клиент в группе "Новые клиенты", подгруппа "Нераспределённые").
После установки папка "'экстра/extra" автоматически удалиться в целях безопасности!

СПОСОБ №2) Потребуется перекомпиляция проекта в языке Golang (на деле это просто), этот способ даёт преимущества в виде одного исполняемого файла, который проще распространить и запустить на выполнение.
А) Скачать и установить компилятор Go (Windows x64): "https://go.dev/dl".

Б) Открыть папку с исходным кодом модуля "InstFiReAgent", в подпапке "tool" через 7-ZIP открыть архив "installation.7z", в архиве есть папка "Инсталляция", в ней все файлы и другие подпапки, которые будут установлены на компьютер клиента.

В этой папке "Инсталляция" есть подпапка "config", в неё нужно скопировать свой заполненный "auth.txt", а в подпапку "cert" скопировать 4 файла сертификата: "client-cert.pem", "client-key.pem", "server-cacert.pem" и "CryptoAgent.pfx".
Дополнительно в архив можно добавить ещё программу Aida64 в подпапку "tool\AIDA64" (в "tool\AIDA64" должен быть как сам исполняемый файл "aida64.exe", так и все другие библиотеки), это не обязательно, но даёт возможность получать актуальную информацию о железе конкретного клиента в WEB админке (помимо кастомного Lite способа).
Архив можно закрыть, он уже подготовлен.

В) Вернуться в папку с исходным кодом модуля "InstFiReAgent" и запустить скрипт компляции "Компилировать.bat", после компиляции, на выходе получится готовый установочный файл "InstFiReAgent.exe", который можно устанавливать клиентам.

Краткое описание структуры папок агента “C:\Program Files\FiReAgent”:

  • В папке “cert” находятся зашифрованные PEM сертификаты. Если их удалить и поместить незашифрованные  сертификаты, то при перезапуске FiReAgent они зашифруются с помощью установленного в системе PFX сертификата CryptoAgent, ключ (aeskey.enc) хранится в папке “config”.

  • В папке “config” находятся конфиги:

    • главный конфиг (auth.txt) с конфиденциальной информацией зашифрован  с помощью установленного в системе PFX сертификата CryptoAgent (auth.enc и auth_aeskey.enc).
    • В конфиге “Aida64.conf” указан полный путь до исполняемого файла “aida64.exe”.
    • В конфиге “MqttID.conf” хранится уникальный ID клиента, состоит из имени хоста и рандомного суффикса (при удалении этого файла и перезапуске FiReAgent, он сгенерируется заново с новым суффиксом).
    • В профиле “Профиль_Aida64.rpf” хранится список разделов, по которым будет генерироваться отчёт из программы Aida64.
  • В подпапке “config\Update” хранится конфиг “ClientUpdater.conf”, в нём указывается основной репозиторий, ссылки для обновления и публичный токен. А так же “update_history.json”, в нём хранится текущая версия релиза и история автоматических обновлений FiReAgent и/или его компонентов и источник, откуда было скачено обновление (этот файл создаётся при первом успешном обновлении).

  • В папке “log” находятся хранятся все лог-файлы (поддерживается автоматическая ротация для всех логов).

  • В папке “Reports” генерируются HTML файлы с отчётами, которые отправляются на сервер, затем удаляются с этой папки.

  • В папке “tool\7z” хранится 7-ZIP архиватор, а в “tool\AIDA64” хранятся файлы Aida64 (опционально).

  • В корневой папке хранятся все модули, ярлыки и сам FiReAgent.


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

 📁 FiReAgent

  • 📁 cert

    • 📄 client-cert.enc
    • 📄 client-key.enc
    • 📄 server-cacert.enc
  • 📄 ClientUpdater.exe

  • 📁 config

    • 📄 aeskey.enc

    • 📄 Aida64.conf

    • 📄 auth.enc

    • 📄 auth_aeskey.enc

    • 📄 MqttID.conf

    • 📁 Update

      • 📄 ClientUpdater.conf
      • 📄 update_history.json
    • 📄 Профиль_Aida64.rpf

  • 📄 FiReAgent.exe

  • 📄 LICENSE

  • 📁 log

    • 📄 log_ClientUpdater.log
    • 📄 log_ModuleCrypto.txt
    • 📄 ModuleCommand.txt
    • 📄 ModuleInfo.txt
    • 📄 ModuleQUIC.txt
  • 📄 ModuleCommand.exe

  • 📄 ModuleCrypto.exe

  • 📄 ModuleInfo.exe

  • 📄 ModuleQUIC.exe

  • 📁 Reports

  • 📁 tool

    • 📁 7z

      • 📄 7z.dll
      • 📄 7z.exe
      • 📄 License 7-Zip.txt
    • 📁 AIDA64

      • 📄 aida64.exe
      • 📄 aida_arc.dll
      • 📄 aida_bench32.dll
      • И ТАК ДАЛЕЕ…
      • 📁 Language
        • 📄 lang_ru.txt
  • 📄 Uninstall.exe

  • 📄 Остановить и удалить службу FiReAgent.lnk

  • 📄 РЕЖИМ ОТЛАДКИ.lnk

  • 📄 Установить и запустить службу FiReAgent.lnk


Заметки:

Автоматические проверки обновлений с репозиториев происходят первый раз через 5 минут после запуска, затем раз в сутки.

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

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

Нет привязки к “железу” или пользователю, так, как используется закрытый ключ из установленного в системе сертификата “CryptoAgent.pfx” для шифрования/дешифрования конфиденциальных данных.

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


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

Описание

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

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