解决宝塔反代端口+开启HTTPS后无法绑定堡塔APP的问题

简介: 反代宝塔端口+开启HTTPS能够一定程度上避开恶意扫描,提升服务器安全性。但是堡塔APP插件不够智能,无法识别反代后的链接,导致绑定出错。本文将通过修改源码的方式解决该问题。

前言

环境

  • 宝塔面板版本:Linux面板7.9.49 测试版
  • 手机堡塔APP版本:3.8.2
  • 面板堡塔APP插件版本:1.1

设置缘由

反代后只有80/443开放,可以避开恶意扫描,而开启HTTPS可以提升面板访问安全性。
同时,服务器防火墙放开宝塔端口,阿里云安全组禁用宝塔端口,即使后续遇到问题也可通过设置安全组使用原端口登录。

查找原因

安装堡塔APP插件后,会弹出绑定窗口,如图所示:

image.png

通过解码绑定二维码,得到一串Base64编码的字符串:

aHR0cCUzQS8vd3d3LmV4YW1wbGUuY29tJTdDMDdIdUo3NUZUbkk5b2Y0d3M5TzBIbkJWQ1JwdUY1MG4lN0M2NDlsNUxvaU42NEZWQ0RFMmQlN0NBS29KYkc1NkZsOWZSN2h2RVU=

通过Base64解码后结果如下:

http://www.example.com|07HuJ75FTnI9of4ws9O0HnBVCRpuF50n|649l5LoiN64FVCDE2d|AKoJbG56Fl9fR7hvEU

前面两个分别是URL和密钥,可以看到即使使用HTTPS访问面板,绑定二维码的URL也是HTTP而不是HTTPS。

经过测试,直接更改成HTTPS后生成二维码无法绑定,基本可以确定后面两项是签名或类似的东西,因此需要通过修改代码来解决。

经过翻找,宝塔获取面板地址的代码在/www/server/panel/class/public.py的第842行:

# 获取面板地址
def getPanelAddr():
    from flask import request
    protocol = 'https://' if os.path.exists("data/ssl.pl") else 'http://'
    return protocol + request.headers.get('host')

可以看到,面板地址的httpshttp取决于是否存在data/ssl.pl文件。
这个文件显然是通过面板设置开启SSL后才会生成的,通过反代开启的SSL并不会生成。

解决问题

我们的目标是生成带https的绑定二维码并且绑定所以方法很简单。
只要把protocol写死为https://绑定后再恢复,问题解决,剩下的就看宝塔开发是否认为这是BUG并修复了。

步骤

将上面那段源码改成如下:

# 获取面板地址
def getPanelAddr():
    from flask import request
    protocol = 'https://'
    return protocol + request.headers.get('host')

重启面板

到堡塔APP插件处生成二维码绑定手机。

再把源码改回来

重启面板

问题解决。

目录
相关文章
|
7月前
|
Python
Python网络编程基础(Socket编程)绑定地址和端口
【4月更文挑战第9天】在UDP服务器编程中,我们首先需要创建一个UDP套接字,然后绑定一个本地地址和端口,以便客户端可以通过这个地址和端口与我们的服务器进行通信。下面,我们将详细讲解如何绑定地址和端口。
|
7月前
|
数据安全/隐私保护 时序数据库
InfluxData【部署 03】时序数据库 InfluxDB 离线安装配置使用(下载+安装+端口绑定+管理员用户创建+开启密码认证+开机自启配置)完整流程实例分享
InfluxData【部署 03】时序数据库 InfluxDB 离线安装配置使用(下载+安装+端口绑定+管理员用户创建+开启密码认证+开机自启配置)完整流程实例分享
467 0
|
30天前
|
安全 网络协议 算法
HTTPS为什么可以穿越NAT端口映射设备
HTTPS能穿越NAT端口映射设备的原因在于,NAT设备仅在IP和端口层面进行地址转换,不对应用层协议(如TLS)的内容进行解析或干预。因此,HTTPS的加密通信可在客户端与服务器间直接建立,NAT设备充当透明中介,确保数据包正确路由,而不涉及加密或认证过程。这样即使没有在NAT设备上配置证书,HTTPS连接也能顺利建立并保持安全。
36 6
|
2月前
|
应用服务中间件 Apache nginx
宝塔占用80端口
宝塔占用80端口
|
4月前
|
开发框架 .NET Linux
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
|
4月前
|
Docker 容器
【Azure 应用服务】App Server 部署后,Docker报错,找不到8080端口
【Azure 应用服务】App Server 部署后,Docker报错,找不到8080端口
|
4月前
|
监控 安全 网络协议
深入理解HTTPS及其默认端口
【8月更文挑战第24天】
1361 0
|
4月前
|
SQL 网络协议 NoSQL
【Azure 应用服务】App Service/Azure Function的出站连接过多而引起了SNAT端口耗尽,导致一些新的请求出现超时错误(Timeout)
【Azure 应用服务】App Service/Azure Function的出站连接过多而引起了SNAT端口耗尽,导致一些新的请求出现超时错误(Timeout)
|
5月前
|
JavaScript Linux 网络安全
若依修改,若依启动之后,网页端无法访问接口,宝塔和云服务器的端口都要放开,就好了,软件开发常见流程,后台端口就可以访问了
若依修改,若依启动之后,网页端无法访问接口,宝塔和云服务器的端口都要放开,就好了,软件开发常见流程,后台端口就可以访问了
|
5月前
|
关系型数据库 MySQL Java
软件开发2003 -Can·t to MySQL server on ‘xxxxxx‘(10038),宝塔初始化安装mysql,远程链接MySql注意事项,开始时服务器是没有放开端口的,宝塔也都开
软件开发2003 -Can·t to MySQL server on ‘xxxxxx‘(10038),宝塔初始化安装mysql,远程链接MySql注意事项,开始时服务器是没有放开端口的,宝塔也都开

热门文章

最新文章