Skip to main content

Rate limiting

Taky máte někdy strach z DDoS na svůj webový server? Ukážeme si tady rate limiting který nám sice bude k prdu pokud bude útok větší, ale odradí každého otraveného bota z digitálního oceánu a amazon mraků.

Předvádíme na Debian Linuxu.

Instalace

  • V /etc/nginx/conf.d vytvořit konfigurační soubor, třeba 50-rate-limit.conf:
    limit_req_zone $binary_remote_addr zone=req_per_ip:20m rate=50r/s;
    limit_req zone=req_per_ip burst=50;
    limit_req_status 429;
    
    1. řádek nastavuje zónu s bufferem 20MB s rate limitem 50 požadavků za sekundu.
    2. řádek aktivuje zónu s parametrem burst=50 která dovoluje překročit limit o 50 požadavků za sekundu aniž by mě server neobsloužil.
    3. řádek nastavuje, že má nginx vrátit 429 - Too Many Requests
  • Otestovat config:
    nginx -t
    
  • Jestli je config ok, restartovat nginx
    systemctl restart nginx
    

Test

Na test je dobrý nějaký benchmarkovací nástroj. Ukážeme si ab (Apache HTTP server benchmarking tool)

  • Budeme potřebovat nainstalovat (pokud nemáme):

    apt update
    apt install apache2-utils
    
  • Spustíme test který by měl dopadnout dobře:

    ab -n 1000 -c 50 https://cvut.it/
    
    • 1000 requestů
    • 50 requestů paralelně
    • ptáme se webserveru https://cvut.it
  • Potom zkusíme test, který by měl ukazovat dostatečný počet Failed requests:

    ab -n 1000 -c 51 https://cvut.it/
    

    💡 Mělo by být viděno taky v logu že klient dostal 429