Shodan Proxy 不是为了把 API 公开给所有人,而是为了在受控环境里少分发真实 Key、多加一道访问边界。它在客户端和 Shodan API 之间处理 Key 池、来源 IP、敏感路径和管理配置,适合内网工具、共享开发和受控实验环境。
核心结论
当多个客户端需要访问 Shodan,但不应各自持有生产 Key 时使用
把 Key 分散到浏览器、脚本、测试机和多人配置中,泄露与失控风险会快速增加。Proxy 让调用方继续使用近似 Shodan 原始路径,而真实 Key 保留在服务端,再通过白名单与路径规则限制访问范围。
五项核心能力
API 请求转发
按 Shodan 兼容路径接收请求,再附加服务端管理的认证信息。
多 Key 轮询
维护多个 API Key,并以 Round-robin 方式选择,减少客户端配置数量。
IP 白名单
只允许明确来源访问,适合内网、VPN 或固定出口环境。
路径阻止
对扫描、修改、企业接口等不希望开放的路径进行显式限制。
认证管理面板
通过管理界面维护配置与 Key,但管理端必须单独保护。
Docker 部署
提供 Compose 入口,适合快速放入现有容器化环境。
最小 Docker 部署流程
mkdir shodan-proxy && cd shodan-proxy
curl -O https://raw.githubusercontent.com/liuweitao/shodan-proxy/main/compose.yaml
docker compose up -d
启动前应编辑 config/config.yaml 和 Key 配置文件,至少确认以下内容:
allowed_ips只包含可信来源,不使用过宽网段。trusted_proxies与实际反向代理链一致,避免伪造来源地址。blocked_paths阻止不需要开放的扫描、告警或管理类接口。- 管理账号使用强、唯一密码,配置文件权限不允许普通用户读取。
请求方式与 Key 选择逻辑
调用方通常不需要在每个请求中提供真实 Key。没有传 Key,或使用项目约定的占位值时,Proxy 会从自己的 Key 池中选择;调用方显式传入其他 Key 时,则使用调用方提供的 Key。
| 请求情况 | 实际使用的 Key | 建议 |
|---|---|---|
未传 key | Proxy Key 池 | 适合受控客户端 |
| 项目约定的占位 Key | Proxy Key 池 | 适合 Explorer 等兼容前端 |
| 显式传入其他 Key | 调用方 Key | 仅在明确需要时使用,避免日志泄露 |
轮询只是 Key 选择策略,不会改变 Shodan 的权限、积分或速率限制。生产使用仍应记录匿名化调用指标,并对认证错误、额度耗尽与异常请求做告警。
不要直接把默认配置暴露到公网
- 在防火墙层只开放业务必需端口,并把管理端绑定到
127.0.0.1。 - 使用 TLS,限制可信代理,避免错误信任任意
X-Forwarded-For。 - 定期更新镜像并检查白名单、阻止路径和不再使用的 Key。
- 不要在响应、访问日志或错误追踪中输出完整 Key。
- 为高成本或可改变状态的接口设置更严格的路径策略。
与 Shodan Explorer 的推荐组合
Browser → Shodan Explorer → Shodan Proxy → Key Pool → Shodan API
这个组合把“界面”和“凭据”分开:Explorer 负责表单、请求预览和响应展示;Proxy 负责真实 Key、来源限制和路径控制。这样比把生产 Key 直接注入公开网页更可控。
适合与不适合的部署场景
内网研发、固定出口主机、VPN 用户、共享 API 调试台、多个内部脚本统一接入。
匿名公网代理、规避官方额度、未经授权的扫描服务,或没有能力维护访问控制和密钥安全的环境。
参考资料
本文用于产品理解、开发学习与合法授权场景说明。第三方文档、软件版本和平台规则可能更新,请以来源页面最新内容为准。
常见问题
Shodan Proxy 能绕过 Shodan 的额度或权限吗?
不能。它只转发请求、选择已配置的 Key 并执行本地访问控制,最终权限和额度仍由每个 Shodan Key 的计划与官方规则决定。
适合直接暴露到公网吗?
不推荐。项目说明明确建议在受控网络中使用。确需远程访问时,应增加强认证、TLS、防火墙、可信代理配置和严格白名单,并把管理端限制在本机或 VPN。
多个 API Key 会怎样分配?
代理可维护多个 Key,并以轮询方式选择。它不是完整的额度调度系统,仍应监控每个 Key 的状态、剩余额度和错误。
为什么和 Shodan Explorer 搭配?
Explorer 需要一个兼容 Shodan 请求约定的后端。通过 Proxy,浏览器可以使用占位 Key,而真实 Key 留在服务端,并受 IP 白名单和阻止路径控制。