内网端口被映射公网风险,frp内网穿透安全加固鉴权配置
frp内网穿透本意是方便从外网访问内网服务,但如果直接把内网端口映射到公网,又没有加任何鉴权,就相当于把家里的门钥匙挂在门口。
轻则被扫描爆破,重则内网资源被拖走。
本文要解决的是:如何识别这些风险,并通过frp的鉴权、端口限制、TLS加密和防火墙策略把安全性拉起来。 操作步骤面向零基础用户,按顺序执行即可。
先看风险:裸奔的frp端口会发生什么
只要内网端口被映射到公网,就会面临三类现实风险:
- 扫描与爆破:公网扫描器会持续扫描常见端口,一旦发现开放端口,可能尝试SSH弱口令、Redis未授权、数据库默认密码等攻击。
- frp服务端被恶意利用:如果frps没有鉴权,任何能连接到你frps端口的人都可以注册代理,把你的服务器变成免费跳板。
- 数据明文传输:默认配置下frpc与frps之间没有强制加密,密码、Cookie、会话信息可能被中间人截获。
所以安全加固不是可选操作,而是把内网端口暴露公网前必须完成的动作。
加固前需要准备的三个信息
动手前先确认以下内容:
- frp版本:当前主流是 v0.52 以上,使用TOML格式。旧版本是INI格式,配置写法不同。本文示例基于新版TOML。
- 服务器公网IP:你用来运行frps的云服务器地址。
- 一个有权限修改防火墙的账号:云服务器控制台和系统防火墙都要能操作。
准备好后,登录服务器开始改配置。
核心步骤:frp服务端与客户端的鉴权加固
第一步:在frps服务端开启token鉴权与端口白名单
找到frps的配置文件,通常是 /usr/local/frp/frps.toml,编辑并写入以下内容:
bindPort = 7000
# 鉴权方式改为 token
auth.method = "token"
# 生成一串足够随机的字符串,不要用弱密码
auth.token = "这里改成自己的超长随机字符串"
# 只允许客户端映射10000-20000之间的端口
allowPorts = [
{ start = 10000, end = 20000 }
]
# 强制frpc使用TLS加密通信
transport.tls.force = true
保存后重启frps:
systemctl restart frps
注意:allowPorts 是为了限制frpc能申请的远程端口范围,避免客户端胡乱占用服务器端口。
你可以按自己的业务端口范围调整。
第二步:在frpc客户端配置相同token并开启TLS
打开客户端的 frpc.toml,把服务端IP和token填进去:
serverAddr = "你的服务器公网IP"
serverPort = 7000
# 这里必须与服务端完全一致
auth.token = "这里改成自己的超长随机字符串"
# 客户端也开启TLS
transport.tls.enable = true
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 16022
保存后重启frpc。
如果配置正确,frpc日志里会出现 start proxy success。
第三步:在云服务器防火墙限制映射端口的来源IP
只开放frps的 bindPort(如7000)给frpc连接,映射出的业务端口(如16022)建议限制访问IP。
在云控制台的安全组中,对16022端口设置白名单,只放行你常用出口IP的网段,其他来源一律拒绝。
这样即使token泄露,攻击者也无法从其它IP访问映射出的服务。
避坑指南:这些问题最容易让加固失效
- token用弱密码:
abc123、123456这类token等于没设置。用openssl rand -base64 24生成随机字符串。 - 忘记关闭frps的dashboard:dashboard如果开放公网且使用默认账号密码,相当于把管理页面也暴露出去。建议绑定
127.0.0.1或通过内网访问,不要直接映射到公网。 - allowPorts范围过大:设置为
1-65535等于没限制。只留你实际用的端口范围。 - TLS内网穿透配置不对称:服务端设置了
transport.tls.force = true,客户端却没有配置transport.tls.enable = true,会导致连接失败。
验证加固效果:三步确认配置已生效
- 看frps日志:执行
journalctl -u frps -f,能看到所有连接来源和是否通过鉴权。如果出现大量unauthorized日志,说明token已生效。 - 用错误token测试:临时改一个错token重启frpc,连接应被拒绝。测试完改回来。
- 尝试从外网访问映射端口:比如用手机流量访问
http://你的服务器IP:16022,正常情况下无法访问;同时检查云监控里的端口扫描记录,开放后应只有你的IP能通。
经过以上配置,你的frp内网穿透已经不是裸奔状态:token挡住未授权客户端,端口范围挡住乱映射,TLS和数据传输加密挡住偷听,防火墙白名单挡住无关IP。
如果你正在处理自己内网端口被映射公网的安全问题,建议按本文步骤完整执行一遍,再根据自己业务微调端口范围。
遇到连不上时,优先检查frps和frpc日志,很多问题都出在token或TLS配置不一致上。