TechPro

Comment mettre en place une stratégie efficace de limitation de débit (Rate Limiting) avec Nginx pour contrer les attaques force brute et le scraping ?

 

Nginx intègre un moteur de limitation de débit très puissant basé sur l’algorithme du Leaky Bucket. Il permet de bloquer l’abus de requêtes sans perturber les utilisateurs légitimes.

Étape 1 : Définir la zone de stockage (limit_req_zone)

Ouvrez votre fichier de configuration principal /etc/nginx/nginx.conf ou le bloc http de votre site :

Nginx

http {
    # Crée une zone de 10 Mo nommée "login_limit" pour stocker les adresses IP (1 Mo = ~16 000 IP)
    # Limite le débit à 1 requête par seconde (1r/s) par adresse IP
    limit_req_zone $binary_remote_addr zone=login_limit:10m rate=1r/s;
    
    # Zone globale pour le reste du site (ex: 10 requêtes par seconde max)
    limit_req_zone $binary_remote_addr zone=global_limit:10m rate=10r/s;
}

Étape 2 : Appliquer les limitations sur vos routes sensibles

Dans la configuration de votre serveur virtuel (server ou location), appliquez ces zones :

Nginx

server {
    ...

    # Protection des formulaires sensibles (Authentification, inscription, recherche)
    location /login {
        # Applique la zone de limitation
        limit_req_req zone=login_limit burst=5 nodelay;
        
        # Définit le code d'erreur renvoyé au client (429 Too Many Requests au lieu de 503)
        limit_req_status 429;
        
        proxy_pass http://votre_backend;
    }

    # Limitation générale sur le reste du site
    location / {
        # burst=20 autorise temporairement jusqu'à 20 requêtes en rafale pour charger les assets (CSS, JS)
        limit_req zone=global_limit burst=20 nodelay;
        try_files $uri $uri/ /index.php?$query_string;
    }
}
  • burst=X : Crée une file d’attente tampon. Si un utilisateur dépasse le débit de base, ses requêtes excédentaires (jusqu’à X) sont acceptées mais traitées au rythme configuré.

  • nodelay : Indispensable pour éviter de ralentir artificiellement l’affichage de votre site pour les utilisateurs légitimes. Les requêtes dans la limite du burst sont exécutées immédiatement.

 

Share: