基于 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/】

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

相关推荐
Danileaf_Guo2 小时前
OSPF路由引入的陷阱:为何Ubuntu上静态路由神秘消失?深挖FRR路由分类机制
linux·运维·网络·ubuntu·智能路由器
橘子真甜~2 小时前
Reids命令原理与应用3 - Redis 主线程,辅助线程与存储原理
网络·数据库·redis·缓存·线程·数据类型·存储结构
天竺鼠不该去劝架2 小时前
如何构建安全的流程自动化体系?
网络·安全
HaiLang_IT2 小时前
基于图像处理与原型网络的小样本手语骨骼动作识别研究
网络·图像处理·人工智能
lzh_200110122 小时前
I2C通讯协议
网络
元亓亓亓2 小时前
考研408--计算机网络--day13--电子邮件&万维网&HTTP
网络·计算机网络·考研·http·408
海棠蚀omo2 小时前
万物互联的起点:走进 Linux 网络的心脏,开启一场从零开始的底层探索之旅
linux·网络
咕咕嘎嘎10242 小时前
C++仿muduo库onethreadoneloop高并发服务器
服务器·网络·c++
乾元2 小时前
AI 在云网络(VPC / VNet)部署的编排与安全对齐——从“手工堆资源”到“意图驱动的网络生成”(含 Terraform 工程化)
运维·网络·人工智能·网络协议·安全·云计算·terraform