ITSkillsCenter
Cybersécurité

Caddy rate limiting et fail2ban : tutoriel 2026

3 min de lecture

Une fois votre site en ligne avec Caddy, deux menaces récurrentes apparaissent : les bots qui hammer vos endpoints (login, API publique) et les scrapers qui dévorent votre bande passante. La protection se fait à deux niveaux complémentaires : rate limiting au niveau Caddy (refus immédiat des excès) et fail2ban en background (bannissement IP des récidivistes). Voici le tutoriel complet 2026.

Voir notre guide Caddy complet.

Rate limiting via plugin Caddy

Le plugin caddy-ratelimit de Matt Holt est le standard de fait :

# Builder Caddy avec le plugin
xcaddy build --with github.com/mholt/caddy-ratelimit

# Ou télécharger une build pré-compilée incluant le plugin

Configuration de base

{
    order rate_limit before basic_auth
}

api.exemple.sn {
    rate_limit {
        zone dynamic_per_ip {
            key {remote_host}
            events 100
            window 1m
        }
    }

    reverse_proxy 127.0.0.1:3000
}

Cette config limite chaque IP à 100 requêtes par minute. Au-delà, Caddy retourne 429 Too Many Requests.

Rate limit ciblé sur endpoints sensibles

api.exemple.sn {
    # Login : très restrictif
    @login path /api/auth/login
    rate_limit @login {
        zone login_per_ip {
            key {remote_host}
            events 5
            window 5m
        }
    }

    # Reset password : ultra-restrictif
    @reset path /api/auth/reset-password
    rate_limit @reset {
        zone reset_per_ip {
            key {remote_host}
            events 3
            window 30m
        }
    }

    # Reste de l'API : raisonnable
    @api path /api/*
    rate_limit @api {
        zone api_per_ip {
            key {remote_host}
            events 200
            window 1m
        }
    }

    reverse_proxy 127.0.0.1:3000
}

Rate limit par utilisateur authentifié

api.exemple.sn {
    # Si Authorization header présent, key par token (par user)
    rate_limit {
        zone per_user {
            key {http.request.header.authorization}
            events 1000
            window 1h
        }
    }

    reverse_proxy 127.0.0.1:3000
}

fail2ban pour bannir les IP malveillantes

fail2ban analyse les logs Caddy et bloque les IP qui dépassent un seuil :

apt install -y fail2ban

# Configurer Caddy pour logger en JSON
# Caddyfile :
{
    log {
        output file /var/log/caddy/access.log
        format json
    }
}
# /etc/fail2ban/filter.d/caddy.conf
[Definition]
failregex = ^.*"remote_ip":"<HOST>".*"status":(?:401|403|404|429).*$
ignoreregex =
# /etc/fail2ban/jail.local
[caddy]
enabled  = true
port     = http,https
filter   = caddy
logpath  = /var/log/caddy/access.log
maxretry = 20
findtime = 600
bantime  = 3600
backend  = polling

systemctl restart fail2ban
fail2ban-client status caddy

Crowdsec : alternative moderne

Crowdsec est une alternative moderne à fail2ban avec partage de blacklist communautaire. Plugin Caddy disponible. Pratique si vous voulez une protection collaborative.

IP whitelist / blacklist statique

api.exemple.sn {
    # Bloquer des IPs/CIDRs connues comme malveillantes
    @blocked client_ip 192.0.2.0/24 198.51.100.0/24
    abort @blocked

    reverse_proxy 127.0.0.1:3000
}

Stratégie complète recommandée

  1. Caddy rate_limit sur login (5/5min), reset (3/30min), API (200/1min) — refuse immédiat
  2. fail2ban bannit 1h les IP ayant 20+ erreurs en 10 min — défense persistante
  3. Hetzner Cloud Firewall bloque les IPs whitelistées comme abuseurs récurrents
  4. Cloudflare devant filtre les bots évidents et les attaques DDoS

Adaptation Afrique de l’Ouest

Pour des sites avec audience mixte africaine + européenne, soyez prudents avec les rate limits trop agressifs : un FAI mobile sénégalais peut sortir derrière une seule IP CGNAT pour des centaines d’utilisateurs. Préférez des limites par session/auth plutôt que par IP pour les cas légitimes, et gardez fail2ban pour les comportements clairement abusifs.

Erreurs fréquentes

ErreurCauseSolution
« unknown directive rate_limit »Plugin pas inclusxcaddy build –with caddy-ratelimit
fail2ban ban tout le mondemaxretry trop bas + filter trop largeAjuster failregex pour ne matcher que les vrais abus
CGNAT FAI mobile bannit utilisateurs légitimesRate par IPRate par session ou par auth header
Logs Caddy n’apparaissent pasoutput file manquantAjouter le block log dans Caddyfile

Pour aller plus loin

Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 250.000 FCFA
Parlons de Votre Projet
Publicité