Oct 182013
 

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";
         }
    }
}

Lien : https://github.com/nand2/libvmod-throttle

  One Response to “Varnish vmod-throttle”

  1. Nouveau fichier compilé pour la nouvelle version de varnish 3.0.5

Leave a Reply to jeremm Cancel reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(required)

(required)

Spam protection by WP Captcha-Free