tls:
  options:
    default:
      minVersion: VersionTLS12
      cipherSuites:
        - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
        - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
        - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
        - TLS_AES_128_GCM_SHA256
        - TLS_AES_256_GCM_SHA384
        - TLS_CHACHA20_POLY1305_SHA256
      curvePreferences:
        - CurveP521
        - CurveP384
      sniStrict: true

http:
  middlewares:
    # Security Headers Middleware
    security-headers:
      headers:
        # HSTS (HTTP Strict Transport Security)
        stsSeconds: 31536000
        stsIncludeSubdomains: true
        stsPreload: true

        # Force HTTPS
        forceSTSHeader: true

        # Clickjacking protection
        customFrameOptionsValue: "SAMEORIGIN"

        # XSS Protection
        browserXssFilter: true

        # Content Type sniffing protection
        contentTypeNosniff: true

        # Referrer Policy
        referrerPolicy: "strict-origin-when-cross-origin"

        # Permissions Policy (formerly Feature Policy)
        customResponseHeaders:
          X-Robots-Tag: "none,noarchive,nosnippet,notranslate,noimageindex"
          Permissions-Policy: "camera=(), microphone=(), geolocation=(), payment=(), usb=(), magnetometer=(), accelerometer=(), gyroscope=()"
          X-Content-Type-Options: "nosniff"
          X-Frame-Options: "SAMEORIGIN"

    # Rate Limiting Middleware (optional, can be applied per service)
    rate-limit:
      rateLimit:
        average: 100
        burst: 50
        period: 1s

    # Rate Limiting for API endpoints (stricter)
    api-rate-limit:
      rateLimit:
        average: 30
        burst: 15
        period: 1s
