基于 frp 0.65 stcp 模式,实现web服务的安全访问内网穿透

目录

  • [一、什么是frp stcp 模式](#一、什么是frp stcp 模式)
  • 二、实现场景
    • [2.1 环境说明](#2.1 环境说明)
  • 三、下载frp
    • [3.1 下载地址](#3.1 下载地址)
    • [3.2 在线下载(有网络)](#3.2 在线下载(有网络))
    • [3.3 离线下载(无网络)](#3.3 离线下载(无网络))
  • 四、服务端安装
    • [4.1 下载解压](#4.1 下载解压)
    • [4.2 配置 frps.toml](#4.2 配置 frps.toml)
    • [4.3 配置防火墙](#4.3 配置防火墙)
    • [4.4 启动 frps 服务](#4.4 启动 frps 服务)
    • [4.5 配置 systemd 服务](#4.5 配置 systemd 服务)
  • 五、客户端安装
    • [5.1 下载解压](#5.1 下载解压)
    • [5.2 配置 frpc.toml](#5.2 配置 frpc.toml)
    • [5.3 启动 frpc 服务](#5.3 启动 frpc 服务)
    • [5.4 配置 systemd 服务](#5.4 配置 systemd 服务)
  • 六、访问端安装
    • [6.1 下载解压](#6.1 下载解压)
    • [6.2 配置 frpc.toml](#6.2 配置 frpc.toml)
    • [6.3 创建启动文件](#6.3 创建启动文件)
    • [6.4 访问服务](#6.4 访问服务)

一、什么是frp stcp 模式

某些内网服务,如果直接暴露在公网上,可能存在安全风险。使用 stcp(secret tcp) 类型的代理可以让您安全地将内网服务暴露给经过授权的用户,这需要访问者也部署 frpc 客户端。

要求在被访问服务的机器上以及要访问的用户的机器上都部署上 frp 的客户端。被访问的服务所在机器叫做服务端,另一端叫做访问端。

二、实现场景

基于frp的stcp模式实现将内网web服务安全的暴露到互联网,供被授权用户访问应用系统。

2.1 环境说明

分类 说明
frp 服务端 阿里云服务器,必须要有公网IP
frp 客户端 openEuler服务器,nginx部署web测试服务
frp 访问端 授权用户win电脑

三、下载frp

3.1 下载地址

官网地址:https://github.com/fatedier/frp/releases

官方文档:https://gofrp.org/zh-cn/docs/

CSDN下载:https://download.csdn.net/download/m0_37048012/92508877

下载时,根据安装服务器的架构选择,x86架构选择amd,arm架构选择arm。

3.2 在线下载(有网络)

此处以server端举例,client端同理。

bash 复制代码
# 创建安装目录
[root@openeuler ~]# mkdir /opt/frp
[root@openeuler ~]# cd /opt/frp
# 下载frp
[root@openeuler frp]# sudo wget https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_amd64.tar.gz

3.3 离线下载(无网络)

官网地址下载frp包。

在通过远程工具上传到指定服务器即可。

四、服务端安装

4.1 下载解压

bash 复制代码
# 创建目录
[root@openeuler ~]# mkdir /opt/frp
[root@openeuler ~]# cd /opt/frp
# 下载 frp
[root@openeuler frp]# sudo wget https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_amd64.tar.gz
# 解压 frp
[root@openeuler frp]# sudo tar -zxvf frp_0.65.0_linux_amd64.tar.gz
[root@openeuler frp]# cd frp_0.65.0_linux_amd64/

4.2 配置 frps.toml

bash 复制代码
# 编辑 frps.toml,输入【i】编辑
[root@openeuler frp_0.65.0_linux_amd64]# vi /opt/frp/frp_0.65.0_linux_amd64/frps.toml 

# =============================================================================
# frps.toml(直接复制此文本):
#-----------------客户端和服务端绑定的端口-----------------#
# 将在控制端通过公网ip+此端口号的形式进行穿透访问
bindPort = 7000
#-----------------客户端和服务端绑定的端口-----------------#

#-----------------服务端 Dashboard 配置-----------------#
# 服务端 Dashboard 使用户可以通过浏览器查看 frp 的状态以及代理统计信息
# Dashboard 监听的地址,默认为 127.0.0.1,如果需要公网访问,需要修改为 0.0.0.0
webServer.addr = "0.0.0.0"
# 将通过公网ip+此端口号访问 Dashboard,打开浏览器通过 http://[server addr]:7500 访问 Dashboard 界面
webServer.port = 7500
# Dashboard 用户名密码,可选,默认为空
webServer.user = "admin"
webServer.password = "admin"
#-----------------服务端 Dashboard 配置-----------------#

#-----------------身份认证配置-----------------#
# 目前 frpc 和 frps 之间支持两种身份验证方式,token 和 oidc,默认为 token
# auth.method="token"
# auth.token:设置用于身份验证的共享密钥(Token)。客户端(frpc)连接服务端(frps)时,必须提供相同的 token,否则连接会被拒绝。这个值可以是任意字符串,但建议使用足够长且随机的字符串以提高安全性。
auth.token = "y7gc4j4FF7rJnNBE"
#-----------------身份认证配置-----------------#
#-----------------log 日志配置-----------------#
# 日志输出文件路径
log.to = "/opt/frp/frp_0.65.0_linux_amd64/frps.log"
# 日志级别,可选值为 trace, debug, info, warn, error,默认级别为 info。
# log.level = "info"
# 日志文件最多保留天数,默认为 3 天。
# log.maxDays = 3
#-----------------log 日志配置-----------------#
# =============================================================================

# 保存 frps.toml
按【esc】后,输入【:wq】保存并退出编辑。

4.3 配置防火墙

第一步:配置服务器防火墙

bash 复制代码
# 查询端口是否开放
[root@openeuler ~]# sudo firewall-cmd --query-port=7000/tcp
[root@openeuler ~]# sudo firewall-cmd --query-port=7500/tcp
# 开放端口(TCP协议)
[root@openeuler ~]# sudo firewall-cmd --zone=public --add-port=7000/tcp --permanent
[root@openeuler ~]# sudo firewall-cmd --zone=public --add-port=7500/tcp --permanent
# 重新加载防火墙规则
[root@openeuler ~]# sudo firewall-cmd --reload
# 验证端口是否开放
[root@openeuler ~]# sudo firewall-cmd --zone=public --list-ports
# 查看所有端口
[root@openeuler ~]# sudo netstat -nlpt

第二步:配置阿里云防火墙

在阿里云控制台页面,进入安全组,配置出入规则。

4.4 启动 frps 服务

bash 复制代码
[root@openeuler ~]# cd /opt/frp/frp_0.65.0_linux_amd64/
# 临时启动服务
[root@openeuler frp_0.65.0_linux_amd64]# ./frps -c ./frps.toml


访问 Dashboard

4.5 配置 systemd 服务

在 Linux 系统下,使用 systemd 可以方便地控制 frps 服务端的启动、停止、配置后台运行以及开机自启动。
1、安装 systemd (默认都有)

bash 复制代码
# 使用 yum 安装 systemd(CentOS/RHEL)
yum install systemd
# 使用 apt 安装 systemd(Debian/Ubuntu)
apt install systemd

2、创建 frps.service 文件

使用文本编辑器 (如 vim) 在 /etc/systemd/system 目录下创建一个 frps.service 文件,用于配置 frps 服务。

bash 复制代码
# 创建自启动脚本
[root@openeuler ~]# sudo vi /etc/systemd/system/frps.service

# =============================================================================
# 复制粘贴以下内容:
[Unit]
Description = Frps Server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# ExecStart = /path/to/frps -c /path/to/frps.toml
ExecStart = /opt/frp/frp_0.65.0_linux_amd64/frps -c /opt/frp/frp_0.65.0_linux_amd64/frps.toml

[Install]
WantedBy = multi-user.target
# =============================================================================

# 保存退出
按【esc】后,输入【:wq】保存并退出编辑。

3、启动服务

bash 复制代码
# 注意:要保证 frps 后台服务未启动
# 设置开机自启
[root@openeuler ~]# sudo systemctl daemon-reload
[root@openeuler ~]# sudo systemctl enable frps
# 启动服务
[root@openeuler ~]# sudo systemctl start frps
# 停止服务
[root@openeuler ~]# sudo systemctl stop frps
# 重启服务
[root@openeuler ~]# sudo systemctl restart frps
# 查看服务状态
[root@openeuler ~]# sudo systemctl status frps

五、客户端安装

5.1 下载解压

bash 复制代码
# 创建目录
[root@openeuler ~]# mkdir /opt/frp
[root@openeuler ~]# cd /opt/frp
# 下载 frp
[root@openeuler frp]# sudo wget https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_amd64.tar.gz
# 解压 frp
[root@openeuler frp]# sudo tar -zxvf frp_0.65.0_linux_amd64.tar.gz
[root@openeuler frp]# cd frp_0.65.0_linux_amd64/

5.2 配置 frpc.toml

bash 复制代码
# 编辑 frpc.toml,输入【i】编辑
[root@openeuler frp_0.65.0_linux_amd64]# vi /opt/frp/frp_0.65.0_linux_amd64/frpc.toml 

# =============================================================================
# frpc.toml(直接复制此文本):
#---------------------配置服务器连接服务---------------------#
# 阿里云服务器公网ip
serverAddr = "xx.xx.xx.xx"
# 连接到云服务器端口
serverPort = 7000
# 配置身份认证方式
# auth.method = "token"
# 配置 token 密钥
auth.token = "y7gc4j4FF7rJnNBE"
#---------------------配置服务器连接服务---------------------#

#---------------------配置 web1 服务-------------------------#
[[proxies]]
# 服务名称(不可重复)
name = "secret_web1"
# 连接类型
type = "stcp"
# web1 服务 ip
localIP = "127.0.0.1"
# web1 服务端口
localPort = 9001
# 重要:只有与此处设置的 secretKey 一致的用户才能访问此服务
secretKey = "w6XN5U6a"
#---------------------配置 web1 服务-------------------------#
# =============================================================================

# 保存 frpc.toml
按【esc】后,输入【:wq】保存并退出编辑。

5.3 启动 frpc 服务

bash 复制代码
[root@openeuler ~]# cd /opt/frp/frp_0.65.0_linux_amd64/
# 临时启动服务
[root@openeuler frp_0.65.0_linux_amd64]# ./frpc -c ./frpc.toml


访问 Dashboard

Dashboard 显示的 stcp 服务如下:

5.4 配置 systemd 服务

在 Linux 系统下,使用 systemd 可以方便地控制 frpc 客户端的启动、停止、配置后台运行以及开机自启动。
1、创建 frpc.service 文件

使用文本编辑器 (如 vim) 在 /etc/systemd/system 目录下创建一个 frpc.service 文件,用于配置 frpc 服务。

bash 复制代码
# 创建自启动脚本
[root@openeuler ~]# sudo vi /etc/systemd/system/frpc.service

# =============================================================================
# 复制粘贴以下内容:
[Unit]
Description = Frpc Server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# ExecStart = /path/to/frps -c /path/to/frps.toml
ExecStart = /opt/frp/frp_0.65.0_linux_amd64/frpc -c /opt/frp/frp_0.65.0_linux_amd64/frpc.toml

[Install]
WantedBy = multi-user.target
# =============================================================================

# 保存退出
按【esc】后,输入【:wq】保存并退出编辑。

2、启动服务

bash 复制代码
# 注意:要保证 frpc 后台服务未启动
# 设置开机自启
[root@openeuler ~]# sudo systemctl daemon-reload
[root@openeuler ~]# sudo systemctl enable frpc
# 启动服务
[root@openeuler ~]# sudo systemctl start frpc
# 停止服务
[root@openeuler ~]# sudo systemctl stop frpc
# 重启服务
[root@openeuler ~]# sudo systemctl restart frpc
# 查看服务状态
[root@openeuler ~]# sudo systemctl status frpc

六、访问端安装

6.1 下载解压

官网地址下载frp win 包(frp_0.65.0_windows_amd64.zip)后解压即可。

6.2 配置 frpc.toml

使用编辑器(Notepad++)打开 frpc.toml 文件后进行编辑。

bash 复制代码
# =============================================================================
# frpc.toml(直接复制此文本):
#---------------------配置服务器连接服务---------------------#
# 阿里云服务器公网ip
serverAddr = "xx.xx.xx.xx"
# 连接到云服务器端口
serverPort = 7000
# 配置身份认证方式
# auth.method = "token"
# 配置 token 密钥
auth.token = "y7gc4j4FF7rJnNBE"
#---------------------配置服务器连接服务---------------------#

#---------------------配置 web1 访问服务--------------------#
[[visitors]]
# 服务名称(不可重复)
name = "secret_web1_visitor"
# 连接类型
type = "stcp"
# 要访问的 stcp 代理的名字
serverName = "secret_web1"
secretKey = "w6XN5U6a"
# 绑定本地端口以访问 SSH 服务
bindAddr = "127.0.0.1"
# 此处需要与内网端口一致
bindPort = 9001
#---------------------配置 web1 访问服务--------------------#
# =============================================================================

6.3 创建启动文件

1、新建记事本,命名【start_frpc.bat】

2、使用编辑器(Notepad++)打开 start_frpc.bat 文件后进行编辑后保存。

bash 复制代码
frpc.exe -c frpc.toml

6.4 访问服务

1、双击【start_frpc.bat】启动文件。

2、打开浏览器输入【http://127.0.0.1:9001/】

按照预期出现页面,代表服务配置成功,反之亦然。

相关推荐
啦啦啦啦啦zzzz3 分钟前
moduo网络库 Acceptor TcpConnection
服务器·网络·c++·reactor·网络库
Shadow(⊙o⊙)1 小时前
Linux网络部分——TCP协议服务端客户端交互接口,入门级硬核解析1.0
linux·网络·tcp/ip
小新讲网安1 小时前
HTTP请求走私攻击实战:CL.TE与TE.CL绕过前端服务器全解析
服务器·前端·网络·web安全·http·架构·漏洞
上海安当技术13 小时前
固件签名与Secure Boot:安当CAS如何构建汽车固件信任链
网络·汽车·信任链·boot·secure·固件签名·安当cas
上海安当技术13 小时前
诊断接入认证:安当CAS如何堵住汽车网络安全的物理后门
网络·web安全·汽车·access·secure·安当cas·诊断接入认证
ze^013 小时前
【软考信息安全】第2章 网络攻击原理与常用方法
网络·web安全·网络安全
这个DBA有点耶14 小时前
数据库一体机架构演进:从硬件堆叠到软硬深度耦合
服务器·网络·数据库·硬件架构·运维开发·database·数据库架构
arbboter15 小时前
【网络工具】NetProxy网络代理用户手册
开发语言·网络·c#·网络代理·网络异常·代理工具
消失的旧时光-194316 小时前
第一篇:Ktor Client 到底是什么?从 Retrofit 迁移理解 Ktor 网络请求架构
网络·架构·retrofit·ktor·dsl
数据知道16 小时前
反序列化漏洞:Java、PHP、Python 三条线各讲透
java·网络·python·安全·网络安全·php