之前教程介绍的frp内网穿透都是使用tcp模式,但是tcp模式直接将端口映射到公网IP,容易被扫描爆破。仍然存在一定的风险。我们可以使用frp提供的stcp方式避免端口公开,要求访问者运行一个frpc作为认证和流量转发,将访问者本地端口绑定到内网frpc服务。内网frpc端口不再公开映射。frps配置中间传输服务器端的frps配置保持不变。参考上一篇文章。如果要自定义其他端口,注意两端frpc中的“server_addr”和“server_port”参数要保持一致。frps使用的端口要在防火墙或宝塔放行。frps.ini[common]bind_port=7100token=12310086Ndashboard_port=7501dashboard_user=admindashboard_pwd=admin123客户端stcp方式的演示,我们以windwos的远程桌面为例,不再直接将内网的3389端口映射到本机的端口公网IP,而是通过stcp方式指定访问者的头像,要求访问者运行一个frpc作为身份验证和流量转发,让访问者将访问本地端口的请求转发给内网机器。frpc的两端分为外部的“控制端”和内网的“被控端”。内网被控端编辑fcpc.ini文件。可以自定义服务名称,例如[secret_rdp],只要您知道名称即可。[common]server_addr=serveripserver_port=7100token=12310086N[secret_rdp]type=stcpsk=58iD9tfjPIHQ0dWOlocal_ip=127.0.0.1local_port=3389frpc.exe-cfrpc.ini外网控制端编辑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-cfrpc.ini在面板的两端连接成功我也看到了是stcp中多了一条“secret_rdp”连接记录。当控制端开始连接成功后,你也会在frps中看到连接成功的日志。在外网连接我们的控制终端,打开远程桌面,输入“127.0.0.1:30009”,弹出连接成功的登录界面。原理两端frpc开启的stcp模式是要求frps将一端访问本地端口的请求转发给内网的frpc。一端必须以guest模式运行frpc来表明自己的身份,才能被frps接受和转发。被控端frpc读取配置文件:在“[secret_rdp]”服务中,使用stcp方式将被控端本地3389转发到服务器的frps。“sk”是stcp服务的key,两端的“sk”不匹配,不允许连接。被控端的stcp模式以服务名的形式匹配连接,不需要映射到公网IP的端口,也不再需要remote_port。在控制端配置:[secret_rdp_visitor]service中的“role=visitor”是stcp模式,指定本机的service为“visitor”。“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响应。本文转载自微信公众号《Linux就该这么学》,可以通过以下二维码关注。转载本文,请联系Linux像这样学习公众号。
