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

如何在Kubernetes Nginx Ingress的server-snippet注解中添加多路径规则拒绝恶意流量

Nginx Ingress 防范自动化扫描最佳实践

一、路径拦截规则优化

  • 合并高频扫描路径正则,减少匹配开销:将常见扫描目标(后台路径、敏感文件、配置泄露路径)合并为单条正则规则,避免冗余的location配置,提升匹配效率。
  • 补充敏感后缀匹配规则:拦截扫描器常探测的非业务后缀,例如.asp、.php、.jsp、.sql、.bak、.git、.env等。
  • 调整规则优先级:精确匹配的业务路径规则放在最前,拦截类正则规则放在靠后位置,避免正常业务被误拦截。

二、启用内置防护能力

  • 配置速率限制:通过Ingress Annotation限制单IP请求频率,直接拦截高频扫描请求:
nginx.ingress.kubernetes.io/limit-rps: "10" # 单IP每秒最多10次请求
nginx.ingress.kubernetes.io/limit-burst-multiplier: "2" # 突发请求倍数阈值
  • 拦截恶意UA:在server-snippet中添加规则,拦截sqlmap、nmap、burp等常见扫描工具的特征UA。
  • 限制无效请求方法:如果业务仅需GET、POST、HEAD方法,直接拦截PUT、DELETE、TRACE、CONNECT等非常规请求方法。
  • 关闭服务版本泄露:添加Annotation隐藏Nginx版本号,降低定向攻击概率:
nginx.ingress.kubernetes.io/server-tokens: "false"

三、误拦截规避要点

  • 提前配置IP白名单:将内部办公网段、测试网段、业务合作方IP加入放行名单,避免正常业务请求被拦截。
  • 规则上线前先观测日志:新拦截规则上线初期先不直接返回错误码,仅将命中规则的请求打日志,观测3-7天确认无误杀后再启用拦截。
  • 定期更新拦截规则:每周梳理攻击日志,补充新出现的扫描路径、UA特征到拦截规则中。

优化后的配置示例

---
kind: Ingress
metadata:
  name: example
  labels:
    app: example
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt-prod
    nginx.ingress.kubernetes.io/proxy-body-size: "0"
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "200"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/limit-rps: "10"
    nginx.ingress.kubernetes.io/limit-burst-multiplier: "2"
    nginx.ingress.kubernetes.io/server-tokens: "false"
    nginx.ingress.kubernetes.io/server-snippet: |
      # 内部IP白名单
      allow 10.0.0.0/8;
      allow 192.168.0.0/16;
      
      # 拦截无效请求方法
      if ($request_method !~ ^(GET|POST|HEAD)$ ) {
        return 405;
      }
      
      # 拦截恶意UA
      if ($http_user_agent ~* (nikto|sqlmap|nmap|burp|masscan|go-http-client|python-requests/|curl/)) {
        return 403;
      }
      
      # 批量拦截高频扫描路径
      location ~* "^/(boaform|api|user|admin|phpmyadmin|wp-admin|wp-login|shell|\.git|\.env|backup)" {
        deny all;
        return 403;
      }
      
      # 拦截敏感后缀
      location ~* \.(asp|aspx|php|jsp|sql|bak|old|zip|tar\.gz)$ {
        deny all;
        return 403;
      }
  namespace: example-ns

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:15:03