migrate
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
services:
|
||||
<%- if socket_proxy_enabled %>
|
||||
<< socket_proxy_service_name >>:
|
||||
image: tecnativa/docker-socket-proxy:0.4.2
|
||||
container_name: << socket_proxy_container_name >>
|
||||
environment:
|
||||
CONTAINERS: 1
|
||||
EVENTS: 1
|
||||
INFO: 1
|
||||
NETWORKS: 1
|
||||
PING: 1
|
||||
POST: 0
|
||||
SERVICES: 1
|
||||
TASKS: 1
|
||||
VERSION: 1
|
||||
VOLUMES: 1
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
networks:
|
||||
- << traefik_network >>
|
||||
restart: << restart_policy >>
|
||||
<%- endif %>
|
||||
<%- if whoami_enabled %>
|
||||
<< whoami_service_name >>:
|
||||
image: traefik/whoami:v1.11.0
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.docker.network=<< traefik_network >>
|
||||
- traefik.http.services.<< whoami_service_name >>.loadbalancer.server.port=80
|
||||
- traefik.http.routers.<< whoami_service_name >>-http.rule=Host(`<< whoami_host >>.<< whoami_domain >>`)
|
||||
- traefik.http.routers.<< whoami_service_name >>-http.entrypoints=<< traefik_entrypoint >>
|
||||
<%- if whoami_chain_middleware %>
|
||||
- traefik.http.routers.<< whoami_service_name >>-http.middlewares=<< whoami_chain_middleware >>
|
||||
<%- endif %>
|
||||
<%- if whoami_tls_enabled %>
|
||||
- traefik.http.routers.<< whoami_service_name >>-https.rule=Host(`<< whoami_host >>.<< whoami_domain >>`)
|
||||
- traefik.http.routers.<< whoami_service_name >>-https.entrypoints=<< traefik_tls_entrypoint >>
|
||||
- traefik.http.routers.<< whoami_service_name >>-https.tls=true
|
||||
- traefik.http.routers.<< whoami_service_name >>-https.tls.certresolver=<< whoami_tls_certresolver >>
|
||||
<%- if whoami_chain_middleware %>
|
||||
- traefik.http.routers.<< whoami_service_name >>-https.middlewares=<< whoami_chain_middleware >>
|
||||
<%- endif %>
|
||||
<%- endif %>
|
||||
networks:
|
||||
- << traefik_network >>
|
||||
restart: << restart_policy >>
|
||||
<%- endif %>
|
||||
|
||||
networks:
|
||||
<< traefik_network >>:
|
||||
<%- if traefik_network_external %>
|
||||
external: true
|
||||
<%- else %>
|
||||
driver: bridge
|
||||
name: << traefik_network >>
|
||||
<%- endif %>
|
||||
@@ -0,0 +1,32 @@
|
||||
http:
|
||||
middlewares:
|
||||
default-secured:
|
||||
chain:
|
||||
middlewares:
|
||||
<%- if security_headers_enabled %>
|
||||
- security-headers
|
||||
<%- endif %>
|
||||
<%- if ipallowlist_enabled %>
|
||||
- default-ipallowlist
|
||||
<%- endif %>
|
||||
<%- if crowdsec_middleware_enabled %>
|
||||
- crowdsec-bouncer
|
||||
<%- endif %>
|
||||
<%- if forwardauth_enabled %>
|
||||
- forward-auth
|
||||
<%- endif %>
|
||||
dashboard-secured:
|
||||
chain:
|
||||
middlewares:
|
||||
<%- if security_headers_enabled %>
|
||||
- security-headers
|
||||
<%- endif %>
|
||||
<%- if dashboard_basicauth_enabled %>
|
||||
- dashboard-basicauth
|
||||
<%- endif %>
|
||||
<%- if ipallowlist_enabled %>
|
||||
- dashboard-ipallowlist
|
||||
<%- endif %>
|
||||
<%- if crowdsec_middleware_enabled %>
|
||||
- crowdsec-bouncer
|
||||
<%- endif %>
|
||||
@@ -0,0 +1,78 @@
|
||||
http:
|
||||
middlewares:
|
||||
<%- if security_headers_enabled %>
|
||||
security-headers:
|
||||
headers:
|
||||
contentTypeNosniff: true
|
||||
frameDeny: true
|
||||
browserXssFilter: true
|
||||
referrerPolicy: same-origin
|
||||
stsSeconds: 31536000
|
||||
stsIncludeSubdomains: true
|
||||
stsPreload: true
|
||||
customResponseHeaders:
|
||||
X-Robots-Tag: none
|
||||
<%- endif %>
|
||||
<%- if dashboard_basicauth_enabled %>
|
||||
dashboard-basicauth:
|
||||
basicAuth:
|
||||
users:
|
||||
- << dashboard_basicauth_users >>
|
||||
<%- endif %>
|
||||
<%- if ipallowlist_enabled %>
|
||||
dashboard-ipallowlist:
|
||||
ipAllowList:
|
||||
sourceRange:
|
||||
- << ipallowlist_range_1 >>
|
||||
<%- if ipallowlist_range_2 %>
|
||||
- << ipallowlist_range_2 >>
|
||||
<%- endif %>
|
||||
<%- if ipallowlist_range_3 %>
|
||||
- << ipallowlist_range_3 >>
|
||||
<%- endif %>
|
||||
default-ipallowlist:
|
||||
ipAllowList:
|
||||
sourceRange:
|
||||
- << ipallowlist_range_1 >>
|
||||
<%- if ipallowlist_range_2 %>
|
||||
- << ipallowlist_range_2 >>
|
||||
<%- endif %>
|
||||
<%- if ipallowlist_range_3 %>
|
||||
- << ipallowlist_range_3 >>
|
||||
<%- endif %>
|
||||
<%- endif %>
|
||||
<%- if forwardauth_enabled %>
|
||||
forward-auth:
|
||||
forwardAuth:
|
||||
address: "<< forwardauth_address >>"
|
||||
trustForwardHeader: << forwardauth_trust_forward_header | lower >>
|
||||
authResponseHeadersRegex: "<< forwardauth_response_headers_regex >>"
|
||||
<%- endif %>
|
||||
<%- if crowdsec_middleware_enabled %>
|
||||
crowdsec-bouncer:
|
||||
plugin:
|
||||
crowdsec-bouncer-traefik-plugin:
|
||||
enabled: true
|
||||
crowdsecMode: << crowdsec_mode >>
|
||||
crowdsecLapiScheme: http
|
||||
crowdsecLapiHost: << crowdsec_lapi_host >>
|
||||
crowdsecLapiKey: << crowdsec_bouncer_key >>
|
||||
<%- if crowdsec_trusted_ip_1 or crowdsec_trusted_ip_2 or crowdsec_trusted_ip_3 %>
|
||||
forwardedHeadersTrustedIPs:
|
||||
<%- if crowdsec_trusted_ip_1 %>
|
||||
- << crowdsec_trusted_ip_1 >>
|
||||
<%- endif %>
|
||||
<%- if crowdsec_trusted_ip_2 %>
|
||||
- << crowdsec_trusted_ip_2 >>
|
||||
<%- endif %>
|
||||
<%- if crowdsec_trusted_ip_3 %>
|
||||
- << crowdsec_trusted_ip_3 >>
|
||||
<%- endif %>
|
||||
<%- endif %>
|
||||
crowdsecAppsecEnabled: << crowdsec_appsec_enabled | lower >>
|
||||
<%- if crowdsec_appsec_enabled %>
|
||||
crowdsecAppsecHost: << crowdsec_appsec_host >>
|
||||
crowdsecAppsecFailureBlock: << crowdsec_appsec_failure_block | lower >>
|
||||
crowdsecAppsecUnreachableBlock: << crowdsec_appsec_unreachable_block | lower >>
|
||||
<%- endif %>
|
||||
<%- endif %>
|
||||
@@ -0,0 +1,524 @@
|
||||
{
|
||||
"slug": "traefik-addons",
|
||||
"kind": "compose",
|
||||
"metadata": {
|
||||
"name": "Traefik Addons",
|
||||
"description": "Companion Docker Compose stack for the main Traefik template, with a docker-socket-proxy, a whoami test app, and file-provider middleware examples for hardening and external auth.",
|
||||
"tags": [
|
||||
"traefik",
|
||||
"security",
|
||||
"docker"
|
||||
],
|
||||
"icon": {
|
||||
"provider": "selfhst",
|
||||
"id": "traefik"
|
||||
},
|
||||
"draft": true,
|
||||
"version": {
|
||||
"name": "2026.04.13",
|
||||
"source_dep_name": "manual/traefik-addons"
|
||||
}
|
||||
},
|
||||
"variables": [
|
||||
{
|
||||
"title": "General",
|
||||
"name": "general",
|
||||
"items": [
|
||||
{
|
||||
"name": "restart_policy",
|
||||
"type": "enum",
|
||||
"title": "Restart Policy",
|
||||
"required": true,
|
||||
"default": "unless-stopped",
|
||||
"config": {
|
||||
"options": [
|
||||
"unless-stopped",
|
||||
"always",
|
||||
"on-failure",
|
||||
"no"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Traefik",
|
||||
"name": "traefik",
|
||||
"items": [
|
||||
{
|
||||
"name": "traefik_network",
|
||||
"type": "str",
|
||||
"title": "Traefik Network",
|
||||
"required": true,
|
||||
"default": "traefik",
|
||||
"description": "Shared Docker network used by the main Traefik stack.",
|
||||
"config": {
|
||||
"placeholder": "traefik"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "traefik_network_external",
|
||||
"type": "bool",
|
||||
"title": "External Network",
|
||||
"required": false,
|
||||
"default": true
|
||||
},
|
||||
{
|
||||
"name": "traefik_entrypoint",
|
||||
"type": "str",
|
||||
"title": "Entrypoint",
|
||||
"required": true,
|
||||
"default": "web",
|
||||
"config": {
|
||||
"placeholder": "web"
|
||||
},
|
||||
"needs": [
|
||||
"whoami_enabled=true"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "traefik_tls_entrypoint",
|
||||
"type": "str",
|
||||
"title": "TLS Entrypoint",
|
||||
"required": true,
|
||||
"default": "websecure",
|
||||
"config": {
|
||||
"placeholder": "websecure"
|
||||
},
|
||||
"needs": [
|
||||
"whoami_enabled=true",
|
||||
"whoami_tls_enabled=true"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Socket Proxy",
|
||||
"toggle": "socket_proxy_enabled",
|
||||
"name": "socket-proxy",
|
||||
"items": [
|
||||
{
|
||||
"name": "socket_proxy_enabled",
|
||||
"type": "bool",
|
||||
"title": "Docker Socket Proxy",
|
||||
"required": false,
|
||||
"default": true,
|
||||
"description": "Run a restricted Docker socket proxy for Traefik and companion tooling."
|
||||
},
|
||||
{
|
||||
"name": "socket_proxy_service_name",
|
||||
"type": "str",
|
||||
"title": "Socket Proxy Service Name",
|
||||
"required": true,
|
||||
"default": "docker-socket-proxy",
|
||||
"description": "Compose service name for the docker-socket-proxy.",
|
||||
"needs": [
|
||||
"socket_proxy_enabled=true"
|
||||
],
|
||||
"config": {
|
||||
"placeholder": "docker-socket-proxy"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "socket_proxy_container_name",
|
||||
"type": "str",
|
||||
"title": "Socket Proxy Container Name",
|
||||
"required": true,
|
||||
"default": "docker-socket-proxy",
|
||||
"description": "Container name for the docker-socket-proxy service.",
|
||||
"needs": [
|
||||
"socket_proxy_enabled=true"
|
||||
],
|
||||
"config": {
|
||||
"placeholder": "docker-socket-proxy"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Whoami",
|
||||
"toggle": "whoami_enabled",
|
||||
"name": "whoami",
|
||||
"items": [
|
||||
{
|
||||
"name": "whoami_enabled",
|
||||
"type": "bool",
|
||||
"title": "Whoami Test App",
|
||||
"required": false,
|
||||
"default": true,
|
||||
"description": "Deploy a small Traefik-routed test application."
|
||||
},
|
||||
{
|
||||
"name": "whoami_service_name",
|
||||
"type": "str",
|
||||
"title": "Whoami Service Name",
|
||||
"required": true,
|
||||
"default": "whoami",
|
||||
"description": "Compose service name for the whoami test container.",
|
||||
"needs": [
|
||||
"whoami_enabled=true"
|
||||
],
|
||||
"config": {
|
||||
"placeholder": "whoami"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "whoami_host",
|
||||
"type": "str",
|
||||
"title": "Whoami Host",
|
||||
"required": true,
|
||||
"default": "whoami",
|
||||
"needs": [
|
||||
"whoami_enabled=true"
|
||||
],
|
||||
"config": {
|
||||
"placeholder": "whoami"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "whoami_domain",
|
||||
"type": "str",
|
||||
"title": "Whoami Domain",
|
||||
"required": true,
|
||||
"default": "home.arpa",
|
||||
"needs": [
|
||||
"whoami_enabled=true"
|
||||
],
|
||||
"config": {
|
||||
"placeholder": "home.arpa"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "whoami_tls_enabled",
|
||||
"type": "bool",
|
||||
"title": "Whoami TLS",
|
||||
"required": false,
|
||||
"default": false,
|
||||
"description": "Create an HTTPS router for the whoami test route.",
|
||||
"needs": [
|
||||
"whoami_enabled=true"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "whoami_tls_certresolver",
|
||||
"type": "str",
|
||||
"title": "Whoami Cert Resolver",
|
||||
"required": true,
|
||||
"default": "cloudflare",
|
||||
"description": "Traefik certificate resolver used for the HTTPS whoami router.",
|
||||
"needs": [
|
||||
"whoami_enabled=true",
|
||||
"whoami_tls_enabled=true"
|
||||
],
|
||||
"config": {
|
||||
"placeholder": "cloudflare"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "whoami_chain_middleware",
|
||||
"type": "str",
|
||||
"title": "Whoami Chain Middleware",
|
||||
"required": false,
|
||||
"default": "default-secured@file",
|
||||
"description": "File-provider middleware chain attached to the whoami routers.",
|
||||
"needs": [
|
||||
"whoami_enabled=true"
|
||||
],
|
||||
"config": {
|
||||
"placeholder": "default-secured@file"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Dashboard Hardening",
|
||||
"name": "dashboard-hardening",
|
||||
"items": [
|
||||
{
|
||||
"name": "security_headers_enabled",
|
||||
"type": "bool",
|
||||
"title": "Security Headers",
|
||||
"required": false,
|
||||
"default": true,
|
||||
"description": "Render a reusable security-headers middleware."
|
||||
},
|
||||
{
|
||||
"name": "dashboard_basicauth_enabled",
|
||||
"type": "bool",
|
||||
"title": "Dashboard BasicAuth",
|
||||
"required": false,
|
||||
"default": false,
|
||||
"description": "Render a BasicAuth middleware suitable for dashboard protection."
|
||||
},
|
||||
{
|
||||
"name": "dashboard_basicauth_users",
|
||||
"type": "secret",
|
||||
"title": "BasicAuth Users",
|
||||
"required": true,
|
||||
"description": "One htpasswd entry to render into the dashboard BasicAuth middleware.",
|
||||
"needs": [
|
||||
"dashboard_basicauth_enabled=true"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ipallowlist_enabled",
|
||||
"type": "bool",
|
||||
"title": "IP Allowlist",
|
||||
"required": false,
|
||||
"default": false,
|
||||
"description": "Render IP allowlist middlewares for restricted dashboards or internal apps."
|
||||
},
|
||||
{
|
||||
"name": "ipallowlist_range_1",
|
||||
"type": "str",
|
||||
"title": "Allowlist Range 1",
|
||||
"required": true,
|
||||
"default": "192.168.0.0/16",
|
||||
"description": "Primary CIDR allowed through the IP allowlist middleware.",
|
||||
"needs": [
|
||||
"ipallowlist_enabled=true"
|
||||
],
|
||||
"config": {
|
||||
"placeholder": "192.168.0.0/16"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "ipallowlist_range_2",
|
||||
"type": "str",
|
||||
"title": "Allowlist Range 2",
|
||||
"required": false,
|
||||
"default": "10.0.0.0/8",
|
||||
"description": "Optional second CIDR allowed through the IP allowlist middleware.",
|
||||
"needs": [
|
||||
"ipallowlist_enabled=true"
|
||||
],
|
||||
"config": {
|
||||
"placeholder": "10.0.0.0/8"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "ipallowlist_range_3",
|
||||
"type": "str",
|
||||
"title": "Allowlist Range 3",
|
||||
"required": false,
|
||||
"default": "",
|
||||
"description": "Optional third CIDR allowed through the IP allowlist middleware.",
|
||||
"needs": [
|
||||
"ipallowlist_enabled=true"
|
||||
],
|
||||
"config": {
|
||||
"placeholder": "fd00::/8"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "ForwardAuth",
|
||||
"toggle": "forwardauth_enabled",
|
||||
"name": "forwardauth",
|
||||
"items": [
|
||||
{
|
||||
"name": "forwardauth_enabled",
|
||||
"type": "bool",
|
||||
"title": "ForwardAuth",
|
||||
"required": false,
|
||||
"default": false,
|
||||
"description": "Render a ForwardAuth middleware for Authentik, Authelia, or another auth proxy."
|
||||
},
|
||||
{
|
||||
"name": "forwardauth_address",
|
||||
"type": "str",
|
||||
"title": "ForwardAuth Address",
|
||||
"required": true,
|
||||
"default": "https://auth.home.arpa/outpost.goauthentik.io/auth/traefik",
|
||||
"description": "ForwardAuth endpoint Traefik should call for authentication.",
|
||||
"needs": [
|
||||
"forwardauth_enabled=true"
|
||||
],
|
||||
"config": {
|
||||
"placeholder": "https://auth.home.arpa/outpost.goauthentik.io/auth/traefik"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "forwardauth_trust_forward_header",
|
||||
"type": "bool",
|
||||
"title": "Trust Forwarded Headers",
|
||||
"required": false,
|
||||
"default": true,
|
||||
"description": "Trust existing forwarded headers when calling the ForwardAuth endpoint.",
|
||||
"needs": [
|
||||
"forwardauth_enabled=true"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "forwardauth_response_headers_regex",
|
||||
"type": "str",
|
||||
"title": "Auth Response Headers Regex",
|
||||
"required": false,
|
||||
"default": "^X-authentik-.*",
|
||||
"description": "Regex of headers copied back from the auth response.",
|
||||
"needs": [
|
||||
"forwardauth_enabled=true"
|
||||
],
|
||||
"config": {
|
||||
"placeholder": "^X-authentik-.*"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "CrowdSec Middleware",
|
||||
"toggle": "crowdsec_middleware_enabled",
|
||||
"name": "crowdsec",
|
||||
"items": [
|
||||
{
|
||||
"name": "crowdsec_middleware_enabled",
|
||||
"type": "bool",
|
||||
"title": "CrowdSec Middleware",
|
||||
"required": false,
|
||||
"default": false,
|
||||
"description": "Render the Traefik CrowdSec plugin middleware example."
|
||||
},
|
||||
{
|
||||
"name": "crowdsec_lapi_host",
|
||||
"type": "str",
|
||||
"title": "CrowdSec LAPI Host",
|
||||
"required": true,
|
||||
"default": "crowdsec:8080",
|
||||
"description": "CrowdSec Local API host and port reachable from Traefik.",
|
||||
"needs": [
|
||||
"crowdsec_middleware_enabled=true"
|
||||
],
|
||||
"config": {
|
||||
"placeholder": "crowdsec:8080"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "crowdsec_bouncer_key",
|
||||
"type": "secret",
|
||||
"title": "CrowdSec Bouncer Key",
|
||||
"required": true,
|
||||
"description": "API key for the Traefik CrowdSec remediation component.",
|
||||
"needs": [
|
||||
"crowdsec_middleware_enabled=true"
|
||||
],
|
||||
"config": {
|
||||
"autogenerated": {
|
||||
"length": 32
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "crowdsec_mode",
|
||||
"type": "enum",
|
||||
"title": "CrowdSec Mode",
|
||||
"required": true,
|
||||
"default": "stream",
|
||||
"description": "CrowdSec plugin mode used by Traefik.",
|
||||
"needs": [
|
||||
"crowdsec_middleware_enabled=true"
|
||||
],
|
||||
"config": {
|
||||
"options": [
|
||||
"live",
|
||||
"stream",
|
||||
"alone",
|
||||
"appsec"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "crowdsec_appsec_enabled",
|
||||
"type": "bool",
|
||||
"title": "CrowdSec AppSec",
|
||||
"required": false,
|
||||
"default": false,
|
||||
"needs": [
|
||||
"crowdsec_middleware_enabled=true"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "crowdsec_appsec_host",
|
||||
"type": "str",
|
||||
"title": "CrowdSec AppSec Host",
|
||||
"required": true,
|
||||
"default": "crowdsec:7422",
|
||||
"description": "CrowdSec AppSec host and port reachable from Traefik.",
|
||||
"needs": [
|
||||
"crowdsec_middleware_enabled=true",
|
||||
"crowdsec_appsec_enabled=true"
|
||||
],
|
||||
"config": {
|
||||
"placeholder": "crowdsec:7422"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "crowdsec_appsec_failure_block",
|
||||
"type": "bool",
|
||||
"title": "Block On AppSec Failure",
|
||||
"required": false,
|
||||
"default": true,
|
||||
"description": "Block requests if CrowdSec AppSec returns an internal error.",
|
||||
"needs": [
|
||||
"crowdsec_middleware_enabled=true",
|
||||
"crowdsec_appsec_enabled=true"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "crowdsec_appsec_unreachable_block",
|
||||
"type": "bool",
|
||||
"title": "Block When AppSec Unreachable",
|
||||
"required": false,
|
||||
"default": false,
|
||||
"description": "Block requests if CrowdSec AppSec cannot be reached.",
|
||||
"needs": [
|
||||
"crowdsec_middleware_enabled=true",
|
||||
"crowdsec_appsec_enabled=true"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "crowdsec_trusted_ip_1",
|
||||
"type": "str",
|
||||
"title": "Trusted IP 1",
|
||||
"required": false,
|
||||
"default": "10.0.0.0/8",
|
||||
"description": "Optional trusted upstream CIDR for forwarded headers.",
|
||||
"needs": [
|
||||
"crowdsec_middleware_enabled=true"
|
||||
],
|
||||
"config": {
|
||||
"placeholder": "10.0.0.0/8"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "crowdsec_trusted_ip_2",
|
||||
"type": "str",
|
||||
"title": "Trusted IP 2",
|
||||
"required": false,
|
||||
"default": "192.168.0.0/16",
|
||||
"description": "Optional second trusted CIDR for forwarded headers.",
|
||||
"needs": [
|
||||
"crowdsec_middleware_enabled=true"
|
||||
],
|
||||
"config": {
|
||||
"placeholder": "192.168.0.0/16"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "crowdsec_trusted_ip_3",
|
||||
"type": "str",
|
||||
"title": "Trusted IP 3",
|
||||
"required": false,
|
||||
"default": "",
|
||||
"description": "Optional third trusted CIDR for forwarded headers.",
|
||||
"needs": [
|
||||
"crowdsec_middleware_enabled=true"
|
||||
],
|
||||
"config": {
|
||||
"placeholder": "fd00::/8"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user