Pour limiter le nombre de requêtes par IP, vous pouvez installer le vmod throttle.
Voici le fichier compilé pour varnish 3.0.4 à placer sous debian dans /usr/lib/varnish/vmods :
libvmod_throttle.so.3.0.4.tar
MAJ : Voici le fichier compilé pour varnish 3.0.5 à placer sous debian dans /usr/lib/varnish/vmods :
libvmod_throttle.so.3.0.5.tar
MAJ : Voici le fichier compilé pour varnish 3.0.3 à placer sous debian dans /usr/lib/varnish/vmods :
libvmod_throttle.so.3.0.3.tar
Il faut ensuite ajouter dans la configuration en premier lieu:
import throttle;
puis dans le vcl_recv :
if(throttle.is_allowed("ip:" + client.ip, "20req/s") > 0s) { error 429 "Calm down"; }
Vous pouvez préciser plusieurs ratios entre les guillemets :
20req/s, 200req/30s, 1000req/5m, 2000req/h
Les unités de temps possibles sont : s,m,h,d
Vous pouvez exclure des IPs en utilisant une acl :
acl allowIP { "127.0.0.1"; } sub vcl_recv { if (!client.ip ~ allowIP) { if(throttle.is_allowed("ip:" + client.ip, "20req/s") > 0s) { error 429 "Calm down"; } } }
Vous pouvez aussi changer comment il applique le ratio, par exemple par user-agent :
if(throttle.is_allowed(req.http.user-agent, "20req/s") > 0s) {
On peut aussi appliquer le ratio que sur les miss par ip par exemple :
sub vcl_miss { if(req.url !~ "\.(jpg|jpeg|png|gif|ico|swf|css|js|html|htm)$") { if(throttle.is_allowed("miss:" + client.ip, "20req/s") > 0s) { error 429 "Calm down"; } } }