frp|开源内网穿透利器,速速用起来

admin 2026-04-28 06:24:31 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详细介绍了开源内网穿透工具frp的功能特性、配置方法和应用场景。frp采用C/S架构,支持TCP/UDP/HTTP/HTTPS等协议,提供加密认证和P2P通信能力。文档通过具体示例演示了ssh和web服务的穿透配置,特别强调了stcp模式的安全优势,并指出该工具常被安全软件识别为黑客工具。 综合评分: 78 文章分类: 安全工具,内网渗透,红队,渗透测试,解决方案


cover_image

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 | 开源内网穿透利器,速速用起来》

APK智能加固检测工具V3.0 网络安全文章

APK智能加固检测工具V3.0

文章总结: 该文档介绍了APK智能加固检测工具V3.0的功能特点,该工具采用智能加权算法支持检测20种常见加固方案,包括360加固、腾讯乐固等。文档展示了实际检
评论:0   参与:  0