hexstrike-ai
HexStrike AI — Docker + 远程 MCP
基于 linuxserver.io Kali 基础镜像的 Docker 化 HexStrike AI,并附带一个新的远程、可流式 HTTP MCP 服务器,使得完整的 HexStrike 工具集可以通过网络(例如从 Claude Code)驱动,而不仅仅是从本地 stdio 客户端。
[!WARNING] 这会将攻击性安全工具的自主执行暴露到网络上。 连接到 MCP 端点的客户端实际上可以在容器的工具库中执行远程命令。在隔离实验室以外的任何地方运行之前,请阅读 安全 部分。始终设置
HEXSTRIKE_MCP_TOKEN,仅在受信任/隔离的网络或 VPN 上运行,并且只针对你明确授权测试的系统。
[!NOTE] 没有发布预构建镜像。 由于完整的 Kali 工具集使镜像非常大(>10 GB — 构建后大约 ~17 GB),因此不会推送到 Docker Hub 或任何注册表。你需要从此仓库自行构建(参见 快速开始);确保 Docker 主机有足够的可用磁盘空间。
目录
Related MCP server: MCP Tools
功能特性
完整的上游 HexStrike AI 工具包 — 通过其 Flask API 驱动的 150+ 安全工具 — 预装在基于 Kali 的镜像上,无需手动环境设置。
新增:
hexstrike_mcp_http.py,一个可流式 HTTP MCP 服务器,在端口8889(路径/mcp)上通过网络暴露所有上游@mcp.tool()定义,因此可以远程驱动,而不仅仅是通过本地 stdio。可选的 bearer token 认证,保护 MCP 端点。
可通过浏览器访问的 KDE 桌面(Selkies/KasmVNC,继承自基础镜像),用于在自动化工具运行的同时进行交互式工作。
s6-overlayv3 进程监督,具有显式的服务排序 — MCP 服务等待 HexStrike API 服务器被定义为依赖项。持久化的
/config卷:每个工具的 virtualenv 和文件管理器状态在容器重启后仍然存在。可重现的构建:
uv管理 Python 环境,上游源码在固定的 git 提交处拉取,而不是 vendored。
概述
上游 HexStrike AI 提供了两个 Python 入口点:
hexstrike_server.py— 一个 Flask API 服务器,监听端口8888,通过subprocess执行 150+ 外部安全工具,并通过 HTTP 暴露其结果(包括一个报告工具可用性的/health端点)。hexstrike_mcp.py— 一个 FastMCP 服务器,将 MCP 工具调用转换为对上述 API 服务器的 HTTP 调用。上游仅通过 stdio 传输运行它,因此只能由与容器在同一台机器上的 MCP 客户端驱动。
此仓库添加了 hexstrike_mcp_http.py,它导入上游的 hexstrike_mcp.py 模块并整体重用其 setup_mcp_server() 函数 — 每个工具定义,不变 — 但通过 MCP 可流式 HTTP 传输在端口 8889 的路径 /mcp 上提供服务,而不是 stdio。这是唯一的功能差异:相同的工具表面,可以远程访问(例如从运行在不同机器上的 Claude Code),而不是仅从同地进程访问。
uv(Astral)管理 Python 解释器和依赖环境,并在容器启动时用于运行两个进程。
架构
基础镜像:
lscr.io/linuxserver/kali-linux:latest,提供可通过浏览器访问的 KDE 桌面(Selkies/KasmVNC),端口3000(HTTP)和3001(HTTPS),Kali-rolling apt 仓库,以及s6-overlayv3 init。添加的服务: 两个
s6-overlaylongrun服务叠加在基础镜像的 init 系统之上,并注册在user服务包中:root/etc/s6-overlay/s6-rc.d/hexstrike-server— 以abc用户身份运行uv run --no-sync python hexstrike_server.py --port 8888。root/etc/s6-overlay/s6-rc.d/hexstrike-mcp— 以abc用户身份运行uv run --no-sync python hexstrike_mcp_http.py --server http://127.0.0.1:8888 --host 0.0.0.0 --port 8889。其dependencies.d/hexstrike-server条目将其排序为在 API 服务器之后启动。
上游源码未 vendored。
Dockerfile在构建时git clone0x4m4/hexstrike-ai并检出固定的提交(ARG HEXSTRIKE_REF,默认d689933ff579d839c676c82b231f8e98326c5f04),仅将hexstrike_server.py、hexstrike_mcp.py和hexstrike-ai-mcp.json复制到/app。这保持了仓库的小巧,并使上游升级成为一行更改。Python 环境: 由
uv管理的 CPython 3.12(通过.python-version固定),依赖项来自pyproject.toml,在构建时通过uv sync --no-dev安装到/app/.venv。持久化引导:
root/custom-cont-init.d/10-hexstrike-persist在 longrun 服务启动之前以 root 身份运行(参见 持久化)。
端口
端口 | 协议 | 描述 |
3000 | HTTP | Web 桌面(Selkies/KasmVNC),继承自 linuxserver Kali 基础镜像 |
3001 | HTTPS | Web 桌面,TLS |
8888 | HTTP | HexStrike AI API 服务器( |
8889 | HTTP | HexStrike AI MCP 服务器,可流式 HTTP 传输,端点路径 |
快速开始
Docker Compose(推荐)
所有配置直接位于 docker-compose.yml 中 — 没有 .env 文件。在首次启动之前,编辑 environment: 块并设置:
HEXSTRIKE_MCP_TOKEN— MCP 端点的 bearer token。使用openssl rand -hex 32生成一个强值并粘贴进去(或留空以使用开放端点 — 仅限隔离网络上的实验室/CTF)。CUSTOM_USER/PASSWORD— Web 桌面的基本认证登录。
然后构建并启动:
# generate a token to paste into docker-compose.yml:
openssl rand -hex 32
docker compose up -d --build构建过程庞大且缓慢,没有预构建镜像可拉取 — 生成的镜像**>10 GB(~17 GB),因此不会发布到任何注册表,必须本地构建。它安装了 kali-linux-headless 元包以及一长串命名工具,编译 angr / pwntools wheel(因此镜像中包含 build-essential 和开发头文件),从源码构建三个 Go 工具,并下载一个 rustscan 发布包。预计首次构建需要大量时间,并且需要大量可用磁盘空间**(预算 ~20 GB+ 余量,迭代时更多)。
纯 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 指向端口 8889 上的 MCP 端点。如果设置了 HEXSTRIKE_MCP_TOKEN(强烈推荐 — 参见 安全),每个请求必须包含匹配的 Authorization: Bearer <token> 头;只有在 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 可流式 HTTP 传输具有内置的 DNS 重绑定保护,默认只信任localhost的Host头。此镜像默认禁用此检查,以便你可以通过 IP 或主机名在局域网内访问端点。如果你反而看到此错误,要么升级到此镜像(默认已处理),要么将HEXSTRIKE_MCP_ALLOWED_HOSTS设置为客户端发送的确切host:port值。
环境变量
变量 | 设置位置 | 默认值 | 描述 |
|
|
| linuxserver 约定:容器内 |
|
|
| linuxserver 约定: |
|
|
| 容器时区。 |
|
|
| Web 桌面的 Basic-auth 用户名(linuxserver Kali 基础镜像)。 |
|
|
| Web 桌面的 Basic-auth 密码。 |
|
| (空) |
|
| 可选, |
| HexStrike API 服务器绑定的端口。两个 |
| 可选, |
| MCP streamable-HTTP 服务器绑定的端口(注意事项同上)。 |
| 可选 |
| MCP 服务器绑定的网络接口;由 |
| 可选, | (空) | 传输层 DNS 重绑定保护的逗号分隔 |
| 可选, |
| 控制暴露哪些 MCP 工具 — 参见 MCP 工具过滤。 |
hexstrike_mcp_http.py 还接受 --server / HEXSTRIKE_SERVER_URL、--path / HEXSTRIKE_MCP_PATH、--timeout / HEXSTRIKE_TIMEOUT 和 --allowed-hosts / HEXSTRIKE_MCP_ALLOWED_HOSTS 覆盖项。随附的 s6 运行脚本只传递 --server、--host 和 --port;其余参数从各自的环境变量回退中读取(因此 HEXSTRIKE_MCP_ALLOWED_HOSTS 在容器上设置后即可生效),或保持其内置默认值(/mcp、上游默认请求超时,以及禁用 Host 检查)。
持久化
/config 卷是 linuxserver 约定的主目录,也是唯一能在容器重建后保留的路径。cont-init 脚本 root/custom-cont-init.d/10-hexstrike-persist 在 longrun 服务启动前以 root 身份运行,并且:
创建
/config/hexstrike/envs、/config/hexstrike/files和/config/hexstrike/output。将上游硬编码的
/tmp/hexstrike_envs和/tmp/hexstrike_files路径分别替换为指向/config/hexstrike/envs和/config/hexstrike/files的符号链接,从而使 HexStrike 按需构建的每个工具的 Python 虚拟环境,以及其文件管理器的读/写区域,在容器重启后得以保留。通过
lsiown将持久化目录树chown为abc:abc(遵循PUID/PGID)。
各个工具运行期间创建的动态 /tmp/<tool>_output 目录不会被符号链接,并且保持临时性 — 如果你需要某工具的输出在重启后保留,请将该工具显式指向 /config/hexstrike/output。
Web 桌面访问
在浏览器中打开 https://<HOST>:3001/,使用上面配置的 CUSTOM_USER / PASSWORD 凭据登录(HTTP 桌面也可在端口 3000 上无 TLS 访问)。
健康检查
curl http://<HOST>:8888/health从 HexStrike API 服务器返回 JSON,列出容器内 PATH 上检测为可用的工具。
安全
[!WARNING]
8889上的 MCP 端点允许已连接的客户端自主驱动容器内攻击性安全工具的执行 — 这本质上就是设计上的远程命令执行,仅受你配置的 bearer token 约束。
始终设置
HEXSTRIKE_MCP_TOKEN。 使用openssl rand -hex 32生成并保密。将其留空会使 MCP 端点无需认证。仅在受信任/隔离的网络或 VPN 上暴露此服务。 不要将端口
8889(或8888)发布到公共互联网。仅针对你被明确授权测试的系统。 该容器内置了真实的攻击性安全工具,能够进行主动扫描、漏洞利用、凭据攻击等。
容器被授予
NET_RAW和NET_ADMIN能力(参见docker-compose.yml/docker run示例),因为多个工具 —nmapSYN 扫描、masscan、responder等 — 需要原始套接字。这些权限比--privileged更窄,但仍然有实质性的提升;仅当你需要这些扫描类型时才授予它们。认证实现为一个极简的 ASGI 中间件(
hexstrike_mcp_http.py中的BearerTokenASGIMiddleware),它使用常数时间比较检查Authorization头,并在未认证请求到达 MCP 应用之前以401拒绝它们 — 它不会缓冲或以其他方式干扰 streamable-HTTP/SSE 响应流。
工具覆盖
工具集是精选的,并非详尽无遗:
kali-linux-headless元包,以及在Dockerfile中明确列出的工具列表(HexStrike 的/health端点探测的工具,以及常见的侦察/Web/漏洞利用实用程序)— 例如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资产中,构建过程在安装前会解压;尽力而为 — 如果无法解析该资产,构建会继续而不安装它)。
上游 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 时,取消注释并在 docker-compose.yml 的 build: 键下设置 args: HEXSTRIKE_REF: 条目,然后运行 docker compose up -d --build。
致谢与许可证
HexStrike AI 由 0x4m4 开发 — 本镜像打包的安全自动化平台,以 MIT 许可证发布。完整条款请参阅上游的
LICENSE文件。linuxserver.io
kali-linux镜像 — 提供 Kali 环境和 Web 桌面的基础镜像。
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