文章总结: 本文详细介绍了开源内网穿透工具frp的功能特性、配置方法和应用场景。frp采用C/S架构,支持TCP/UDP/HTTP/HTTPS等协议,提供加密认证和P2P通信能力。文档通过具体示例演示了ssh和web服务的穿透配置,特别强调了stcp模式的安全优势,并指出该工具常被安全软件识别为黑客工具。 综合评分: 78 文章分类: 安全工具,内网渗透,红队,渗透测试,解决方案
frp | 开源内网穿透利器,速速用起来
原创
d0ublewei d0ublewei
大伯为安全
2024年8月17日 14:35 湖北
在小说阅读器读本章
去阅读
01**
概述
1、frp 是一款高性能的反向代理应用,专注于内网穿透,采用 C/S 模式,将服务端部署在具有公网 IP 的机器上,客户端部署在内网或防火墙内的机器上,通过访问暴露在服务器上的端口,反向代理到处于内网的服务。
2、在此基础上,frp 支持 TCP, UDP, HTTP, HTTPS 等多种协议,提供了加密、压缩,身份认证,代理限速,负载均衡等众多能力。
3、此外,还可以通过 xtcp 实现 P2P 通信。
4、使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。
02**
需求场景
比如希望实现在公司通过外网访问家用电脑相关服务(网站、远程桌面等)的功能。且即使没有域名也可通过公网访问。
1、需要一台外网可访问的有固定 ip 的云服务器。
2、再就是一台外网无法访问的无固定 ip 的本地家用电脑。
03**
网站
https://gofrp.org/zh-cn/
https://github.com/fatedier/frp
04**
下载
根据自己的系统实际情况选择即可,一般服务器多半装的都是 Linux 系统,家用电脑应该都是 Windows 系统吧。
我选择的如下图所示,后面实例演示用这两个、我的实际场景中也是用的这两个。不过大版本不是 0.59.0,但这个不影响,你用最新的就行了。
05**
配置文件解释
# 服务端配置(frps.toml) bindPort = 7000 # frp服务的特定端口,防火墙也需放开该端口
# 服务面板可查看frp服务状态信息 webServer.addr = "0.0.0.0" # 后台管理地址,默认是127.0.0.1,如果是公网访问则改成0.0.0.0 webServer.port = 7500 # 后台管理端口 webServer.user = "admin" # (可选)后台登录用户名 webServer.password = "admin" # (可选)后台登录密码
transport.tls.force = true # 服务端将只接受TLS连接 auth.method = 'token' # 客户端访问验证方式 auth.token = "123123" # 客户端访问验证密码,frpc要与frps一致
# 自定义的监听的端口,所有对服务器该端口访问将被转发到本地内网,做了反向代理可不处理防火墙放行 vhostHTTPPort = 8000 vhostHTTPSPort = 45443
# 客户端配置(frpc.toml) transport.tls.enable = true # 从 v0.50.0版本开始,transport.tls.enable的默认值为 true serverAddr = "x.x.x.x" # 公网服务器ip serverPort = 7000 # 服务端端口 auth.method = 'token' # 客户端访问验证方式 auth.token = '123123' # 客户端访问验证密码
[[proxies]] name = "test-tcp" # 客户端服务名 type = "tcp" # 通讯方式 localIP = "127.0.0.1" # 需要暴露的服务的IP localPort = 3389 # 将本地3389端口的服务暴露在公网的5000端口 remotePort = 5000 # 暴露服务的公网入口
[[proxies]] name = "ssh" type = "tcp" localIP = "127.0.0.1" localPort = 22 remotePort = 6000 customDomains = ["域名或ip"]
[[proxies]] name = "web" type = "http" localIP = "127.0.0.1" localPort = 80 customDomains = ["域名或ip"]
老版本是 ini 后缀的配置文件,新版本现在是 toml 后缀配置文件。
06**
公网服务器选择
1、可以选择各大服务商的体验产品,免费限时使用。
2、阿里云服务器:
https://www.aliyun.com/daily-act/ecs/activity_selection?userCode=y7wtz5sg
07**
举例
环境描述
我这里全部使用本地虚拟机演示实现,和使用公网服务器效果都一样。
- 中转(模拟公网)服务器(Linux):192.168.49.191
- 被连接的客户端(Linux):192.168.49.141
- 主动连接的客户端(Windows):192.168.49.190
发布 ssh 和 http 服务
将程序解压并放进中转服务器
在中转服务器的程序目录中执行以下命令,创建并编辑配置文件
vi frps.toml
将以下内容放入配置文件,然后保存退出。
bindPort = 7000 auth.token = "111111" # 服务端仪表盘的端口,可以用浏览器访问查看 webServer.addr = "0.0.0.0" webServer.port = 7500 # 服务端仪表盘的用户密码 webServer.user = "admin" webServer.password = "admin" # 虚拟主机端口 vhostHTTPPort = 8080
执行以下命令启动 frp 服务。
chmod u+x frps ./frps -c ./frps.toml
执行命令后会提示 frp started successfully,没有报错就 ok 了。
接下来关闭防火墙(或者单独放行 7000、7500 端口),如果是云服务,就在安全组以及系统防火墙上放行对应端口,具体命令就不说了。注意后续使用的端口也需要对应放行。
然后通过浏览器访问以下地址。
http://192.168.49.191:7500/
输入账号密码登录即可访问到管理页面。
将程序解压并放进被连接的客户端上。
在被连接的客户端程序目录中执行以下命令,创建并编辑配置文件
vi frpc.toml
将以下内容放入配置文件
serverAddr = "192.168.49.191" serverPort = 7000 auth.token = "111111" [[proxies]] name = "ssh" type = "tcp" localIP = "127.0.0.1" localPort = 22 remotePort = 6000 [[proxies]] name = "web" type = "http" localIP = "127.0.0.1" localPort = 80 customDomains = ["192.168.49.191"] vhostHTTPPort = 8080
执行以下命令启动 frp 客户端
chmod u+x frpc ./frpc -c ./frpc.toml
此时在管理页面可以看到两个服务接入,一个 tcp(ssh)、一个 http(web)
tcp
http
在主动连接的客户端上执行命令或者打开浏览器访问链接
ssh [email protected] -p 6000 http://192.168.49.191:8080/dashboard/
此时连接上的是被控客户端
用另一台设备也尝试访问这个地址,发现任何人只要能访问到 192.168.49.191:6000,即可以尝试远程连接被控客户端,这……主动给黑客发布了一个肉鸡是吧,滴、好人卡,那绝对是不能当这个大好人的。
stcp 类型
服务端的配置和上面相同即可。
在被连接的客户端上用以下内容替换上面的配置文件。
serverAddr = "192.168.49.191" serverPort = 7000 auth.token = "111111" [[proxies]] name = "ssh" type = "stcp" # 只有共享密钥 (secretKey) 与服务器端一致的用户才能访问该服务 secretKey = "123456" localIP = "127.0.0.1" localPort = 22 remote_port = 6000
将程序解压并放进主动连接的客户端上(这一步在上个例子中是没有的)。
在主动连接的客户端程序目录中创建配置文件,并放入以下内容(这一步在上个例子中是没有的)。
serverAddr = "192.168.49.191" serverPort = 7000 auth.token = "111111" [[visitors]] name = "ssh_visitor" type = "stcp" # 要访问的 P2P 代理的名称 serverName = "ssh" secretKey = "123456" # 绑定本地端口以访问 ssh 服务 bindAddr = "127.0.0.1" bindPort = 5555
最后两边正常启动服务,然后连接端输入以下命令即可访问到被控端
ssh [email protected] -p 5555
此时只有你自己可以访问目标服务,上述安全问题解决。
当然,程序有没有其他安全问题这里就暂且不论了。
#
xtcp 类型
应用场景:在传输数据时希望流量不经过服务器的场景(点对点隧道)。
原理:简单来说就是双方首次通话建立连接时需要经过服务器,然后服务器帮助双方直接建立连接隧道,后续数据转发时就不需要经过服务器了,通过双方直接建立的连接隧道传数据即可,可以避免公网服务器带宽有限带来的瓶颈。但是这个功能很多时候无法实现,主要是因为运营商的 nat 原因(nat 是啥这里就不解释了),nat 有很多种类型,有些 nat 类型之间没法实现这个功能,所以当 xtcp 无法正常建立点对点隧道时,后面就需要将 type 改成其 它类型 了。
08**
总结
1、上述主要还是在讲个人使用场景,可以满足个人的一些特殊需求。
2、当然这么好的工具黑客也都会使用,主要用来实现内网穿透效果,如果你电脑上杀毒软件没关的话,程序只要在电脑上落地,可能就会被直接查杀,因为很多安全软件都把它识别为黑客工具了,没办法,工具太好用了。
3、不过没关系,个人正常用的话,让安全软件直接信任就可以了。
4、有人问个人使用场景会用了,那黑客怎么用?这个问题就不多解释了,配置方法其实都是一样的。
END
往期精彩回顾
PHP基本介绍
Easy | PHP中如何执行系统命令?
权限控制 | HTTP协议隐藏的风险,你绝对不能忽视!
前后端交互 | 前端发送请求的几种方式,你知道吗?
数组 | 想要高效存储多个值?这个”变量”能帮你!
扫码关注
渗透测试
信息安全
安全工具
戳“阅读原文”一起来充电吧!
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:大伯为安全 d0ublewei d0ublewei《frp | 开源内网穿透利器,速速用起来》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论