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