fix(proxy): exclure les 401 git-over-HTTPS du jail traefik #17

Closed
opened 2026-07-30 15:42:43 +00:00 by Damien · 0 comments
Owner

Contexte

Le jail [traefik-auth] posé par proxy/install.sh matche DownstreamStatus ∈ {401, 403, 429, 5xx} sur tous les paths, avec maxretry = 10 / findtime = 5m.

Or git clone, git fetch et git push en HTTPS sur un dépôt privé font systématiquement un aller-retour 401 avant d'envoyer les credentials : le client tape l'URL sans auth, reçoit un 401 WWW-Authenticate, puis rejoue la requête avec les identifiants.

Conséquence : 10 opérations git en 5 minutes (boucle de fetch, runner bavard, IDE qui poll) suffisent à faire bannir une IP légitime sur les ports 80/443 pendant 1h. L'usage étant exclusivement HTTPS ici, ce n'est pas un risque théorique.

Correctif

Ajouter un ignoreregex au filtre /etc/fail2ban/filter.d/traefik.conf pour exclure les 401 du protocole Git smart HTTP :

ignoreregex = ^.*"RequestPath":"[^"]*/(info/refs|git-upload-pack|git-receive-pack)[^"]*".*"DownstreamStatus":401

Les 401 sur toute autre route (API, UI, registry) restent couverts.

Fichier touché

  • proxy/install.sh — bloc d'écriture de /etc/fail2ban/filter.d/traefik.conf

Points d'attention

  • Le filtre est écrit via un heredoc quoté (<< 'EOF') : pas d'expansion, la regex passe telle quelle.
  • L'écriture du filtre est aujourd'hui inconditionnelle à chaque run — l'idempotence est donc déjà acquise ici, le rejeu du script réapplique la version corrigée.
  • Le sudo systemctl restart fail2ban qui suit est déjà en place.

Critères d'acceptation

  • fail2ban-regex /var/log/traefik/access.log /etc/fail2ban/filter.d/traefik.conf montre les 401 git en ignored et non en matched
  • Un 401 sur /user/login ou /api/v1/... reste matched
  • fail2ban-client status traefik-auth démarre sans erreur de parsing
  • Une série de 15 git fetch consécutifs ne déclenche plus de ban

Indépendance

Aucune dépendance. Mergeable immédiatement, avant tout le reste du milestone — c'est un correctif de production autonome.

## Contexte Le jail `[traefik-auth]` posé par `proxy/install.sh` matche `DownstreamStatus` ∈ {401, 403, 429, 5xx} sur **tous** les paths, avec `maxretry = 10` / `findtime = 5m`. Or `git clone`, `git fetch` et `git push` en HTTPS sur un dépôt privé font systématiquement un aller-retour **401 avant d'envoyer les credentials** : le client tape l'URL sans auth, reçoit un `401 WWW-Authenticate`, puis rejoue la requête avec les identifiants. Conséquence : 10 opérations git en 5 minutes (boucle de fetch, runner bavard, IDE qui poll) suffisent à faire bannir une IP légitime sur les ports 80/443 pendant 1h. L'usage étant exclusivement HTTPS ici, ce n'est pas un risque théorique. ## Correctif Ajouter un `ignoreregex` au filtre `/etc/fail2ban/filter.d/traefik.conf` pour exclure les 401 du protocole Git smart HTTP : ```ini ignoreregex = ^.*"RequestPath":"[^"]*/(info/refs|git-upload-pack|git-receive-pack)[^"]*".*"DownstreamStatus":401 ``` Les 401 sur toute autre route (API, UI, registry) restent couverts. ## Fichier touché - `proxy/install.sh` — bloc d'écriture de `/etc/fail2ban/filter.d/traefik.conf` ## Points d'attention - Le filtre est écrit via un heredoc **quoté** (`<< 'EOF'`) : pas d'expansion, la regex passe telle quelle. - L'écriture du filtre est aujourd'hui inconditionnelle à chaque run — l'idempotence est donc déjà acquise ici, le rejeu du script réapplique la version corrigée. - Le `sudo systemctl restart fail2ban` qui suit est déjà en place. ## Critères d'acceptation - [ ] `fail2ban-regex /var/log/traefik/access.log /etc/fail2ban/filter.d/traefik.conf` montre les 401 git en `ignored` et non en `matched` - [ ] Un 401 sur `/user/login` ou `/api/v1/...` reste `matched` - [ ] `fail2ban-client status traefik-auth` démarre sans erreur de parsing - [ ] Une série de 15 `git fetch` consécutifs ne déclenche plus de ban ## Indépendance Aucune dépendance. **Mergeable immédiatement**, avant tout le reste du milestone — c'est un correctif de production autonome.
Damien added this to the gitea-lxc-migration milestone 2026-07-30 15:42:43 +00:00
Damien added reference fix/proxy-jail-git-401 2026-08-01 08:23:49 +00:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Damien/infra-scripts#17