技术记录 · 可复用方法

FRP 远程访问配置与安全边界

远程访问不能只看“能不能连上”,还要同时控制端口暴露、认证强度、访问来源、日志留存和故障回退。

运维终端浏览器 / SSH 公网 FRPS认证 / 端口 FRPC 隧道内网主动连接 内网服务Web / NAS 风险点弱口令 / 扫描 控制点白名单 / 日志

适用场景

FRP 适合把内网 Web 管理页、临时业务系统、NAS 页面或特定 TCP 服务通过公网服务器转发出来。它的优势是部署轻、穿透能力强,但也意味着公网暴露面会扩大,所以必须把“访问便利”和“安全边界”一起设计。

核心目标只暴露必要端口,减少可扫描面。
关键风险弱口令、默认端口、日志缺失、内网服务权限过大。
验收标准可访问、可审计、可关闭、可回退。

推荐配置思路

1
公网服务器只作为入口

FRPS 放在公网服务器上,安全组仅开放 FRP 控制端口和必要访问端口,不要把管理端口、数据库端口直接暴露到互联网。

2
内网客户端主动连接

FRPC 从内网主动连出,避免在内网边界设备上大量做端口映射。每个服务单独命名,便于日志追踪和临时关闭。

3
按用途分层授权

管理类服务优先限制访问来源 IP;临时服务设置独立端口和有效期;长期服务增加二次认证或 VPN 入口。

配置样例

以下是示意配置,实际部署时需要替换域名、端口和密钥,并避免使用弱口令。

# frps.toml - 公网服务端示例
bindPort = 7000
transport.tcpMux = true

# 认证密钥需要足够复杂,且不要和其他系统共用
auth.method = "token"
auth.token = "replace_with_a_long_random_token"

# 建议限制可开放端口范围,避免客户端随意暴露服务
allowPorts = [
  { start = 20000, end = 20100 }
]

# frpc.toml - 内网客户端示例
serverAddr = "your-server.example.com"
serverPort = 7000
auth.method = "token"
auth.token = "replace_with_a_long_random_token"

[[proxies]]
name = "internal-web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8080
remotePort = 20080

安全检查清单

  • 公网服务器安全组只开放必要端口,并定期复查。
  • FRP token 使用长随机字符串,避免沿用简单密码。
  • 远程桌面、数据库、摄像头后台不建议直接暴露到公网。
  • 管理入口应增加 IP 白名单、VPN、反向代理认证或二次验证。
  • 保留 FRPS / FRPC 日志,异常连接可以追溯来源和时间。
  • 每个映射有负责人、有用途、有关闭时间,避免临时端口长期遗留。

排障顺序

检查项判断方法常见原因
客户端是否连上 FRPS看 frpc 日志是否出现 login successserverAddr、端口、token 错误
公网端口是否开放公网 telnet / nc 测试 remotePort安全组未放行、防火墙拦截
本地服务是否正常在内网机器访问 127.0.0.1:localPort服务未启动、端口填错
访问是否被源站拒绝查看本地服务日志和反代日志Host 绑定、权限策略、证书不匹配