feat: Add Traefik configuration with security middlewares, rate limiting, and dynamic routing

- Add traefik.yml with HTTP to HTTPS redirection and secure-headers middleware
- Add dashboard on port 80 with insecure mode enabled
- Add websecure entrypoint on port 443 with security headers
- Add Docker and file providers with dynamic configuration watching
- Add Prometheus metrics with entrypoint and service labels
- Add middlewares.yml with secure-headers including CSP, X-Frame-Options, and Permissions
This commit is contained in:
nutcas3
2026-05-01 09:07:13 +03:00
parent 19eb36613b
commit b443152ecc
2 changed files with 94 additions and 0 deletions
+56
View File
@@ -0,0 +1,56 @@
http:
middlewares:
secure-headers:
headers:
customRequestHeaders:
X-Forwarded-Proto: "https"
customResponseHeaders:
X-Content-Type-Options: "nosniff"
X-Frame-Options: "DENY"
X-XSS-Protection: "1; mode=block"
Referrer-Policy: "strict-origin-when-cross-origin"
Permissions-Policy: "camera=(), microphone=(), geolocation=()"
Content-Security-Policy: "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'; connect-src 'self'; frame-ancestors 'none';"
# Rate Limiting Middleware (API endpoints)
api-ratelimit:
rateLimit:
average: 100
period: "1m"
burst: 200
# Rate Limiting Middleware (Charging endpoints - more restrictive)
charging-ratelimit:
rateLimit:
average: 1000
period: "1m"
burst: 2000
# Rate Limiting Middleware (Carrier endpoints - very restrictive)
carrier-ratelimit:
rateLimit:
average: 50
period: "1m"
burst: 100
# JWT Authentication Middleware
jwt-auth:
plugin:
JWTAuth:
secret: "${JWT_SECRET}"
authHeaderName: "Authorization"
responseHeaderName: "X-Auth-User"
forwardAuth: true
# Compression Middleware
compression:
compress:
excludedContentTypes:
- "text/event-stream"
- "application/grpc"
# Retry Middleware
retry-attempts:
retry:
attempts: 3
initialInterval: "100ms"
+38
View File
@@ -0,0 +1,38 @@
api:
dashboard: true
insecure: true
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
http:
middlewares:
- secure-headers@file
providers:
docker:
exposedByDefault: false
network: taas-network
file:
directory: /traefik/dynamic
watch: true
log:
level: INFO
format: json
accessLog: {}
metrics:
prometheus:
addEntryPointsLabels: true
addServicesLabels: true
ping: {}