AccueilFAQStatistiquesDiversContact

Auteur : Jérôme Bruandet
spamcleaner.org
Date : 12/09/2007

Anti-spam : comment se débarasser des spams de referer

Ils s'amusent à polluer les logs de nos serveurs pour se faire de la pub gratuite. Comme ils aiment manger notre bande passante, nous allons manger la leur.

Introduction

Le spam de referer est une technique de spam très fréquente dont vous avez surement été victimes, peut-être même sans le savoir, à partir du moment où vous administrez un serveur.
La méthode est simple: avec un script ou programme, les spammeurs envoient des requêtes à votre site, généralement pour demander l'affichage de la page sommaire, et votre serveur enregistre celles-ci dans les logs d'Apache comme il le fait pour chacune des connexions à votre site. Ces lignes enregistrées contiennent l'IP, la date et l'heure, la page demandée et surtout le referer, c'est à dire d'où viennent ces requêtes. Lorsque vous naviguez sur un site xxxx.com et que celui-ci contient un lien vers le site yyyy.com, si vous cliquez sur ce lien, votre navigateur indiquera à yyyy.com que vous venez de xxxx.com. C'est ce que l'on nomme le referer et que votre serveur Apache récupère via la variable HTTP_REFERER envoyée par votre navigateur.

Les spammeurs ont donc trouvé un grand intérêt là-dedans: beaucoup de sites rendent accessibles leurs statistiques à tous c'est à dire à vous, à moi, mais aussi et surtout à tous les moteurs de recherche. En se connectant à votre serveur et en envoyant un referer qui contient l'adresse de son site, le spammeur espère que si vos statisques sont accessibles, il se fera référencer par les moteurs de recherche. Et en faisant la même chose avec des milliers de sites, il compte simplement améliorer son positionnement et augmenter son "PageRank", le plus gratuitement possible. Certains de ces spammeurs vont même jusqu'à déclencher de véritables petites attaques de spams de referer, comparables à des DOS, contre les sites qui ont un excellent PageRank puisque leurs chances d'être visibles eux-aussi de ce fait sur les moteurs de recherche seront bien plus grandes. Sans oublier que certains sites ont la (très) mauvaise habitude d'afficher la provenance de leurs visiteurs et donc, là encore, de faire de la pub à ces spammeurs sans le vouloir.
Dans les cas extrêmes, le spam de referer est capable de faire plier un petit serveur mutualisé, et dans les autres cas de polluer considérablement les logs Apache, mais aussi de dévorer la bande passante. Mais heureusement, nous allons voir que si les spammeurs peuvent nous embêter nous aussi pouvons leur rendre la vie un peu plus dure.

Exemple

Voici tout d'abord un petit exemple de spam de referer (trouvé dans les logs de spamCle@ner), qui plus est pour un site français : europe-backup.com

  62.210.213.254 - - [06/Sep/2007:03:21:30 +0200] "GET / HTTP/1.0" 200 6795
  "http://www.europe-backup.com/archives/?r=57588,60,11"
  "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6"

  62.210.233.68 - - [06/Sep/2007:04:19:40 +0200] "GET / HTTP/1.0" 200 6795
  "http://www.europe-backup.com/archives/?r=57588,60,11"
  "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6"

Si on se rend à l'adresse indiquée, on ne trouvera aucun lien vers spamCle@ner ce qui est une caractéristique typique de ce genre de méthode mais aussi une preuve que Cisneo SARL se livre au spamming de referer. De même les ReverseDNS des IP sont plutôt éloquents :

  62.210.213.254 = Brrrrrrrrrrrr.kisscool.be
  62.210.233.68 = Kiritimati.ath.cx

En faisant un recherche sur google.com de "www.europe-backup.com/archives/?r=" on retrouve pas mois de 152 cas identiques au mien et on voit même que les identifiants après "?r=", modifiés dans l'exemple ci-dessus, sont différents pour chaque site affiché, ce qui laisserait penser qu'ils enregistrent ceux-ci afin de voir parmi les sites qu'ils ont spammé lesquels sont les plus rentables (pour mieux les spammers par la suite?). Idem si vous faites une recherche sur les deux adresses IPs 62.210.233.68 et 62.210.213.254 vous serez étonnés des résultats...

Technique

Nous allons utiliser le module mod_rewrite d'Apache pour nous débarasser des spams de referer. Nous n'allons pas seulement les bloquer mais nous allons aussi nous amuser: les renvoyer d'où ils viennent afin qu'à chaque fois qu'ils voudront manger notre bande passante nous leur ferons manger la leur.
Enfin, car c'est tout de même le plus important, nous feront exactement le contraire de ce qu'ils souhaitent: nous ne garderons aucune trace de leur visite dans les logs de notre serveur.

  • Exemple ciblé
  • Dans ce 1er exemple, nous connaissons d'avance le site du spammeur.
    Vous pouvez soit créer un fichier .htaccess et le placer à la racine de votre rétoire WWW, soit directement entrer les 3 lignes suivantes dans le fichier Apache de configuration de votre vhost :

       RewriteEngine on
       RewriteCond %{HTTP_REFERER} ^http://www.europe-backup.com [NC]
       RewriteRule ^.* http://www.europe-backup.com [L,E=nolog:1]
    

    1ere ligne : activation de mod_rewrite.
    2e ligne : rechercher un referer indiquant "http://www.europe-backup.com". [NC] ne fait pas la différence entre majuscules et minuscules.
    3e ligne : nous remplaçons l'URL de notre site (^.*) par une redirection vers l'URL du spammeur. [L] indique qu'il n'y a pas d'autres règles à appliquer. Le dernier élément très important est [E=nolog:1]. Cela créé une variable "nolog=1" qui sera utilisée par Apache.

    Dans le fichier Apache de votre site, vous avez probablement une ligne à peu près identique à celle-ci :

      CustomLog logs/access_log combined
    

    Rajoutez simplement à la fin de la ligne l'instruction "env=!nolog" pour indiquer à Apache de ne rien enregistrer dans les logs lorsque la variable nolog est activée :

      CustomLog logs/access_log combined env=!nolog
    

    Vous pouvez donner un autre nom à cette variable, tant que vous utilisez le même nom dans les instructions de mod_rewrite et de la ligne CustomLog.
    Il suffit de relancer Apache et dorénavant, à chaque fois que cette société tentera de spammer vos logs, elle sera immédiatement renvoyée d'où elle vient et aucune trace ne sera enregistrée par votre serveur.

  • Exemple généralisé
  • Que faire quand, contrairement à l'exemple précédant, nous ne connaissons pas le nom de domaine à l'avance? Cela ne pose aucun problème puisque nous pouvons rediriger le spammeur sur son propre site mais cette fois en utilisant la variable HTTP_REFERER qu'il aura la gentillesse de nous envoyer lui-même. Vous pouvez vous débarasser de beaucoup de site pornographiques, de parapharmacies ou autres casinos en ligne d'une manière globale :

      RewriteCond %{HTTP_REFERER} (poker|casino|pharma|mortgage|viagra|porn) [NC]
      RewriteRule ^.* %{HTTP_REFERER} [L,E=nolog:1]
    

    1ere ligne : nous recherchons toute URL de referer contenant l'un des termes entre parenthèses. Vous pouvez en ajouter/supprimer comme vous le souhaitez.
    2e ligne : nous remplaçons l'URL de notre site par une redirection vers l'URL du spammeur mentionnée dans la variable HTTP_REFERER reçue.

    Et comme dans l'exemple précédant, modifiez Apache pour qu'il n'enregistre pas la connexion dans ses logs :

      CustomLog logs/access_log combined env=!nolog
    

  • Exemple divers
  • Si vous préférez que les spammeurs perdent leur temps plutôt que leur bande passante, rallongez indéfiniment les temps de réponse à leurs requêtes en les redirigeant sur localhost (127.0.0.1) ou sur un "trou noir" de l'IANA (IANA's Black Hole) :

      RewriteCond %{HTTP_REFERER} (poker|casino|pharma|mortgage|viagra|porn) [NC]
      RewriteRule ^.* http://127.0.0.1 [L,E=nolog:1]
    

    ou :

      RewriteCond %{HTTP_REFERER} (poker|casino|pharma|mortgage|viagra|porn) [NC]
      RewriteRule ^.* http://prisoner.iana.org/ [L,E=nolog:1]
    

    Si vous connaissez le domaine du spammeur, recherchez sur son site s'il n'aurait pas un fichier de 10 Mo à télécharger et renvoyez-le dessus. Si vous ne connaissez pas son domaine, vous pouvez le renvoyer sur un gros fichier localisé ailleurs :

      RewriteCond %{HTTP_REFERER} ^http://foo.bar [NC]
      RewriteRule ^.* http://foo.bar/grosfichier.pdf [L,E=nolog:1]
    

    Ou bien s'il dispose d'une page de contact, renvoyez-le dessus avec les paramètres du formulaire dans l'URL afin qu'à chaque fois qu'il tentera de vous spammer, il s'enverra lui-même un email en utilisant son propre formulaire (et son IP) :

      RewriteCond %{HTTP_REFERER} ^http://foo.bar [NC]
      RewriteRule ^.* http://foo.bar/contact.php?nom=moi&message=pas%20de%20spam%20merci [L,E=nolog:1]
    



    Enfin, une fois que tout est en place sur votre serveur, faites des tests pour vérifier si vos règles fonctionnent :
       # wget -S --referer='http://site_viagra.com' http://votre.domaine.tld
    

    Nul doute que vous trouverez d'autres idées similaires pour vous amuser avec les spammeurs.




    Autres articles :

  • Anti-spam : les services abuse des hébergeurs enfin soulagés
  • Anti-spam : comment plomber les spambots
  • Anti-spam : comment protéger son blog des spams de commentaires
  • Sécurité : Linux : blinder les ports de son serveur
  • Sécurité : Linux : mise à jour de son serveur
  • Sécurité : Linux : créer une clé USB bootable
  • Sécurité : Linux : encrypter sa clé USB
  • Sécurité : Linux : utiliser iptables pour bloquer les chaines de caractères
  • Sécurité : Linux : faire communiquer mod_security et iptables pour bloquer les IP en temps réel
  • Sécurité : Windows : détectez si votre PC envoie des spams
  • Commentaires (9)

    De : Courageux Anonyme
    Le : 19-Sept-2007 à 19:59:15

    cool de leur faire manger leur bande passante en leur envoyant en plus un mail

    De : TOTO
    Le : 22-Sept-2007 à 08:21:19

    Bonjour c'est pas possible de faire ca sur un site normal car moi je peux pas modifier les fichiers apache?

    De : spamCle@ner
    Le : 22-Sept-2007 à 13:33:59

    @TOTO: si bien sûr, mais enlevez la variable "E=nolog:1" si vous n'avez pas accès aux fichiers de config de votre vhost. Mettez juste "[L]" en fin de la ligne de votre .htaccess

    De : Courageux Anonyme
    Le : 22-Sept-2007 à 15:18:33

    c koi les trou noir?

    De : Marc
    Le : 22-Sept-2007 à 18:11:52

    il ne faut pas rajouter [R=301] pour la redirection?

    De : spamCle@ner
    Le : 23-Sept-2007 à 02:03:50

    @Courageux Anonyme: Les trous noirs de l'IANA, c'est toute une (longue) histoire:
    http://seclists.org/incidents/2002/Sep/0058.html

    @Marc: Vous pouvez mettre [R=301,L] si vous le souhaitez, Apache renverra un code "301 Moved Permanently".
    Mais si vous ne mettez rien Apache retournera "302 Found", ce qui produit les mêmes résultats.

    De : Courageux Anonyme
    Le : 23-Sept-2007 à 06:45:15

    on peut aussi les renvoyer sur la demo de doom 3 et paf, 475 mega dans les dents lol

    De : ad
    Le : 9-Sept-2008 à 14:45:42

    euh une des IP de server que tu site correspond a l'adresse de mon server... ça veux dire quoi? que je spam sans le vouloir?

    De : spamCle@ner
    Le : 9-Sept-2008 à 17:43:32

    Il s'agit de l'IP 88.xxx.xx.xx ? Je vois que maintenant elle renvoie sur un serveur dedibox, elle a donc été réattribuée recemment.
    Dans ce cas, pas de soucis, c'est l'ancien propriétaire de cette IP qui se livrait au spam de referer. Je viens de la supprimer de l'article, elle n'est plus coupable !


    Poster un commentaire

    Nom :

    *Message (4 Ko maxi) :

    smileys