hexstrike-ai
HexStrike AI — Docker + Remote MCP
Docker-образ HexStrike AI на базе linuxserver.io Kali, с новым удалённым MCP-сервером на streamable-HTTP, чтобы весь набор инструментов HexStrike можно было использовать по сети (например, из Claude Code), а не только из локального stdio-клиента.
[!WARNING] Это открывает удалённое выполнение инструментов offensive security по сети. Клиент, подключённый к MCP-эндпоинту, может фактически выполнять удалённые команды через весь арсенал инструментов контейнера. Прочтите раздел Безопасность, прежде чем запускать это где-либо, кроме изолированной лаборатории. Всегда задавайте
HEXSTRIKE_MCP_TOKEN, запускайте только в доверенной/изолированной сети или через VPN и тестируйте только те системы, на которые у вас есть явное разрешение.
[!NOTE] Готовый образ не публикуется. Поскольку полный набор инструментов Kali делает образ большим (>10 ГБ — примерно ~17 ГБ в собранном виде), он не публикуется в Docker Hub или любом другом реестре. Вы собираете его сами из этого репозитория (см. Быстрый старт); убедитесь, что на Docker-хосте достаточно свободного места.
Содержание
Related MCP server: MCP Tools
Возможности
Полный набор инструментов HexStrike AI из upstream — более 150 инструментов безопасности, управляемых через его Flask API, — предустановлен на образе на базе Kali, без ручной настройки окружения.
Новое:
hexstrike_mcp_http.py— streamable-HTTP MCP-сервер, который предоставляет все определения@mcp.tool()из upstream по сети на порту8889(путь/mcp), так что им можно управлять удалённо, а не только через локальный stdio.Необязательная аутентификация по bearer-токену для защиты MCP-эндпоинта.
Доступный через браузер рабочий стол KDE (Selkies/KasmVNC, унаследован от базового образа) для интерактивной работы наряду с автоматическим запуском инструментов.
Супервизор процессов
s6-overlayv3 с явным порядком запуска служб — служба MCP ожидает, пока API-сервер HexStrike будет определён как зависимость.Постоянный том
/config: виртуальные окружения для каждого инструмента и состояние файлового менеджера сохраняются после перезапуска контейнера.Воспроизводимая сборка:
uvуправляет окружением Python, а исходники upstream загружаются по закреплённому коммиту git, а не включаются в репозиторий.
Обзор
HexStrike AI из upstream поставляет две точки входа на Python:
hexstrike_server.py— Flask API-сервер, слушающий порт8888, который выполняет более 150 внешних инструментов безопасности черезsubprocessи отдаёт их результаты по HTTP (включая эндпоинт/health, сообщающий о доступности инструментов).hexstrike_mcp.py— сервер FastMCP, который преобразует вызовы MCP-инструментов в HTTP-запросы к указанному выше API-серверу. Upstream запускает его только через транспорт stdio, поэтому им может управлять только MCP-клиент на той же машине, что и контейнер.
Этот репозиторий добавляет hexstrike_mcp_http.py, который импортирует
модуль hexstrike_mcp.py из upstream и целиком переиспользует его функцию
setup_mcp_server() — все определения инструментов без изменений — но
обслуживает их через MCP-транспорт streamable-HTTP на порту 8889 по
пути /mcp вместо stdio. Это единственное функциональное отличие: та же
поверхность инструментов, доступная удалённо (например, из Claude Code,
работающего на другой машине), а не только из процесса, запущенного рядом.
uv (Astral) управляет интерпретатором Python
и окружением зависимостей и используется для запуска обоих процессов при
старте контейнера.
Архитектура
Базовый образ:
lscr.io/linuxserver/kali-linux:latest, который предоставляет доступный через браузер рабочий стол KDE (Selkies/KasmVNC) на портах3000(HTTP) и3001(HTTPS), репозитории apt Kali-rolling и инициализациюs6-overlayv3.Добавленные службы: две службы
longrunизs6-overlayдобавлены поверх системы инициализации базового образа и зарегистрированы в наборе службuser:root/etc/s6-overlay/s6-rc.d/hexstrike-server— запускаетuv run --no-sync python hexstrike_server.py --port 8888от имени пользователяabc.root/etc/s6-overlay/s6-rc.d/hexstrike-mcp— запускаетuv run --no-sync python hexstrike_mcp_http.py --server http://127.0.0.1:8888 --host 0.0.0.0 --port 8889от имени пользователяabc. Его записьdependencies.d/hexstrike-serverзадаёт запуск после API-сервера.
Исходники upstream не включаются в репозиторий.
Dockerfileвыполняетgit cloneрепозитория0x4m4/hexstrike-aiво время сборки и переключается на закреплённый коммит (ARG HEXSTRIKE_REF, по умолчаниюd689933ff579d839c676c82b231f8e98326c5f04), копируя толькоhexstrike_server.py,hexstrike_mcp.pyиhexstrike-ai-mcp.jsonв/app. Это сохраняет репозиторий небольшим, а обновление upstream сводится к изменению одной строки.Окружение Python: управляемый
uvCPython 3.12 (закреплён через.python-version), зависимости изpyproject.tomlустанавливаются в/app/.venvчерезuv sync --no-devво время сборки.Инициализация постоянного хранения:
root/custom-cont-init.d/10-hexstrike-persistзапускается от имени root до запуска служб longrun (см. Постоянное хранение).
Порты
Порт | Протокол | Описание |
3000 | HTTP | Веб-рабочий стол (Selkies/KasmVNC), унаследован от базового образа linuxserver Kali |
3001 | HTTPS | Веб-рабочий стол, TLS |
8888 | HTTP | API-сервер HexStrike AI ( |
8889 | HTTP | MCP-сервер HexStrike AI, транспорт streamable-HTTP, путь эндпоинта |
Быстрый старт
Docker Compose (рекомендуется)
Вся конфигурация находится непосредственно в docker-compose.yml — файла
.env нет. Перед первым запуском отредактируйте блок environment: и
задайте:
HEXSTRIKE_MCP_TOKEN— bearer-токен для MCP-эндпоинта. Сгенерируйте надёжное значение с помощьюopenssl rand -hex 32и вставьте его (или оставьте пустым для открытого эндпоинта — только для лаборатории/CTF в изолированной сети).CUSTOM_USER/PASSWORD— логин и пароль для базовой аутентификации веб-рабочего стола.
Затем соберите и запустите:
# generate a token to paste into docker-compose.yml:
openssl rand -hex 32
docker compose up -d --buildСборка большая и медленная, и готового образа для загрузки нет —
результирующий образ >10 ГБ (~17 ГБ), поэтому он не публикуется ни в
каком реестре и должен собираться локально. Он устанавливает метапакет
kali-linux-headless плюс длинный список именованных инструментов, компилирует
колёса angr / pwntools (отсюда build-essential и заголовочные файлы
разработчика в образе), собирает три инструмента на Go из исходников и
загружает пакет релиза rustscan. Ожидайте, что первая сборка займёт
значительное время и потребует много свободного места (закладывайте
~20 ГБ+ запаса, больше при итерациях).
Обычный Docker
docker build -t hexstrike-ai:local .
docker run -d \
--name hexstrike-ai \
--cap-add=NET_RAW --cap-add=NET_ADMIN \
--shm-size=1g \
-p 3000:3000 -p 3001:3001 -p 8888:8888 -p 8889:8889 \
-v "$(pwd)/config:/config" \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Etc/UTC \
-e CUSTOM_USER=kali \
-e PASSWORD=changeme \
-e HEXSTRIKE_MCP_TOKEN="$(openssl rand -hex 32)" \
hexstrike-ai:local--cap-add=NET_RAW --cap-add=NET_ADMIN и --shm-size=1g обязательны —
см. Безопасность и комментарии в docker-compose.yml.
Подключение из Claude Code
Когда контейнер запущен, укажите Claude Code MCP-эндпоинт на порту 8889.
Если задан HEXSTRIKE_MCP_TOKEN (настоятельно рекомендуется — см.
Безопасность), каждый запрос должен включать соответствующий
заголовок Authorization: Bearer <token>; эндпоинт принимает
неаутентифицированные запросы только в том случае, если токен не задан.
Конфигурация MCP для проекта/пользователя (.mcp.json или настройки Claude Code):
{
"mcpServers": {
"hexstrike-ai": {
"type": "http",
"url": "http://<HOST>:8889/mcp",
"headers": { "Authorization": "Bearer <HEXSTRIKE_MCP_TOKEN>" }
}
}
}Или через CLI:
claude mcp add --transport http hexstrike-ai http://<HOST>:8889/mcp \
--header "Authorization: Bearer <TOKEN>"Замените <HOST> на адрес/имя хоста контейнера, а
<HEXSTRIKE_MCP_TOKEN> / <TOKEN> — на значение, которое вы сгенерировали
выше. Если вы намеренно оставили HEXSTRIKE_MCP_TOKEN пустым, опустите
аргумент headers / --header — в этом случае эндпоинт открыт.
Invalid Host header/ HTTP 421? Транспорт MCP streamable-HTTP имеет встроенную защиту от DNS-rebinding, которая по умолчанию доверяет только заголовкуHostсо значениемlocalhost. Этот образ отключает эту проверку по умолчанию, чтобы вы могли обращаться к эндпоинту по LAN через IP или имя хоста. Если вы всё же видите эту ошибку, либо обновитесь до этого образа (по умолчанию он уже обрабатывает это), либо задайтеHEXSTRIKE_MCP_ALLOWED_HOSTSс точным значением(ями)host:port, которые отправляют ваши клиенты.
Переменные окружения
Переменная | Где задается | По умолчанию | Описание |
|
|
| Соглашение linuxserver: UID, под которым сервисный пользователь |
|
|
| Соглашение linuxserver: GID, под которым работает сервисный пользователь |
|
|
| Часовой пояс контейнера. |
|
|
| Имя пользователя для basic-auth веб-рабочего стола (базовый образ Kali от linuxserver). |
|
|
| Пароль для basic-auth веб-рабочего стола. |
|
| (пусто) | Bearer-токен, обязательный на конечной точке |
| опционально, закомментированный пример в |
| Порт, к которому привязывается API-сервер HexStrike. Оба |
| опционально, закомментированный пример в |
| Порт, к которому привязывается MCP-сервер streamable-HTTP (та же оговорка, что и выше). |
| опционально |
| Интерфейс, к которому привязывается MCP-сервер; передаётся напрямую run-скриптом |
| опционально, | (пусто) | Разделённый запятыми список разрешённых |
| опционально, |
| Управляют тем, какие MCP-инструменты доступны — см. Фильтрация MCP-инструментов. |
hexstrike_mcp_http.py также принимает переопределения --server / HEXSTRIKE_SERVER_URL,
--path / HEXSTRIKE_MCP_PATH, --timeout / HEXSTRIKE_TIMEOUT и
--allowed-hosts / HEXSTRIKE_MCP_ALLOWED_HOSTS. Поставляемый s6
run-скрипт передаёт только --server, --host и --port; остальные читаются
из своих env-фолбэков (поэтому HEXSTRIKE_MCP_ALLOWED_HOSTS работает при
задании на контейнере) или сохраняют встроенные значения по умолчанию (/mcp,
стандартный таймаут запроса вышестоящего проекта и отключённая проверка Host).
Постоянное хранение (Persistence)
Том /config — это домашний каталог по соглашению linuxserver и единственный
путь, который переживает пересоздание контейнера. Cont-init-скрипт
root/custom-cont-init.d/10-hexstrike-persist выполняется от root перед
запуском longrun-сервисов и:
Создаёт
/config/hexstrike/envs,/config/hexstrike/filesи/config/hexstrike/output.Заменяет жёстко заданные вышестоящим проектом пути
/tmp/hexstrike_envsи/tmp/hexstrike_filesсимволическими ссылками на/config/hexstrike/envsи/config/hexstrike/filesсоответственно, чтобы создаваемые по требованию Python-виртуальные окружения для каждого инструмента HexStrike и область чтения/записи файлового менеджера переживали перезапуски контейнера.Выполняет
chownпостоянного дерева наabc:abc(с учётомPUID/PGID) черезlsiown.
Динамические каталоги /tmp/<tool>_output, создаваемые отдельными запусками
инструментов, не связываются символическими ссылками и остаются эфемерными — явно
укажите конкретному инструменту путь /config/hexstrike/output, если нужно,
чтобы его вывод пережил перезапуск.
Доступ к веб-рабочему столу
Откройте https://<HOST>:3001/ в браузере и войдите с учётными данными CUSTOM_USER /
PASSWORD, настроенными выше (HTTP-рабочий стол также доступен
на порту 3000 без TLS).
Проверка работоспособности (Health Check)
curl http://<HOST>:8888/healthВозвращает JSON от API-сервера HexStrike со списком инструментов, которые были
обнаружены как доступные на PATH внутри контейнера.
Безопасность
[!WARNING] Конечная точка MCP на
8889позволяет подключённому клиенту автономно управлять выполнением инструментов атакующего тестирования внутри контейнера — по сути это удалённое выполнение команд by design, ограниченное только тем bearer-токеном, который вы настроите.
Всегда задавайте
HEXSTRIKE_MCP_TOKEN. Сгенерируйте его с помощьюopenssl rand -hex 32и храните в секрете. Пустое значение делает конечную точку MCP неаутентифицированной.Открывайте доступ только через доверенную/изолированную сеть или VPN. Не публикуйте порт
8889(или8888) в открытый интернет.Атакуйте только те системы, на тестирование которых у вас есть явное разрешение. В контейнере поставляются реальные инструменты атакующего тестирования, способные на активное сканирование, эксплуатацию, атаки на учётные данные и многое другое.
Контейнеру выданы capabilities
NET_RAWиNET_ADMIN(см.docker-compose.yml/ примерdocker run), поскольку нескольким инструментам — SYN-сканамnmap,masscan,responderи т. д. — нужны raw-сокеты. Это уже, чем--privileged, но всё же существенно повышенные привилегии; выдавайте их только если вам нужны такие типы сканирования.Аутентификация реализована как минимальное ASGI-промежуточное ПО (
BearerTokenASGIMiddlewareвhexstrike_mcp_http.py), которое проверяет заголовокAuthorizationсравнением за константное время и отклоняет неаутентифицированные запросы к пути MCP с кодом401до того, как они достигнут MCP-приложения — оно не буферизует и иным образом не вмешивается в поток ответов streamable-HTTP/SSE.
Покрытие инструментами
Набор инструментов курируемый, а не исчерпывающий:
Метапакет
kali-linux-headless, плюс список инструментов, названных явно вDockerfile(те, что проверяет конечная точка/healthHexStrike, и распространённые утилиты разведки/веб/эксплуатации) — например,nmap,masscan,gobuster,feroxbuster,ffuf,dirb,dirsearch,nikto,sqlmap,wpscan,whatweb,wafw00f,hydra,john,hashcat,medusa,evil-winrm,amass,dnsenum,dnsrecon,fierce,theharvester,responder,nuclei,subfinder,httpx-toolkit,arjun,paramspider,hakrawler,getallurls(gau),netexec,enum4linux-ng,smbclient,seclists,wordlists,binwalk,foremost,steghide,exiftool,radare2иgdb.Три инструмента на Go, собранные из исходников на этапе сборки, после чего из образа удаляется Go-тулчейн:
katana,dalfox,waybackurls.rustscan, установленный из последнего GitHub-релиза (.debпоставляется внутри ассетаrustscan.deb.zip, который сборка распаковывает перед установкой; best-effort — сборка продолжается без него, если ассет не удаётся разрешить).
Некоторые тяжёлые или лицензируемые инструменты, на которые ссылается вышестоящий проект HexStrike, — Ghidra, IDA, Burp Suite Pro, Maltego, Nessus и различные облачные/криминалистические утилиты — не установлены в этом образе, чтобы сборка оставалась выполнимой.
Фильтрация MCP-инструментов (меньше инструментов для модели)
Вышестоящий проект регистрирует ~150 MCP-инструментов. Это превышает лимит
функций-инструментов некоторых провайдеров моделей (OpenAI ограничивает ~128)
и выводит на поверхность инструменты, которые могут только завершиться ошибкой,
поскольку их CLI-бинарник не установлен. Чтобы избежать этого, MCP-сервер
скрывает любой инструмент, чей базовый бинарник отсутствует (проверяется
через which при запуске, так как MCP-процесс работает в том же контейнере, что и
инструменты). Типичная сборка открывает ~115 инструментов вместо 150. В логе
запуска выводится количество и скрытый список.
Управление через переменные окружения на контейнере:
Переменная | По умолчанию | Эффект |
|
|
|
| (пусто) | Разделённый запятыми белый список — открыть только эти инструменты (переопределяет auto). |
| (пусто) | Разделённые запятыми инструменты, которые всегда скрывать. |
| (пусто) | Разделённые запятыми инструменты, которые всегда сохранять (защищает их от авто-исключения). |
Обновление закреплённой версии вышестоящего проекта
Исходные репозитории клонируются во время сборки на коммите, указанном в
ARG HEXSTRIKE_REF (Dockerfile). Чтобы подхватить новые изменения из апстрима, обновите
этот пин и пересоберите:
docker build -t hexstrike-ai:local --build-arg HEXSTRIKE_REF=<new-sha> .или, при использовании Compose, раскомментируйте и задайте запись args: HEXSTRIKE_REF: в
ключе build: в docker-compose.yml и выполните docker compose up -d --build.
Авторство и лицензия
HexStrike AI от 0x4m4 — платформа автоматизации безопасности, которую упаковывает этот образ, выпущена под лицензией MIT. Полные условия см. в файле
LICENSEиз апстрима.Образ
kali-linuxот linuxserver.io — базовый образ, предоставляющий окружение Kali и веб-рабочий стол.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceAn MCP server that integrates various penetration testing tools, enabling security professionals to perform reconnaissance, vulnerability scanning, and API testing through natural language commands in compatible LLM clients like Claude Desktop.7
- AlicenseNot gradedqualityAmaintenanceA passive MCP server that exposes a toolbox of executable tools (shell, network, HTTP, AI search, SSH, S3 file operations) to autonomous agents via Streamable HTTP, with strong security features including Docker sandboxing and WAF.2Apache 2.0
- AlicenseNot gradedqualityBmaintenanceAI-driven penetration testing MCP server that equips Claude with 13 tools for automated reconnaissance, analysis, vulnerability validation, and exploitation.2GPL 3.0
- AlicenseNot gradedqualityBmaintenanceConfig-driven MCP server that exposes Kali Linux penetration testing tools to AI agents, with automatic tool discovery, man page integration, and local/remote execution modes.MIT
Related MCP Connectors
MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.
AI Reasoning Cache & Consensus Layer with 11 MCP tools via Streamable HTTP.
A paid remote MCP for CLI tool MCP, built to return verdicts, receipts, usage logs, and audit-ready
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/acaranta/hexstrike-docker-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server