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

再把源码改回来

重启面板

问题解决。

目录
相关文章
|
6月前
|
Python
Python网络编程基础(Socket编程)绑定地址和端口
【4月更文挑战第9天】在UDP服务器编程中,我们首先需要创建一个UDP套接字,然后绑定一个本地地址和端口,以便客户端可以通过这个地址和端口与我们的服务器进行通信。下面,我们将详细讲解如何绑定地址和端口。
|
29天前
|
应用服务中间件 Apache nginx
宝塔占用80端口
宝塔占用80端口
|
3月前
|
安全 网络安全 Windows
【Azure App Service】遇见az命令访问HTTPS App Service 时遇见SSL证书问题,暂时跳过证书检查的办法
【Azure App Service】遇见az命令访问HTTPS App Service 时遇见SSL证书问题,暂时跳过证书检查的办法
【Azure App Service】遇见az命令访问HTTPS App Service 时遇见SSL证书问题,暂时跳过证书检查的办法
|
3月前
|
开发框架 .NET Linux
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
|
3月前
|
Linux Python
【Azure 应用服务】Azure App Service For Linux 上实现 Python Flask Web Socket 项目 Http/Https
【Azure 应用服务】Azure App Service For Linux 上实现 Python Flask Web Socket 项目 Http/Https
|
3月前
|
Docker 容器
【Azure 应用服务】App Server 部署后,Docker报错,找不到8080端口
【Azure 应用服务】App Server 部署后,Docker报错,找不到8080端口
|
3月前
|
监控 安全 网络协议
深入理解HTTPS及其默认端口
【8月更文挑战第24天】
504 0
|
3月前
|
SQL 网络协议 NoSQL
【Azure 应用服务】App Service/Azure Function的出站连接过多而引起了SNAT端口耗尽,导致一些新的请求出现超时错误(Timeout)
【Azure 应用服务】App Service/Azure Function的出站连接过多而引起了SNAT端口耗尽,导致一些新的请求出现超时错误(Timeout)
|
3月前
|
Java Android开发 UED
安卓scheme_url调端:如果手机上多个app都注册了 http或者https 的 intent。 调端的时候,调起哪个app呢?
当多个Android应用注册了相同的URL Scheme(如http或https)时,系统会在尝试打开这类链接时展示一个选择对话框,让用户挑选偏好应用。若用户选择“始终”使用某个应用,则后续相同链接将直接由该应用处理,无需再次选择。本文以App A与App B为例,展示了如何在`AndroidManifest.xml`中配置对http与https的支持,并提供了从其他应用发起调用的示例代码。此外,还讨论了如何在系统设置中管理这些默认应用选择,以及建议开发者为避免冲突应注册更独特的Scheme。
|
5月前
|
安全 网络安全 Windows
【Azure App Service】遇见az命令访问HTTPS App Service 时遇见SSL证书问题,暂时跳过证书检查的办法
在访问App Service的KUDU工具或使用`az webapp deploy`时遇到SSL错误:`SSL: CERTIFICATE_VERIFY_FAILED`。解决方法是临时禁用Azure CLI的SSL验证。在PowerShell中,设置`$env:ADAL_PYTHON_SSL_NO_VERIFY`和`$env:AZURE_CLI_DISABLE_CONNECTION_VERIFICATION`为1;在Windows命令提示符中,使用`set AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1`。注意,这可能引入安全风险,应仅在必要时使用。
111 9