From 28778ca411b6a07a6d8d3853f8f710aa85aa012b Mon Sep 17 00:00:00 2001 From: f Date: Wed, 9 Sep 2026 04:52:02 -0300 Subject: [PATCH] feat: implement basic rate limiting by ip address --- .env.sample | 9 +++++++++ abra.sh | 4 ++-- file-provider.yml.tmpl | 7 ++++++- traefik.yml.tmpl | 4 ++++ 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/.env.sample b/.env.sample index ffa19c2..39aa5b9 100644 --- a/.env.sample +++ b/.env.sample @@ -249,3 +249,12 @@ WRITE_TIMEOUT=0s # # https://doc.traefik.io/traefik/reference/install-configuration/entrypoints/#opt-forwardedHeaders-trustedIPs #TRUSTED_IPS="['10.13.12.1']" # 10.13.12.1 is an example + +## Rate limits +# You can enable universal rate limits by setting RATE_LIMIT_EVERYTHING +# to true, otherwise each app needs to export their own middleware labels. +# +# https://doc.traefik.io/traefik/reference/routing-configuration/http/middlewares/ratelimit/ +#RATE_LIMIT_EVERYTHING=false +#RATE_LIMIT_AVERAGE=100 +#RATE_LIMIT_BURST=200 diff --git a/abra.sh b/abra.sh index 99af392..7370edf 100644 --- a/abra.sh +++ b/abra.sh @@ -1,4 +1,4 @@ -export TRAEFIK_YML_VERSION=v36 -export FILE_PROVIDER_YML_VERSION=v13 +export TRAEFIK_YML_VERSION=v37 +export FILE_PROVIDER_YML_VERSION=v14 export ENTRYPOINT_VERSION=v5 export ANUBIS_YML_VERSION=v1 diff --git a/file-provider.yml.tmpl b/file-provider.yml.tmpl index c0fab18..ceb13ea 100644 --- a/file-provider.yml.tmpl +++ b/file-provider.yml.tmpl @@ -22,6 +22,11 @@ http: basicAuth: usersFile: "/run/secrets/usersfile" {{ end }} + ip-rate-limit: + rateLimit: + average: {{ or (env "RATE_LIMIT_AVERAGE") "100" }} + burst: {{ or (env "RATE_LIMIT_BURST") "200" }} + period: "1s" security: headers: frameDeny: true @@ -70,4 +75,4 @@ tls: certificates: - certFile: /run/secrets/ssl_cert keyFile: /run/secrets/ssl_key - {{ end }} \ No newline at end of file + {{ end }} diff --git a/traefik.yml.tmpl b/traefik.yml.tmpl index 82327c2..20c62d1 100644 --- a/traefik.yml.tmpl +++ b/traefik.yml.tmpl @@ -51,6 +51,10 @@ entrypoints: {{ if ne (env "TRUSTED_IPS") "" }} forwardedHeaders: trustedIPs: {{ env "TRUSTED_IPS" }} +{{ end }} +{{ if eq (env "RATE_LIMIT_EVERYTHING") "true" }} + middlewares: + - "ip-rate-limit@file" {{ end }} transport: respondingTimeouts: -- 2.54.0