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

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

相关推荐
m0_715674431 小时前
政务泛监测体系能力排行:AI 重塑监测边界,治理的颗粒度革命
大数据·网络·人工智能·安全·网络安全·政务
AI 编程助手GPT2 小时前
curl 返回成功就能收文件?用本地 HTTP 验证错误页与超时
网络·网络协议·http
十碗饭吃不饱3 小时前
后端运维:网络联通、进程查询、Java服务启动脚本
java·运维·网络
从琳开始9895 小时前
网络原理入门(二)------OSI七层模型?TCP/IP五层(四层)模型原来是这样的
java·网络·tcp/ip·java-ee·php
xiaoye-duck7 小时前
《C++ 项目:手写大模型接入 SDK》ChatGPT接口设计(下):流式响应实现和测试
网络·c++·语言模型·chatgpt
梦帮科技7 小时前
意识启发式量子隧穿退火算法用于全局优化 (CITA) 完整技术指南
网络·人工智能·算法·量子计算·模拟退火算法
坤坤子吖9 小时前
Linux网络编程:UDP进阶,从字典服务器到简单聊天室
linux·服务器·网络·c++·笔记·学习
爱和冰阔落9 小时前
【Linux网络】TCP 服务器怎么写?从 listen、accept 到 read/write,手写完整 Echo Server
linux·运维·服务器·网络
全栈陈序员12 小时前
【Git】从入门到精通(十)—— 撤销与恢复:git checkout与git restore
运维·网络·数据库·git
天远Date Lab20 小时前
零信任架构实战:基于天远租凭分期报告构建自动化汽车以租代购免押风控网关
网络·人工智能·架构·自动化