2010-09-29 21 views
5

Ho un cliente il cui dominio sembra essere colpito abbastanza da quello che sembra essere un DDoS. Nei log è normale che gli user agent abbiano IP casuali, ma sfogliano le pagine troppo velocemente per essere umani. Inoltre, non sembrano richiedere alcuna immagine. Non riesco a trovare alcun motivo e il mio sospetto è che sia una flotta di Windows Zombies.Idee trappola BOT/Spider

I client hanno avuto problemi in passato con gli attacchi SPAM - anche a MX in postini per ottenere il 6,7 GB/giorno di posta indesiderata per arrestare il lato server.

Voglio impostare una trappola BOT in una directory non consentita da robots.txt ... non ho mai provato nulla di simile prima, sperando che qualcuno là fuori abbia idee creative per intrappolare i BOT!

EDIT: Ho già un sacco di idee per prenderne uno .. è cosa fare per farlo quando atterra nella trappola.

+3

Questa è una domanda interessante, e mi piacerebbe vedere alcune delle risposte. Ma sospetto che potrebbe essere più adatto per [Errore server] (http://serverfault.com). –

+1

Sono d'accordo, ma gli sviluppatori sono molto più creativi dei professionisti IT .. lol! – Mikey1980

+1

Ma qualcuno ha "creato" già questa soluzione e i tecnici IT sono molto bravi a implementarlo. –

risposta

0

Si potrebbe prima dare un'occhiata a dove provengono gli IP. La mia ipotesi è che provengano tutti da un paese come la Cina o la Nigeria, nel qual caso potresti impostare qualcosa in htaccess per disabilitare tutti gli IP di quei due paesi, come per creare una trappola per i bot, non ho la minima idea

+0

Gli IP sono dappertutto .. che nel caso dello SPAM era abbastanza ovvio che le origini erano macchine Windows infette. – Mikey1980

6

È possibile impostare uno script PHP il cui URL è esplicitamente vietato da robots.txt. In questo script, puoi prelevare l'IP di origine del bot sospetto che ti colpisce (tramite $ _SERVER ['REMOTE_ADDR']), e quindi aggiungere quell'IP a una tabella di blacklist del database.

Quindi, nell'app principale, è possibile controllare l'IP di origine, eseguire una ricerca per tale IP nella tabella della lista nera e, se lo si trova, lanciare una pagina 403. (Forse con un messaggio del tipo "Abbiamo rilevato un abuso proveniente dal tuo IP, se ritieni che questo sia un errore, contattaci al ...")

Sul lato positivo, ottieni la blacklist automatica dei bot difettosi. Al rovescio della medaglia, non è terribilmente efficiente, e può essere pericoloso. (Una persona che controlla innocentemente questa pagina per curiosità può comportare il divieto di un'ampia fascia di utenti.)

Modifica: In alternativa (o in aggiunta, suppongo) si può semplicemente aggiungere un controllo GeoIP alla propria app, e respingere gli hit in base al Paese di origine.

+6

Si potrebbe avere un qualche tipo di captcha per automatizzare la lista nera per persone reali che cliccano su di essa. –

+0

Ooh si, buona idea. –

+0

hai avuto la migliore risposta .. implementato questa soluzione sorta (non memorizzato in db), combinato con il suggerimento di Scott e una piccola torcia bot. Vedere la mia risposta per ulteriori dettagli – Mikey1980

1

Quello che puoi fare è ottenere un'altra casella (una specie di agnello sacrificale) non sulla stessa pipa dell'host principale, quindi disporre di una pagina di hosting che reindirizza a se stessa (ma con un nome di pagina randomizzato nell'URL). questo potrebbe far rimanere il bot bloccato in un loop infinito legando la CPU e la bandwith sul tuo agnello sacrificale, ma non sulla tua scatola principale.

1

Tendo a pensare che questo sia un problema risolto meglio con la sicurezza della rete più della codifica, ma vedo la logica nel tuo approccio/domanda.

Ci sono un certo numero di domande e discussioni su questo errore del server che può essere degno di investigare.

https://serverfault.com/search?q=block+bots

1

Beh devo dire, un po 'deluso - speravo in alcune idee creative. Ho trovato la soluzione ideale qui .. http://www.kloth.net/internet/bottrap.php

<html> 
    <head><title> </title></head> 
    <body> 
    <p>There is nothing here to see. So what are you doing here ?</p> 
    <p><a href="http://your.domain.tld/">Go home.</a></p> 
    <?php 
     /* whitelist: end processing end exit */ 
     if (preg_match("/10\.22\.33\.44/",$_SERVER['REMOTE_ADDR'])) { exit; } 
     if (preg_match("Super Tool",$_SERVER['HTTP_USER_AGENT'])) { exit; } 
     /* end of whitelist */ 
     $badbot = 0; 
     /* scan the blacklist.dat file for addresses of SPAM robots 
     to prevent filling it up with duplicates */ 
     $filename = "../blacklist.dat"; 
     $fp = fopen($filename, "r") or die ("Error opening file ... <br>\n"); 
     while ($line = fgets($fp,255)) { 
     $u = explode(" ",$line); 
     $u0 = $u[0]; 
     if (preg_match("/$u0/",$_SERVER['REMOTE_ADDR'])) {$badbot++;} 
     } 
     fclose($fp); 
     if ($badbot == 0) { /* we just see a new bad bot not yet listed ! */ 
     /* send a mail to hostmaster */ 
     $tmestamp = time(); 
     $datum = date("Y-m-d (D) H:i:s",$tmestamp); 
     $from = "[email protected]"; 
     $to = "[email protected]"; 
     $subject = "domain-tld alert: bad robot"; 
     $msg = "A bad robot hit $_SERVER['REQUEST_URI'] $datum \n"; 
     $msg .= "address is $_SERVER['REMOTE_ADDR'], agent is $_SERVER['HTTP_USER_AGENT']\n"; 
     mail($to, $subject, $msg, "From: $from"); 
     /* append bad bot address data to blacklist log file: */ 
     $fp = fopen($filename,'a+'); 
     fwrite($fp,"$_SERVER['REMOTE_ADDR'] - - [$datum] \"$_SERVER['REQUEST_METHOD'] $_SERVER['REQUEST_URI'] $_SERVER['SERVER_PROTOCOL']\" $_SERVER['HTTP_REFERER'] $_SERVER['HTTP_USER_AGENT']\n"); 
     fclose($fp); 
     } 
    ?> 
    </body> 
</html> 

Poi, per proteggere le pagine gettare <?php include($DOCUMENT_ROOT . "/blacklist.php"); ?> sulla prima riga di ogni pagina ..blacklist.php contiene:

<?php 
    $badbot = 0; 
    /* look for the IP address in the blacklist file */ 
    $filename = "../blacklist.dat"; 
    $fp = fopen($filename, "r") or die ("Error opening file ... <br>\n"); 
    while ($line = fgets($fp,255)) { 
     $u = explode(" ",$line); 
     $u0 = $u[0]; 
     if (preg_match("/$u0/",$_SERVER['REMOTE_ADDR'])) {$badbot++;} 
    } 
    fclose($fp); 
    if ($badbot > 0) { /* this is a bad bot, reject it */ 
     sleep(12); 
     print ("<html><head>\n"); 
     print ("<title>Site unavailable, sorry</title>\n"); 
     print ("</head><body>\n"); 
     print ("<center><h1>Welcome ...</h1></center>\n"); 
     print ("<p><center>Unfortunately, due to abuse, this site is temporarily not available ...</center></p>\n"); 
     print ("<p><center>If you feel this in error, send a mail to the hostmaster at this site,<br> 
      if you are an anti-social ill-behaving SPAM-bot, then just go away.</center></p>\n"); 
     print ("</body></html>\n"); 
     exit; 
    } 
?> 

ho intenzione di seguire il consiglio di Scott Chamberlain e di essere sicuro ho intenzione di implementare Captcha alla sceneggiatura. Se l'utente risponde correttamente, sarà solo il die o il reindirizzamento alla radice del sito. Solo per divertimento sto lanciando la trappola in una directory denominata /admin/ e di coursed aggiungendo Disallow: /admin/ a robots.txt.

EDIT: Inoltre sto reindirizzando l'bot ignorando le regole a questa pagina: http://www.seastory.us/bot_this.htm

+2

che approccio sciocco. ucciderà il tuo sito più velocemente di qualsiasi attacco ddos ​​(anche se dubito che tu ne abbia già visto uno). –

Problemi correlati