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, 反钓鱼, 域名分析, 域名劫持检测, 威胁情报, 开发者工具, 攻击面发现, 无后门, 漏洞发现, 网络安全, 请求拦截, 逆向工具, 邮件安全, 隐私保护