Skip to content

安全边界与基线

安全配置应先回答两个问题:请求是否一定经过 fn-knock,以及网关拿到的是否是真实客户端 IP。两者任一不成立,认证、白名单和地区规则都可能与预期不同。

先确认边界

fn-knock 只能约束经过网关入口的流量。以下情况需要在网关外处理:

  • 路由器、云安全组或 Docker 发布了业务服务的原始端口;
  • CDN、反向代理或隧道直接回源到业务服务;
  • 前置代理把自己的内网地址误传成客户端 IP;
  • 管理面板、数据库或 SSH 被单独暴露。

网关会把回环、私网、链路本地地址和 CGNAT 地址视为本地来源,并在认证预检时直接放行。这一规则优先于会话与 IP 授权。因此,验证受保护服务时请使用移动网络或其他真实公网链路;不要只在家庭 Wi-Fi 中测试。

建议的安全基线

  1. 只对外开放网关所需端口;管理入口仅放在局域网、VPN 或可信反代后。
  2. 为网关准备正式 HTTPS 证书,并为每个公开 Host 配置正确的 DNS。
  3. 创建至少两个可恢复的登录凭据;常用设备再绑定 Passkey。
  4. 新服务默认开启“要求登录”,只有明确需要时才设为公开。
  5. 打开请求日志和事件通知,先观察一段时间再收紧 WAF、限流或黑名单规则。
  6. 定期更新宿主机、fn-knock 和上游服务,并在更新前导出受保护的备份。

各层控制的作用

层级解决的问题主要入口
网关可见性限制哪些地区或 CIDR 能碰到网关系统设置 → 网关
映射访问策略决定一个 Host 是公开还是要求登录子域映射
认证与会话确认身份、会话时长和凭据范围认证配置系统设置 → 会话
IP 白名单给固定 IP/CIDR 或登录后的 IP 授权IP 白名单
登录退避与爬虫拦截降低重复尝试和明显扫描的影响系统设置 → 会话 / 拦截
WAF检测或拦截经过网关的 HTTP 请求系统设置 → WAF
主机防火墙收敛原始端口的入站访问仅具备主机能力的部署

这些控制互相补充,不能彼此替代。例如 WAF 不会关闭一个已暴露的数据库端口;白名单也不会修复上游应用漏洞。

真实客户端 IP

来自 CDN、反向代理或隧道的请求,是否能被正确识别取决于上游的真实 IP 头。fn-knock 会依次处理常见的 X-Forwarded-ForX-Real-IPEO-Connecting-IPAli-Real-Client-IP 信息。

当前设置页没有入站可信代理 CIDR 列表;前置代理必须删除或重写外部客户端可伪造的真实 IP 头。若它错误传递了 127.0.0.1192.168.x.x 等地址,公网请求可能被误判为本地豁免。接入 EdgeOne、ESA、Cloudflare 或自建反代后,应分别从外网检查请求日志中的“客户端 IP”和“连接来源 IP”。

发生异常时

  1. 先在请求日志确认请求是否到达网关。
  2. 检查 Host、路径、上游目标和路由类型是否符合预期。
  3. 确认客户端 IP 是否来自真实公网地址,而不是代理地址。
  4. 再查看会话、白名单、WAF 日志和登录退避记录。
  5. 怀疑原始端口暴露时,回到路由器、云安全组和宿主机防火墙逐项检查。

QQ群:1081609274