Skip to main content
Glama
acaranta

hexstrike-ai

by acaranta

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-overlay v3 进程监督,具有显式的服务排序 — 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-overlay v3 init。

  • 添加的服务: 两个 s6-overlay longrun 服务叠加在基础镜像的 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 clone 0x4m4/hexstrike-ai 并检出固定的提交ARG HEXSTRIKE_REF,默认 d689933ff579d839c676c82b231f8e98326c5f04),仅将 hexstrike_server.pyhexstrike_mcp.pyhexstrike-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 服务器(hexstrike_server.py

8889

HTTP

HexStrike AI MCP 服务器,可流式 HTTP 传输,端点路径 /mcp

快速开始

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 重绑定保护,默认只信任 localhostHost 头。此镜像默认禁用此检查,以便你可以通过 IP 或主机名在局域网内访问端点。如果你反而看到此错误,要么升级到此镜像(默认已处理),要么将 HEXSTRIKE_MCP_ALLOWED_HOSTS 设置为客户端发送的确切 host:port 值。

环境变量

变量

设置位置

默认值

描述

PUID

docker-compose.yml / -e

1000

linuxserver 约定:容器内 abc 服务用户运行时所使用的 UID。

PGID

docker-compose.yml / -e

1000

linuxserver 约定:abc 服务用户运行时所使用的 GID。

TZ

docker-compose.yml / -e

Etc/UTC

容器时区。

CUSTOM_USER

docker-compose.yml

kali

Web 桌面的 Basic-auth 用户名(linuxserver Kali 基础镜像)。

PASSWORD

docker-compose.yml

changeme

Web 桌面的 Basic-auth 密码。

HEXSTRIKE_MCP_TOKEN

docker-compose.yml

(空)

:8889/mcp 端点所需的 Bearer token。请将其设置为 openssl rand -hex 32 生成的值;仅在隔离/开放实验室环境中才可留空。

HEXSTRIKE_SERVER_PORT

可选,docker-compose.yml 中有注释示例

8888

HexStrike API 服务器绑定的端口。两个 s6 运行脚本都会读取该值;如果更改它,还必须更新已发布的端口映射。

HEXSTRIKE_MCP_PORT

可选,docker-compose.yml 中有注释示例

8889

MCP streamable-HTTP 服务器绑定的端口(注意事项同上)。

HEXSTRIKE_MCP_HOST

可选

0.0.0.0

MCP 服务器绑定的网络接口;由 hexstrike-mcp 运行脚本直接透传,并被 hexstrike_mcp_http.py 作为环境变量回退读取。

HEXSTRIKE_MCP_ALLOWED_HOSTS

可选,-e

(空)

传输层 DNS 重绑定保护的逗号分隔 Host/Origin 白名单(例如 hexstrike.lan:8889,10.0.0.5:8889)。为空(默认)时 Host 检查被禁用,因此端点可通过任何地址/主机名访问。设置它以将端点锁定到特定主机名。

HEXSTRIKE_MCP_TOOL_FILTER / _INCLUDE_ONLY / _EXCLUDE_TOOLS / _KEEP_TOOLS

可选,-e

auto / 空

控制暴露哪些 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 身份运行,并且:

  1. 创建 /config/hexstrike/envs/config/hexstrike/files/config/hexstrike/output

  2. 将上游硬编码/tmp/hexstrike_envs/tmp/hexstrike_files 路径分别替换为指向 /config/hexstrike/envs/config/hexstrike/files 的符号链接,从而使 HexStrike 按需构建的每个工具的 Python 虚拟环境,以及其文件管理器的读/写区域,在容器重启后得以保留。

  3. 通过 lsiown 将持久化目录树 chownabc: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_RAWNET_ADMIN 能力(参见 docker-compose.yml / docker run 示例),因为多个工具 — nmap SYN 扫描、masscanresponder 等 — 需要原始套接字。这些权限比 --privileged 更窄,但仍然有实质性的提升;仅当你需要这些扫描类型时才授予它们。

  • 认证实现为一个极简的 ASGI 中间件(hexstrike_mcp_http.py 中的 BearerTokenASGIMiddleware),它使用常数时间比较检查 Authorization 头,并在未认证请求到达 MCP 应用之前以 401 拒绝它们 — 它不会缓冲或以其他方式干扰 streamable-HTTP/SSE 响应流。

工具覆盖

工具集是精选的,并非详尽无遗:

  • kali-linux-headless 元包,以及在 Dockerfile 中明确列出的工具列表(HexStrike 的 /health 端点探测的工具,以及常见的侦察/Web/漏洞利用实用程序)— 例如 nmapmasscangobusterferoxbusterffufdirbdirsearchniktosqlmapwpscanwhatwebwafw00fhydrajohnhashcatmedusaevil-winrmamassdnsenumdnsreconfiercetheharvesterrespondernucleisubfinderhttpx-toolkitarjunparamspiderhakrawlergetallurls (gau)、netexecenum4linux-ngsmbclientseclistswordlistsbinwalkforemoststeghideexiftoolradare2gdb

  • 三个 Go 构建的工具在构建时从源码编译,然后剥离 Go 工具链:katanadalfoxwaybackurls

  • 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 个。启动日志会打印数量和隐藏列表。

通过容器上的环境变量控制:

变量

默认值

作用

HEXSTRIKE_MCP_TOOL_FILTER

auto

auto 隐藏缺少二进制的工具;off 暴露全部约 150 个。

HEXSTRIKE_MCP_INCLUDE_ONLY

(空)

逗号分隔的白名单 — 仅暴露这些工具(覆盖 auto)。

HEXSTRIKE_MCP_EXCLUDE_TOOLS

(空)

始终隐藏的逗号分隔工具列表。

HEXSTRIKE_MCP_KEEP_TOOLS

(空)

始终保留的逗号分隔工具列表(保护它们不被自动丢弃)。

更新上游固定版本

上游源代码在构建时按 ARG HEXSTRIKE_REFDockerfile)中指定的提交进行克隆。要获取更新的上游更改,请提升该固定版本并重新构建:

docker build -t hexstrike-ai:local --build-arg HEXSTRIKE_REF=<new-sha> .

或者,使用 Compose 时,取消注释并在 docker-compose.ymlbuild: 键下设置 args: HEXSTRIKE_REF: 条目,然后运行 docker compose up -d --build

致谢与许可证

  • HexStrike AI0x4m4 开发 — 本镜像打包的安全自动化平台,以 MIT 许可证发布。完整条款请参阅上游的 LICENSE 文件。

  • linuxserver.io kali-linux 镜像 — 提供 Kali 环境和 Web 桌面的基础镜像。

F
license - not found
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • F
    license
    Not graded
    quality
    F
    maintenance
    An 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
  • A
    license
    Not graded
    quality
    A
    maintenance
    A 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.
    2
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Config-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

View all related MCP servers

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

View all MCP Connectors

Latest Blog Posts

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