mirror of
https://github.com/Awuqing/BackupX.git
synced 2026-09-06 07:56:41 +08:00
feat: 优化集群部署与堡垒机接入 (#106)
支持受限网络、正向代理、私有 CA 与 SSH 堡垒机部署 Agent。 加固 Docker、systemd、Nginx、安装器、Release 校验与可信代理边界,并完善命令队列索引、前端安装向导及中英文运维文档。
This commit is contained in:
@@ -3,6 +3,7 @@ package http
|
||||
import (
|
||||
"context"
|
||||
stdhttp "net/http"
|
||||
"net/netip"
|
||||
"strings"
|
||||
|
||||
"backupx/server/internal/apperror"
|
||||
@@ -11,6 +12,46 @@ import (
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// ForwardedHeadersMiddleware 只允许配置中的反向代理提供转发头。
|
||||
// Gin 的 trusted_proxies 保护 ClientIP;这里同步保护安装命令使用的
|
||||
// X-Forwarded-Host 与 X-Forwarded-Proto,避免直连请求伪造 Agent 地址。
|
||||
func ForwardedHeadersMiddleware(trustedProxies []string) gin.HandlerFunc {
|
||||
trustedPrefixes := make([]netip.Prefix, 0, len(trustedProxies))
|
||||
for _, raw := range trustedProxies {
|
||||
raw = strings.TrimSpace(raw)
|
||||
if prefix, err := netip.ParsePrefix(raw); err == nil {
|
||||
trustedPrefixes = append(trustedPrefixes, prefix)
|
||||
continue
|
||||
}
|
||||
if addr, err := netip.ParseAddr(raw); err == nil {
|
||||
trustedPrefixes = append(trustedPrefixes, netip.PrefixFrom(addr, addr.BitLen()))
|
||||
}
|
||||
}
|
||||
|
||||
return func(c *gin.Context) {
|
||||
remote, err := netip.ParseAddrPort(c.Request.RemoteAddr)
|
||||
trusted := false
|
||||
if err == nil {
|
||||
remoteAddr := remote.Addr().Unmap()
|
||||
for _, prefix := range trustedPrefixes {
|
||||
if prefix.Contains(remoteAddr) {
|
||||
trusted = true
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
if !trusted {
|
||||
for _, header := range []string{
|
||||
"Forwarded", "X-Forwarded-For", "X-Forwarded-Host",
|
||||
"X-Forwarded-Port", "X-Forwarded-Proto", "X-Real-IP",
|
||||
} {
|
||||
c.Request.Header.Del(header)
|
||||
}
|
||||
}
|
||||
c.Next()
|
||||
}
|
||||
}
|
||||
|
||||
// CORSMiddleware handles Cross-Origin Resource Sharing for the API.
|
||||
func CORSMiddleware() gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
|
||||
Reference in New Issue
Block a user