Bloquer les Spam Referer avec Nginx

 

Suite au signalement d'un client comme quoi les stats étaient polluées par des spams referer, j'ai cherché une solution globale pour la mise en place sur un proxy nginx qui gère plusieurs serveurs et sites web.

Dans beaucoup d'articles on trouve des infos sur comment bloquer les spam referer site par site en modifiant les htaccess, par exemple ici ou avec nginx ici.

Mon besoins est plutôt de pouvoir générer une liste  complète évolutive que je puisse appliquer facilement sur les sites.

Etape 1 : créer la blacklist

On va utiliser le module nginx nginx_http_map_module pour créer la liste dans le fichier /etc/nginx/spam_referer_blacklist.conf :

# /etc/nginx/spam_referer_blacklist.conf

map $http_referer $bad_referer {
    hostnames;
    default                           0;
    # Put regexes for undesired referers here
    "~social-buttons.com"             1;
    "~semalt.com"                     1;
    "~kambasoft.com"                  1;
    "~savetubevideo.com"              1;
    "~descargar-musica-gratis.net"    1;
    "~7makemoneyonline.com"           1;
    "~baixar-musicas-gratis.com"      1;
    "~iloveitaly.com"                 1;
    "~ilovevitaly.ru"                 1;
    "~fbdownloader.com"               1;
    "~econom.co"                      1;
    "~buttons-for-website.com"        1;
    "~buttons-for-your-website.com"   1;
    "~srecorder.co"                   1;
...
}

On liste chaque referer à bloquer dans la liste :
"~referer" 1;

NB : il faut mettre en place un système de mise à jour de la liste pour bloquer les nouveaux spam referer qui apparaissent dans les outils de suivi (FTP ou Git par exemple).

 

Etape 2 : inclure le fichier dans la conf nginx

Dans le fichier /etc/nginx/nginx.conf :

 # include spam referers blacklist
 include /etc/nginx/spam_referer_blacklist.txt;

 

Etape 3 : inclure dans le vhost des sites

Dans le fichier d'un vhost dans la partie "server" :

if ($bad_referer) {
        return 444;
    }

Puis on recharge nginx

 

Etape 4 : tester

Un petit test avec curl :

$ curl -k --referer http://buttons-for-website.com http://www.monsite.com
curl: (52) Empty reply from server

 

Lectures complémentaires

Voici la liste des sites qui m'ont permis de faire cette mise en place :

http://www.blackchili.fr/comment-bloquer-semalt-darodar-et-les-autres-specialistes-du-spam-referrer/
http://www.ninjalinker.com/spam-semalt-ilovevitaly-darodar/
http://www.tutfeed.com/post/31432/Nginx-Block-Referrer-Spam
http://www.linuxhowtos.org/System/refererspam.htm