You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCP K8s部署的Django后端遭谷歌等陌生主机访问的原因及屏蔽方案问询

问题描述

我在GCP的Kubernetes(Deployment/Service/Ingress)上部署了一套生产级Django后端服务器,配置如下:

ALLOWED_HOSTS = [BACKEND_URL,INGRESS_IP,THIS_POD_IP,HOST_IP]

一切运行正常,但后端服务器日志每天会出现约7条如下间歇性错误:

DisallowedHost: Invalid HTTP_HOST header: 'www.google.com'. You may need to add 'www.google.com' to ALLOWED_HOSTS.
DisallowedHost: Invalid HTTP_HOST header: 'xxnet-f23.appspot.com'. You may need to add 'xxnet-f23.appspot.com' to ALLOWED_HOSTS.
DisallowedHost: Invalid HTTP_HOST header: 'xxnet-301.appspot.com'. You may need to add 'xxnet-301.appspot.com' to ALLOWED_HOSTS.
DisallowedHost: Invalid HTTP_HOST header: 'www.google.com'. You may need to add 'www.google.com' to ALLOWED_HOSTS.
DisallowedHost: Invalid HTTP_HOST header: 'narutobm1234.appspot.com'. You may need to add 'narutobm1234.appspot.com' to ALLOWED_HOSTS.
DisallowedHost: Invalid HTTP_HOST header: 'z-h-e-n-116.appspot.com'. You may need to add 'z-h-e-n-116.appspot.com' to ALLOWED_HOSTS.
DisallowedHost: Invalid HTTP_HOST header: 'www.google.com'. You may need to add 'www.google.com' to ALLOWED_HOSTS.
DisallowedHost: Invalid HTTP_HOST header: 'xxnet-131318.appspot.com'. You may need to add 'xxnet-131318.appspot.com' to ALLOWED_HOSTS.
DisallowedHost: Invalid HTTP_HOST header: 'www.google.com'. You may need to add 'www.google.com' to ALLOWED_HOSTS.
DisallowedHost: Invalid HTTP_HOST header: 'stoked-dominion-123514.appspot.com'. You may need to add 'stoked-dominion-123514.appspot.com' to ALLOWED_HOSTS.

核心问题

这些主机是什么,为何会访问我的后端?我不会在不了解其用途的情况下将它们加入ALLOWED_HOSTS。

额外问题

在当前技术栈中,屏蔽这类不受欢迎主机的最佳方式是什么?


解答

关于这些主机的来源和访问原因

  • www.google.com:这类请求并非谷歌官方发起,属于攻击者或扫描工具伪造的HTTP_HOST头,目的是测试服务器是否存在主机头注入漏洞,或尝试绕过安全限制。
  • xxnet-xxx.appspot.com、narutobm1234.appspot.com等App Engine域名:这些是GCP App Engine上的随机测试或个人项目域名,出现这类请求的原因主要有两种:
    1. 扫描工具遍历GCP公网IP,随机附带各种App Engine域名作为主机头,探测目标服务的配置漏洞;
    2. 该公网IP曾被其他App Engine项目使用,残留了部分误发的流量。

这类请求都是无意义的扫描或恶意探测,完全不需要添加到ALLOWED_HOSTS中。

屏蔽不受欢迎主机的最佳方式

结合GCP Kubernetes技术栈,推荐分层防御方案:

1. 利用GCP Ingress配置主机白名单

在Ingress资源中明确指定允许访问的域名,Ingress会直接拒绝不匹配的主机头请求,这是最外层的防护:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: django-ingress
spec:
  rules:
  - host: your-backend-domain.com  # 仅允许你的后端域名
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: django-service
            port:
              number: 80

配置后,非指定主机的请求会被Ingress直接返回404,不会转发到Django服务。

2. 严格维护Django的ALLOWED_HOSTS

保持现有配置,只添加你实际使用的域名和IP,不要包含任何未知主机。Django的DisallowedHost错误本身就是有效的防护机制,无需修改。

3. 启用GCP Cloud Armor(高安全需求可选)

如果需要更严格的防护,可配置Cloud Armor安全策略,在GCP负载均衡层拦截恶意请求:

  • 创建Cloud Armor策略,添加规则拒绝包含非法主机头的请求;
  • 将策略关联到Kubernetes Ingress对应的负载均衡器。

4. Django中间层补充拦截

若Ingress层防护无法覆盖所有场景,可自定义中间件在请求到达视图前拦截非法主机头:

# myapp/middleware.py
from django.http import HttpResponseForbidden

class BlockInvalidHostMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        allowed_hosts = [BACKEND_URL, INGRESS_IP, THIS_POD_IP, HOST_IP]
        if request.META.get('HTTP_HOST') not in allowed_hosts:
            return HttpResponseForbidden()
        response = self.get_response(request)
        return response

然后在settings.py中注册中间件:

MIDDLEWARE = [
    # 放在最前面优先拦截
    'myapp.middleware.BlockInvalidHostMiddleware',
    # 其他中间件...
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
]

内容的提问来源于stack exchange,提问作者Roman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:05:17