解决宝塔反代端口+开启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插件处生成二维码绑定手机。

再把源码改回来

重启面板

问题解决。

目录
相关文章
|
1月前
|
Python
Python网络编程基础(Socket编程)绑定地址和端口
【4月更文挑战第9天】在UDP服务器编程中,我们首先需要创建一个UDP套接字,然后绑定一个本地地址和端口,以便客户端可以通过这个地址和端口与我们的服务器进行通信。下面,我们将详细讲解如何绑定地址和端口。
|
1月前
|
数据安全/隐私保护 时序数据库
InfluxData【部署 03】时序数据库 InfluxDB 离线安装配置使用(下载+安装+端口绑定+管理员用户创建+开启密码认证+开机自启配置)完整流程实例分享
InfluxData【部署 03】时序数据库 InfluxDB 离线安装配置使用(下载+安装+端口绑定+管理员用户创建+开启密码认证+开机自启配置)完整流程实例分享
204 0
|
1月前
|
XML Java Android开发
Android Studio App开发之服务Service的讲解及实战(包括启动和停止,绑定与解绑,推送服务到前台实现音乐播放器,附源码)
Android Studio App开发之服务Service的讲解及实战(包括启动和停止,绑定与解绑,推送服务到前台实现音乐播放器,附源码)
290 0
|
1月前
|
网络协议
TCP和UDP可以绑定同样的端口吗?
TCP和UDP可以绑定同样的端口吗?
|
1月前
|
网络协议
绑定地址和端口
【4月更文挑战第4天】创建socket对象后,需将其绑定到特定地址和端口。根据服务器需求,地址可选localhost(仅本机服务)、实际IP地址(公开服务)或空字符串(所有地址)。端口号应避开0-1023的保留范围。使用`bind()`方法绑定地址和端口,如`sock.bind(('', 12345))`。绑定可能遇到错误,需用异常处理机制捕获,确保程序稳定。
|
1月前
|
网络安全
tomcat8绑定两个https域名
tomcat8绑定两个https域名
|
1月前
|
存储 安全 网络安全
HTTP与HTTPS的区别:安全性、协议地址和默认端口等比较
HTTP与HTTPS的区别:安全性、协议地址和默认端口等比较
206 0
|
1月前
|
开发框架 JavaScript 小程序
vue , 微信小程序 , uni-app绑定变量属性
vue , 微信小程序 , uni-app绑定变量属性
95 1
|
1月前
|
网络协议 Linux
百度搜索:蓝易云【【http服务】使用命令来查看和停止端口教程。】
通过按照上述步骤使用命令来查看和停止端口,您可以轻松地管理正在运行的服务。请确保在停止端口上的服务时,选择正确的端口号,并谨慎操作以避免影响其他正常运行的服务。
35 0
|
7月前
|
安全 Linux Docker
当zmq 和 docker 都要绑定一个端口时,怎么不修改端口号就能解决冲突?
主机模式运行docker 容器 要使用主机模式运行Docker容器,你可以在运行Docker命令时使用--network=host选项。这将使容器共享主机的网络命名空间,意味着容器将直接使用主机的网络,而不是虚拟的网络。
68 0