mclose/dns-mcp

GitHub: mclose/dns-mcp

基于 MCP 协议的 DNS 安全分析服务器,为 AI 助手提供 DNSSEC 验证、邮件认证检查和 RDAP 查询等专业安全分析能力。

Stars: 1 | Forks: 0

# DNS MCP 服务器 通过 MCP 为 AI 助手提供实时 DNS 安全分析。赋予你的助手像安全从业者一样调查域名的能力 —— DNSSEC 链验证、邮件认证态势以及注册情报 —— 无需离开你的聊天会话。 由网络安全专业人士构建,专为 SOC 调查工作流打造。 这不是玩具 —— 与你在命令行运行的查询相同,可通过任何兼容 MCP 的助手实时访问。 ## 工具 ### DNS 工具 | 工具 | 描述 | |------|-------------| | `dns_query` | 标准 DNS 查询 (A, AAAA, MX, TXT, NS, SOA, CNAME, PTR, SRV) | | `dns_dig_style` | 详细的 dig 风格输出,包含 DNSSEC 标志 (设置 DO 标志) | | `dns_query_dot` | DNS over TLS (DoT) 查询 — TLS 会话信息、EDNS 伪节、DNSSEC 标志 | | `dns_dnssec_validate` | 类似 `delv +vtrace` 的信任链验证 | | `nsec_info` | NSEC/NSEC3 不存在性分析和区域可遍历性评估 | | `reverse_dns` | IP 地址的 PTR 记录查询 | | `timestamp_converter` | 在 ISO、epoch 和人类可读时间戳之间转换 | | `detect_hijacking` | 测试解析器是否存在 DNS 劫持/篡改 (NXDOMAIN 探测、已知记录、DNSSEC、身份) | ### 邮件安全工具 | 工具 | 描述 | |------|-------------| | `check_spf` | SPF 记录解析,包含递归 include 解析 (RFC 7208 10 次查找限制) | | `check_dmarc` | DMARC 策略检索,包含组织域回退 | | `check_dkim_selector` | 针对选择器+域名对的 DKIM 公钥记录验证 | | `check_bimi` | BIMI 记录和 VMC (Verified Mark Certificate) 检查 | | `check_mta_sts` | MTA-STS DNS 记录 + HTTPS 策略文件获取 (模式, MX 模式, max_age) | | `check_smtp_tlsrpt` | SMTP TLS 报告记录检查 | | `check_dane` | 针对域名 MX 主机的 DANE TLSA 记录检查及 DNSSEC 验证 | | `check_tlsa` | 针对任意主机名、端口和协议的独立 TLSA 记录查询 | | `rdap_lookup` | 通过 RDAP 获取域名注册数据 (现代化的 WHOIS 替代方案) | ### 实用工具 | 工具 | 描述 | |------|-------------| | `ping` | 健康检查 — 返回带有时间戳的 pong | | `server_info` | 显示解析器配置:dnspython 版本、名称服务器、EDNS 设置 | | `quine` | 返回此服务器的源代码 | | `session_stats` | 此容器会话的每次工具调用计数、错误率和延迟 | | `reset_stats` | 重置会话统计信息和时钟,无需重启容器 | ## 分析师提示词 该服务器附带三个分析师提示词模板。任何兼容 MCP 的客户端都可以列出并调用它们 —— 无需特定于 Claude 的配置。 | 提示词 | 功能 | |--------|-------------| | `email_security_audit` | 域名邮件安全审计:SPF, DKIM, DMARC, MTA-STS, BIMI — 评级 A 到 F,并附优先级建议 | | `dnssec_chain_audit` | 从 IANA 根信任锚点到目标域名的完整 DNSSEC 信任链审计 | | `soc_email_forensics` | 针对原始邮件(.eml 或粘贴的邮件头)的网络钓鱼取证分析 — 返回 TRUSTABLE / SUSPICIOUS / PHISHING / FURTHER ANALYSIS REQUIRED | 提示词为会话设定分析师背景和工具使用策略。LLM 按顺序运行适当的工具并综合生成结构化报告。 **客户端支持说明:** MCP 提示词调用需要客户端 UI 支持。Claude Code CLI 通过斜杠命令支持提示词(见快速入门 §4)。Claude Desktop 目前仅公开 MCP 工具 —— 提示词已注册但无法从 UI 访问。在 Desktop 中临时使用工具,或描述你想要的分析,模型将应用相同的工作流。 ## 示例 询问你的助手:*"检查 deflationhollow.net 的邮件安全态势"* 助手将依次调用 `check_spf`、`check_dmarc`、`check_dane`、`check_mta_sts` 和 `check_bimi` 并返回完整的分析: ``` ✅ SPF: Hard fail (-all), delegated to ForwardEmail, 5 lookups (under RFC limit) ✅ DMARC: p=reject, pct=100 — full enforcement, aggregate reporting configured ⚠️ DANE: TLSA records present but unverifiable — DNSSEC not enabled on zone ⚠️ MTA-STS: Not configured — no TLS enforcement policy published ⚠️ BIMI: Not configured ``` **总体:B+ — 基础扎实,发现三个可操作的差距。** 无需复制粘贴 dig 命令。无需切换标签页。只需一个问题。 ## 快速入门 ### 前置条件 - Docker ### 1. 构建 ``` git clone https://github.com/mclose/dns-mcp.git cd dns-mcp make build ``` ### 2. 连接 任何支持 stdio 传输的 MCP 客户端均可使用。服务器配置块在所有客户端中相同 —— 详见 [客户端支持](#client-support) 获取特定客户端的设置说明和配置文件位置。 `--dns 9.9.9.9` 标志确保无论主机的 DNS 配置如何,都能进行 DNSSEC 正确解析。 ### 3. 验证 ``` make test # unit tests inside container ./test-mcp-stdio.sh # end-to-end stdio test ``` ### 4. 开始分析 连接后,直接询问: 支持 MCP 提示词的客户端也可以直接调用结构化分析师工作流 —— 详见 [客户端支持](#client-support)。 ## 客户端支持 所有客户端使用相同的服务器配置块。`command` 和 `args` 在所有地方完全相同 —— 只有配置文件位置和提示词调用方式不同。 ``` { "mcpServers": { "dns-mcp": { "command": "docker", "args": ["run", "--rm", "-i", "--dns", "9.9.9.9", "dns-mcp", "python", "server.py"] } } } ``` ### Claude Desktop **提示词:** 不支持 —— Desktop 仅公开 MCP 工具。请使用临时提问。 配置文件: - **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json` - **Windows**: `%APPDATA%\Claude\claude_desktop_config.json` - **Linux**: `~/.config/Claude/claude_desktop_config.json` ### Claude Code CLI **提示词:** 通过 `/` 斜杠命令完全支持。 使用一条命令添加服务器(添加到本地项目配置): ``` claude mcp add dns-mcp -- docker run --rm -i --dns 9.9.9.9 dns-mcp python server.py ``` 或添加 `--scope user` 使其在所有项目中可用。通过在聊天中输入 `/` 来调用提示词 —— 三个分析师提示词显示为: ``` /mcp__dns-mcp__email_security_audit /mcp__dns-mcp__dnssec_chain_audit /mcp__dns-mcp__soc_email_forensics ``` 输入 `/mcp__dns-mcp__` 并按 Tab 键补全以查看所有三个提示词。 ### Gemini CLI **提示词:** 支持(Gemini CLI 实现了完整的 MCP 规范)。 使用一条命令添加服务器: ``` gemini mcp add dns-mcp -- docker run --rm -i --dns 9.9.9.9 dns-mcp python server.py ``` 或手动添加到 `~/.gemini/settings.json`(用户范围)或 `.gemini/settings.json`(项目范围),使用上述相同的 JSON 块。 ### Cursor **提示词:** 请根据你安装的版本进行验证 —— Cursor MCP 支持正在活跃开发中。配置位置:请查阅 [Cursor MCP 文档](https://docs.cursor.com/context/model-context-protocol)。 将上述 JSON 块添加到你的 Cursor MCP 配置文件中。 ### VS Code (GitHub Copilot / Continue / Cline) **提示词:** 取决于扩展 —— 请查看扩展文档。 配置位置因扩展而异。上述 JSON 块是标准的 stdio 格式;请查阅你扩展的 MCP 设置指南以获取确切的文件路径。 ### Zed **提示词:** 请查看当前的 Zed 发行说明 —— MCP 支持正在活跃开发中。 配置位置:请查阅 [Zed MCP 文档](https://zed.dev/docs/assistant/model-context-protocol)。 ### Windsurf **提示词:** 请查看当前的 Windsurf 发行说明。 配置位置:请查阅 Windsurf MCP 文档。 ## 架构 ``` MCP Client (e.g. Claude Desktop) | | (spawns per-session) v docker run --rm -i dns-mcp python server.py | | stdin/stdout (MCP stdio transport) v FastMCP server (server.py) | - All 22 tools | - dnspython for DNS queries | - requests for RDAP only ``` 无网络端口。无认证令牌。无代理。MCP 客户端管理容器生命周期 —— 每个会话一个容器,退出时清理。 ## 日常工作 | 命令 | 功能 | |---------|-------------| | `make build` | 构建 Docker 镜像(使用层缓存) | | `make rebuild` | 完全清理构建,不使用缓存 —— 当感觉不对劲时使用 | | `make test` | 在容器内运行单元测试 | | `make shell` | 容器内的交互式 shell | | `./test-mcp-stdio.sh` | 端到端 stdio 协议测试 | ## 测试 **单元测试** —— 工具逻辑、输入验证、错误处理: ``` make test # runs pytest inside container ``` **端到端 stdio** —— 通过 stdin/stdout 的完整 MCP 协议: ``` ./test-mcp-stdio.sh ``` ## 安全 - 无 shell 执行 —— 所有 DNS 通过 dnspython,RDAP 通过 requests - 严格的域名验证(正则允许列表) - IP 地址验证(ipaddress 模块) - 查询类型允许列表 - 非根容器用户 (`claude`, uid 1000) - 强制执行 SPF 递归限制 (RFC 7208) - RDAP:HTTP 请求前验证输入,10 秒超时,最多 3 次重定向 ## 文件结构 ``` dns-mcp/ ├── server.py # FastMCP server (22 tools, stdio transport) ├── Dockerfile # Single-stage Alpine image ├── docker-compose.yml # Build target ├── Makefile # build/test/shell ├── requirements.txt # Python dependencies ├── test-mcp-stdio.sh # End-to-end stdio test └── tests/ └── test_tools.py # pytest unit tests ``` ## 远程 / HTTP 传输 `remote` 分支包含此服务器的 HTTP Streamable 传输版本,包括 Flask 认证代理边车、bearer token 认证、fail2ban 集成,以及通过 HTTPS 反向代理公开服务器的说明。如果你需要网络可访问的部署,请参阅该分支。 ## 许可证 MIT
标签:AI辅助安全, BIMI, CDN识别, Claude Desktop, CommandLineTools, DANE, DNSSEC验证, DNS安全, DNS查询, Docker容器, GitHub, IP 地址批量处理, MCP服务器, Python, RDAP, Sigma 规则, SOC工具, SPF/DKIM/DMARC, 反钓鱼, 域名分析, 域名劫持检测, 威胁情报, 开发者工具, 攻击面发现, 无后门, 漏洞发现, 网络安全, 请求拦截, 逆向工具, 邮件安全, 隐私保护