[!CAUTION]
此仓库已不再维护,请访问 https://github.com/sadreck/SnitchDNS 获取最新版本。
SnitchDNS
SnitchDNS 是一个由数据库驱动的 DNS 服务器,带有 Web 界面,使用 Python 和 Twisted 编写。所有配置更改立即可见,无需重启任何系统服务,从而简化了 DNS 管理。
其主要功能之一是记录所有 DNS 查询,从而发现网络流量端点;同时,它支持通过电子邮件、Web Push、Slack 和 Teams 发送通知,因此可用于实现蜜罐令牌(Canary Tokens)。红队成员也可使用 SnitchDNS 监控钓鱼域名以检测沙箱,与 SIEM 方案集成,限制对特定 IP 范围的响应,通过 DNS 隧道和泛域名(catch-all)进行数据外泄等。
依赖
安装
请确保使用 git 进行安装,而非手动下载仓库。
文档
通用文档请 参见此处
截图
截图请 参见此处
基本功能
- 数据库驱动。
- 更改在每次 DNS 请求时立即生效。
- 支持的数据库管理系统:
- SQLite
- MySQL / MariaDB
- Postgres
- DNS 服务器
- 支持常用 DNS 记录类型。
A, AAAA, AFSDB, CNAME, DNAME, HINFO, MX, NAPTR, NS, PTR, RP, SOA, SPF, SRV, SSHFP, TSIG, TXT。
- 泛域名(Catch-All)支持。
- 能够匹配任意子域名(不限深度)到特定父域名,例如
*.hello.example.com。
- 未匹配记录转发。
- 可拦截特定查询(如仅
A 和 CNAME),并将其他所有记录转发至第三方 DNS 服务器(如 Google)。
- 正则表达式匹配。
- 标签与别名。
- IP 规则
- 通知。域名被解析时接收通知,方式包括:
- 电子邮件
- Web Push
- Slack
- Microsoft Teams
- 用户管理
- 多用户支持
- LDAP / RADIUS 支持
- 双因素认证
- 密码复杂度管理
- 日志记录
- 所有 DNS 查询均被记录,无论是否匹配。
- CSV 日志输出,便于 SIEM 集成。
- Swagger 2.0 API
- 部署
- 适用于 Ubuntu 18.04 / 20.04 的 Ansible 脚本
- Docker
- 支持通过 CLI 管理区域、记录、用户和设置。
- CSV 导出/导入
使用场景
SnitchDNS 可用于:
- DNS 转发服务器 – 通过 Web 界面监控所有请求。
- 红队 – 实现 IP 限制以阻断沙箱,监控钓鱼域名解析和电子邮件,限制已知 IP 范围的访问。
- DNS 隧道 – 记录所有 DNS 请求并实现数据外泄。
- Let's Encrypt DNS Challenge – 通过 API 或 CLI 接口实现。
- 广告拦截。
- 蜜罐令牌(Canary Tokens)。
- 与 SIEM 方案集成。
更多使用场景详情请参见 使用场景文档
局限性
- SnitchDNS 目前以单线程运行,因此可能不适用于每分钟数百个 DNS 请求的环境。
贡献
如果您希望贡献代码、提出功能请求或报告错误,请随时提交 Issue(特别是在开始编写代码之前)。
安全
如果您在 SnitchDNS 中发现任何安全漏洞,暂时请通过 Twitter 联系我 – @sadreck
致谢
UI
开发
- Lambros Zannettos | @_C960_ – 感谢他帮助编写 Dockerfile。