Bot de spam que je ne parviens pas à bloquer

keroin

WRInaute passionné
Bonsoir à tous,
Depuis 2 ou 3 heures un bot spammeur s'attaque à mon phpbb3.
Je l'ai repéré car il génère pas mal de 404 (environ 2000 en quelques heures) et que je reçois un mail dès qu'une 404 est détectée sur mes sites.

Voici son identité
Nom de Domaine : 115.Red-80-39-38.staticIP.rima-tde.net
IP du visiteur : 80.39.38.115

J'ai essayé de bloquer cette sal***rie via htaccess comme je le fait d'habitude pour bloquer les referer que je ne souhaite pas.
J'ai utilisé le code suivant
Code:
RewriteCond %{HTTP_REFERER} ^(.*(rima-tde.net).*)$ [NC]
RewriteRule .* - [F,L]
Mais cela semble complétement inefficace et il continu à circuler librement ???
Quelqu'un aurait une idée?
Merci d'avance ;)
 

keroin

WRInaute passionné
Bon il semble que j'ai réussi à le stopper par un simple blocage de son ip
Code:
deny from 80.39.38.115
mais ces petites bêtes là changent généralement souvent d'ip et je ne comprend toujours pas pourquoi le blocage de son ndd n'a pas fonctionné.
Si quelqu'un a une explication ?
 

edd_

WRInaute discret
Bon moi j'ai pas d'explication , mais je veu just savoir comment t'as pu detecter le IP du bot ? car j'ai le meme probleme !
 

keroin

WRInaute passionné
J'utilise un script qui m'envoie un mail dès qu'une erreur est détectée (404, 500,...).
Voici la procédure si ça peut te filer un coup de mains ;)

L'auteur de ce script est un membre du forum (Medium69 si je me souviens bien, merci à lui).

Il faut créer un fichier erreur.php avec le code suivant :
Code:
<? switch   ($_SERVER['REDIRECT_STATUS']) {
      case 401:
      $mess_erreur = 'Accès à la ressource refusé';
      break;
      case 403:
      $mess_erreur = 'Refus de traitement de la requête';
      break;
      case 404:
      $mess_erreur = 'Document non trouvé';
      $logoErreur = '404';
      break;      
      case 410:
      $mess_erreur = 'La ressource est indisponible et aucune adresse de redirection n\'est connue';
      }

if      (!eregi('(cltreq.asp|owssvr.dll|_vti)', $_SERVER['REQUEST_URI']) && $_SERVER['REDIRECT_STATUS'] != 410 ) {
         if      (empty($_SERVER['HTTP_REFERER'])) {
               $provenance = 'Connexion directe';
               }
         else   {
               $provenance = $_SERVER['HTTP_REFERER'];
               }
         
         $mess   = 'Erreur internet '.$_SERVER['REDIRECT_STATUS']."\n\r";
         $mess   .= 'Provenance : '.$provenance."\n\r";
         $mess   .= 'Url demandée : '.$_SERVER['REQUEST_URI']."\n\r";
         $mess   .= 'Navigateur utilisé : '.$_SERVER['HTTP_USER_AGENT']."\n\r";
         $mess   .= 'Nom de Domaine : '.gethostbyaddr($_SERVER['REMOTE_ADDR'])."\n\r";
         $mess   .= 'IP du visiteur : '.$_SERVER['REMOTE_ADDR'];      
         $to                  = "TON_MAIL";
         $subject            = 'Erreur internet '.$_SERVER['REDIRECT_STATUS'];
         $message            = $mess;
         $headers            = 'From: TON_MAIL'."\r\n".'Reply-To: TON_MAIL'."\r\n";
   
         mail($to, $subject, $message, $headers);
         }
		 ?>

=> ne pas oublier d'indiquer ton mail dans le script (3 fois).

Place ensuite ce fichier à la racine de ton site via ftp.

Ensuite, dans ton fichier .htaccess, places les instructions suivantes :
Code:
ErrorDocument 400 /erreur.php
ErrorDocument 401 /erreur.php
ErrorDocument 403 /erreur.php
ErrorDocument 404 /erreur.php
ErrorDocument 410 /erreur.php
ErrorDocument 500 /erreur.php

Tu obtiens alors un mail qui t'indique les informations importantes nécessaires.
;)
 

edd_

WRInaute discret
oui c'est claire, merci
Mais cela veut dire que je vais recevoir plus de 30000 mail par jour presque puisque les page erreur sur mon server consomme plus de 30000 hits (j'ai une page d'erreur 404 et 403 .. personnalisé via htaccess ) mais bon savoir l'IP quan meme ;-)
 

keroin

WRInaute passionné
Bah justement, le flux des mails te permet d'identifier l'origine du problème et de le corriger mais également de contrôler si la "rustine" a fonctionné car si il n'y a plus de mail c'est que le blocage est ok ;)
 

edd_

WRInaute discret
oui, je vais créer un email just pour detection de bot :).
Bn chance pour la suite keroin
 

medium69

WRInaute passionné
Depuis je l'ai modifié un peu...

Tu peux par exemple instruire une base de données pour éviter de crouler sous les mails
 

medium69

WRInaute passionné
Voici ce que j'ai ; a vous de le personnaliser ;)
Sachant que dans le filtre préliminaire, concernant le paramètre GET, dans mon cas, je n'ai aucune page ayant ce paramètre ; donc si on en trouve un, c'est pas normal ;)

Pour les plus curieux, voici les images d'illustration de mes erreurs internet : -http://www.science-et-vie.net/img/graphisme/erreur-404.jpg (qui peut être : 401 403 404 405 406 410 500.jpg)

Code:
<?php
// Contrôles préliminaires
if ((preg_match('#/.+/$#U', $_SERVER['REQUEST_URI']) && preg_match('#(compatible; Yahoo! Slurp;|Speedy Spider)#U', $_SERVER['HTTP_USER_AGENT'])) || preg_match('#(\?|%20http).+#U', $_SERVER['REQUEST_URI'])) { // (Visite d'un dossier par un moteur) || (paramètre GET présent ou tentative avérée de piratage)
	$uri = $_SERVER['SCRIPT_URL']; // Url demandée
	$num_erreur = $_SERVER['REDIRECT_STATUS']; // Numéro de l'erreur
	$domaine = gethostbyaddr($_SERVER['REMOTE_ADDR']); // Domaine du visiteur
	
	// Ici recherche des trois paramètres : uri, num-erreur et domaine dans la BDD erreur
	
	if ($nb_uri_erreur == 1) {	// Si trouvé sans la BDD			
		// On enregistre la date de visite et on incrémente un compteur de visite
	} else {
		// On enregistre les nouvelles informations : uri, num-erreur et domaine dans la BDD erreur, date de visite, et compteur de visite à 1
	}
	
	// On génère une 301 pour ne pas afficher de page d'erreur
	header ('HTTP/1.1 301 Moved Permanently');
	header('Location: http://www.science-et-vie.net/');
	exit;
}

// Ici incrémenter un compteur pour chaque erreur dans un BDD : 401, 403, 404, etc.
// Récupération du compteur de visite pour l'erreur dite

if ($nb_erreur == 1) {
	$nb_erreur = 'première';
} else {
	$nb_erreur = number_format($sql_result['erreur_nbTotal'], 0, ',', ' ').'<sup>ème</sup>';
}

$url = 'http://'.$_SERVER['SERVER_NAME'].$uri;
$compte_erreur = '<p class="alignCenter">Il s\'agit de la '.$nb_erreur.' erreur '.$_SERVER['REDIRECT_STATUS'].' depuis le 12 mai 2008 !</p>';

switch ($_SERVER['REDIRECT_STATUS']) { // Numéro de l'erreur internet
	case 401:
		$mess_erreur = '<h2 class="alignCenter">Accès à la ressource refusée.</h2>';
		$mess_erreur .= $compte_erreur;
		$mess_erreur .= '<ul><li>Cette page demande une autorisation que vous n\'avez visiblement pas.</li>';
		$mess_erreur .= '<li>Si vous pensez que vous êtes en droit d\'y accéder, je vous invite à prendre contact avec l\'administrateur du site.</li>';
		$mess_erreur .= '<li>Quelques informations vous concernant ont été envoyées à l\'administrateur par sécurité.</li></ul>';
		$logo_erreur = 'erreur-401.jpg';
		break;
	case 403:
		$mess_erreur = '<h2 class="alignCenter">Refus de traitement de la requête.</h2>';
		$mess_erreur .= $compte_erreur;
		$mess_erreur .= '<ul><li>Cette page ou ce dossier est interdit d\'accès à tous visiteurs.</li>';
		$mess_erreur .= '<li>Quelques informations vous concernant ont été envoyées à l\'administrateur par sécurité.</li></ul>';
		$logo_erreur = 'erreur-403.jpg';
		break;
	case 404:
		$mess_erreur = '<h2 class="alignCenter">Document non trouvé.</h2>';
		$mess_erreur .= $compte_erreur;
		$mess_erreur .= '<ul><li>Cette page est peut-être déplacée ou supprimée ; dans ce cas cette erreur sera vite réparée.</li>';
		$mess_erreur .= '<li>Si vous avez cliqué sur un lien présent sur autre site, il est possible que l\'information n\'ai pas suivie.</li>';
		$mess_erreur .= '<li>Si vous avez tapé l\'adresse directement, vous avez peut-être fait une erreur de frappe dans la saisie.</li></ul>';
		$logo_erreur = 'erreur-404.jpg';
		break;
	case 405:
		$mess_erreur = '<h2 class="alignCenter">Méthode de requête non autorisée.</h2>';
		$mess_erreur .= $compte_erreur;
		$mess_erreur .= '<ul><li>La méthode spécifiée à la ligne de requête n\'est pas autorisée pour la ressource identifiée par cette dernière.</li>';
		$mess_erreur .= '<li>Assurez-vous que la configuration du type MIME pour la ressource que vous demandez est approprié.</li></ul>';
		$logo_erreur = 'erreur-405.jpg';
		break;	
	case 406:
		$mess_erreur = '<h2 class="alignCenter">Inacceptable.</h2>';
		$mess_erreur .= $compte_erreur;
		$mess_erreur .= '<ul><li>La ressource identifiée par la demande ne peut générer que des entités de réponse possédant des caractéristiques de contenu « non acceptables » compte tenu des en-têtes Accept envoyés dans la demande.</li></ul>';
		$logo_erreur = 'erreur-406.jpg';
		break;	
	case 410:
		$mess_erreur = '<h2 class="alignCenter">Ressource indisponible.</h2>';
		$mess_erreur .= $compte_erreur;
		$mess_erreur .= '<ul><li>Cette page a été supprimée et aucune adresse de redirection n\'est connue.</li>';
		$mess_erreur .= '<li>Si vous avez cliqué sur un lien présent sur autre site, il est possible que l\'information n\'ai pas suivie.</li></ul>';
		$logo_erreur = 'erreur-410.jpg';
		break;
	case 500:
		$mess_erreur = '<h2 class="alignCenter">Erreur interne du serveur.</h2>';
		$mess_erreur .= $compte_erreur;
		$mess_erreur .= '<ul><li>Le serveur a rencontré une erreur interne inconnue et n\'a donc pas pu traiter votre demande.</li>';
		$mess_erreur .= '<li>Il a du être distrait par cette jolie créature... Revenez donc un peu plus tard !</li></ul>';
		$logo_erreur = 'erreur-500.jpg';
}

$img_infos = getimagesize($logo_erreur); // Taille de l'image


// Affichage du contenu
echo '<p><img src="'.$logo_erreur.'" alt="Illustration pour l\'erreur internet '.$_SERVER['REDIRECT_STATUS'].'" '.$img_infos[3].' /><br />
<strong>Url demandée : « '.$url.' »</strong></p>';
						

	
	$mail_sujet = 'Erreur internet '.$_SERVER['REDIRECT_STATUS']; // Sujet de l'e-mail
	
	if (!isset($_SERVER['HTTP_REFERER'])) {
		$url_referant = 'Connexion directe';
	} else {
		$url_referant = $_SERVER['HTTP_REFERER'];
	}
	
	// Contenu de l'e-mail
	$mess_admin .= 'Code erreur internet : '.$_SERVER['REDIRECT_STATUS']."\n\r".
	'Date et heure d\'accès '.strftime('%A %e %B %Y à %R', $_SERVER['REQUEST_TIME'])."\n\r".
	'Url demandée : '.$_SERVER['REQUEST_URI']."\n\r".
	'Provenance : '.$url_referant."\n\r".
	'Navigateur utilisé : '.$_SERVER['HTTP_USER_AGENT']."\n\r".
	'Méthode utilisée : '.$_SERVER['REQUEST_METHOD']."\n\r".
	'Chaine de requête : '.$_SERVER['QUERY_STRING']."\n\r".
	'Nom de Domaine : '.gethostbyaddr($_SERVER['REMOTE_ADDR'])."\n\r".
	'IP du visiteur : '.$_SERVER['REMOTE_ADDR']."\n\r".
	'Langue de l\'OS : '.$_SERVER['LANG']."\n\r".
	
	// En-têtes de l'email
	$mail_header = 'From: '.MAIL_NO_REPLY."\r\n".
	'Reply-To: '.MAIL_NO_REPLY."\r\n";
	
	// Données de l'email
	$mail_dest = MAIL_ADMIN;
	
	mail($mail_dest, $mail_sujet, $mess_admin, $mail_header);

echo $mess_erreur.'
<p>Si nécessaire, vous pouvez vous servir du formulaire de recherche en haut de page pour trouver la page désirée.</p>
</div>';
?>

Je vous laisse gérer cela si vous voulez utilisez une BDD

J'ai oublier le .htaccess :
Code:
ErrorDocument 400 /erreur.php
ErrorDocument 401 /erreur.php
ErrorDocument 402 /erreur.php
ErrorDocument 403 /erreur.php
ErrorDocument 404 /erreur.php
ErrorDocument 405 /erreur.php
ErrorDocument 406 /erreur.php
ErrorDocument 407 /erreur.php
ErrorDocument 408 /erreur.php
ErrorDocument 409 /erreur.php
ErrorDocument 410 /erreur.php
ErrorDocument 411 /erreur.php
ErrorDocument 412 /erreur.php
ErrorDocument 413 /erreur.php
ErrorDocument 414 /erreur.php
ErrorDocument 415 /erreur.php
ErrorDocument 500 /erreur.php
ErrorDocument 501 /erreur.php
ErrorDocument 502 /erreur.php
ErrorDocument 503 /erreur.php
ErrorDocument 504 /erreur.php
ErrorDocument 505 /erreur.php
 

edd_

WRInaute discret
Autrement dit , est ce possible de savoir le suivi de page et les IP qui on passés dessus ?
Exemple de page erreur.php , comment connaitre un tel IP d'un utilisateur passé sur une tel page ?
 

keroin

WRInaute passionné
Reformules ta question car là ... rien compris :?

ps : merci Medium il a l'air beaucoup plus complet maintenant, beau boulot ;)
ps2 : c'est quoi ce lien ??? :lol: :lol:
=>-http://www.science-et-vie.net/img/graphisme/erreur-404.jpg
 

medium69

WRInaute passionné
keroin a dit:
Reformules ta question car là ... rien compris :?

ps : merci Medium il a l'air beaucoup plus complet maintenant, beau boulot ;)
ps2 : c'est quoi ce lien ??? :lol: :lol:
=>-http://www.science-et-vie.net/img/graphisme/erreur-404.jpg

C'est vrai qu'il y a une grande métaphore avec les illustrations des erreurs (voir aussi les autres)... effectivement pour ma 404, rien ne s'y trouve là où tu as bien voulu regarder ^^

Je reconnais aussi que c'est un peu en décalage avec le site, mais c'est amusant justement ;)
 

edd_

WRInaute discret
le code donné indique l'IP visité sur la page erreur. si je voulai savoir la meme chose pour d'autres page du site par exemple ? que faire !
c'est claire je suppose
 

medium69

WRInaute passionné
edd_ a dit:
le code donné indique l'IP visité sur la page erreur. si je voulai savoir la meme chose pour d'autres page du site par exemple ? que faire !
c'est claire je suppose

La page d'erreur est générée automatiquement lors de la visite d'une url créant une erreur internet.

Si maintenant, tu veux récupérer l'ip sur des pages valides de ton site, dans ce cas, il te faut récupéré l'ip sur chacune de tes pages.

Mais franchement, je n'en vois pas l'intérêt si il n'y a pas de soucis.
 

Leonick

WRInaute accro
keroin a dit:
Code:
RewriteCond %{HTTP_REFERER} ^(.*(rima-tde.net).*)$ [NC]
RewriteRule .* - [F,L]
Mais cela semble complétement inefficace et il continu à circuler librement ???
ce que tu mets dans la règle du referer, c'est le host du robot, et en règle générale, les robots ont un referer vide.
C'est donc normal que ta règle ne bloque rien
 

keroin

WRInaute passionné
Vi effectivement me semblait bien que c'était quelque chose de ce genre, merci pour la confirmation ;)
 

Discussions similaires

Haut