之前教程介绍的frp内网穿透都是使用tcp模式,但是tcp模式直接将端口映射到公网IP,容易被扫描爆破。仍然存在一定的风险。我们可以使用frp提供的stcp方式避免端口公开,要求访问者运行一个frpc作为认证和流量转发,将访问者本地端口绑定到内网frpc服务。内网frpc端口不再公开映射。FRPDesignatedVisitors:SafelyExposeIntranetServicesFRPDesignatedVisitors:SafelyExposeIntranetServicesfrps配置服务器端frps配置作为中间传输保持不变。参考上一篇文章。如果要自定义其他端口,请注意两端。frpc中的“server_addr”和“server_port”参数要保持一致。frps使用的端口要在防火墙或宝塔放行。frps.ini[common]bind_port=7100token=12310086Ndashboard_port=7501dashboard_user=admindashboard_pwd=admin123FRP指定访客:安全暴露内网服务FRP指定访客:安全暴露内网服务客户端stcp方式演示,我们以远程桌面为例。不是直接将内网的3389端口映射到公网IP的端口,而是采用stcp方式来指定访问者的身份,要求访问者跑一个frpc作为身份验证和流量转发。让访问者将访问本地端口的请求转发给内网机器。frpc的两端分为外部的“控制端”和内网的“被控端”。内网被控端编辑fcpc.ini文件。可以自定义服务名称,例如[secret_rdp],只要您知道名称即可。[common]server_addr=服务器ipserver_port=7100token=12310086N[secret_rdp]type=stcpsk=58iD9tfjPIHQ0dWOlocal_ip=127.0.0.1local_port=3389frpc.exe-cfrpc.iniFRP指定访客:安全暴露内网服务FRP指定访客:安全编辑暴露内网服务的外网控制端的fcpc.ini文件。[secret_rdp_visitor]等服务名可以自定义,看名字就知道意思。[common]server_addr=serveripserver_port=7100token=12310086N[secret_rdp_visitor]type=stcprole=visitorsk=58iD9tfjPIHQ0dWOserver_name=secret_rdpbind_addr=127.0.0.1bind_port=30009frpc.exe-RP指定内网访客安全:frpc.ini-RPAuthor:安全暴露内网服务,连接成功。两端都显示连接成功。在frp的在线面板中,也可以看到在stcp中多了一条“secret_rdp”的连接记录。FRP指定访问者:安全暴露内网服务FRP指定访问者:安全暴露内网服务FRP指定访问者:安全暴露内网服务FRP指定访问者:安全暴露内网服务当控制端启动连接成功时你还会看到连接成功的日志帧数。FRP指定访问者:安全暴露内网服务FRP指定访问者:安全暴露内网服务连接外网我们的控制终端,打开远程桌面,输入“127.0.0.1:30009”,弹出登录成功界面离开了。FRPDesignatedVisitors:SafelyExposeIntranetServicesFRPDesignatedVisitors:SafelyExposeIntranetServices原理原理两端frpc启用的stcp模式是要求frps将一端访问本地端口的请求转发给内网frpc。一端必须以guest模式运行frpc来表明自己的身份,才能被frps接受和转发。被控端frpc读取配置文件:“[secret_rdp]”服务,stcp模式,将被控端本地3389转发到服务器frps。“sk”是stcp服务的key,两端的“sk”不匹配,不允许连接。被控端的stcp模式以服务名的形式匹配连接,不需要映射到公网IP的端口,也不再需要remote_port。在控制端配置:[secret_rdp_visitor]服务中的“role=visitor”是指定本机服务为“visitor”的stcp模式。“sk”键。控制端中的“server_name”为要连接的受控端中的服务名,服务名必须一致。“bind_addr”在控制台中必须是“127.0.0.1”。“bind_addr”和“bind_port”这两个参数指的是本地端口。指定本地frpc将本地要连接的端口通过frps转发到被控端。frps进程启动,等待两端frpc的stcp转发配置。被控端frpc启动并读取配置文件:服务名[secret_rdp]以stcp方式将本地3389端口转发给frps。控制端frpc读取配置文件,与frps连接。控制端的frpc配置指定了“sk”键和受控端的服务名,frps需要将控制端的本地30009端口绑定到受控端的[secret_rdp]服务。控制端访问本地30009端口,请求由控制端的frpc转发给frps,frps再将请求转发给被控端的[secret_rdp]服务。受控终端[secret_rdp]服务还指示受控终端的哪些端口接收响应和处理转发的请求。总结流程就是frpc指定使用stcp访问,在转发请求前需要验证正确的身份和服务名,并将访问者本地端口绑定到内网frpc服务。不再将被控端直接映射到公网端口,避免因公开泄露而被扫描、被爆破的风险,安全暴露内网服务。表达水平有限。把上面的步骤多看几遍,就是把访问者本地的端口绑定到内网frpc服务上。快乐。同时也可以继续练习安全暴露其他内网服务,比如MySQL:指定控制端访问本地33306端口的响应,由内网的MySQL3306响应。
