7

DDoS と思われるものによってドメインがかなり打撃を受けているように見えるクライアントがいます。ログでは、ランダムな IP を持つ通常のユーザー エージェントのように見えますが、人間とは思えない速さでページをめくっています。また、画像を要求しているようには見えません。パターンを見つけることができないようで、Windows ゾンビの艦隊ではないかと疑っています。

クライアントは過去に SPAM 攻撃で問題を抱えていました。MX を Postini に向けて、1 日あたり 6.7 GB のジャンクを取得し、サーバー側を停止する必要さえありました。

robots.txt で許可されていないディレクトリに BOT トラップを設定したいのですが... 誰かが BOT をトラップするための独創的なアイデアを持っていることを期待して、これまでにこのようなことを試みたことはありません!

編集:私はすでに 1 つをキャッチするための多くのアイデアを持っています..それは、トラップに着陸したときにそれをどうするかです.

4

5 に答える 5

7

URL が robots.txt によって明示的に禁止されている PHP スクリプトを設定できます。そのスクリプトでは、($_SERVER['REMOTE_ADDR'] を介して) ヒットしている疑わしいボットのソース IP を取得し、その IP をデータベースのブラックリスト テーブルに追加できます。

次に、メイン アプリでソース IP を確認し、ブラックリスト テーブルでその IP を検索し、見つかった場合は代わりに 403 ページをスローします。(おそらく、「あなたの IP からの悪用が検出されました。これが誤りだと思われる場合は、... までご連絡ください」などのメッセージが表示されます)

利点として、悪意のあるボットのブラックリストが自動的に作成されます。欠点としては、それほど効率的ではなく、危険な場合があります。(1 人が好奇心から無邪気にそのページをチェックすると、多数のユーザーが禁止される可能性があります。)

編集:代わりに(またはさらに、おそらく) GeoIPチェックをアプリに追加して、発信国に基づいてヒットを拒否することもできます.

于 2010-09-29T20:49:03.010 に答える
3

あなたができることは、メインホストと同じパイプ上にない別のボックス(一種の犠牲的な子羊)を取得し、そのホストにそれ自体にリダイレクトするページを持たせることです(ただし、URLにランダム化されたページ名があります)。これにより、ボットが無限ループに陥り、メインボックスではなく、犠牲的な子羊の CPU と帯域幅が拘束される可能性があります。

于 2010-09-29T20:49:38.853 に答える
1

うーん、ちょっとがっかりしたと言わざるを得ません--私はいくつかの創造的なアイデアを望んでいました. ここで理想的なソリューションを見つけました.. 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 = "badbot-watch@domain.tld";
        $to = "hostmaster@domain.tld";
        $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>

次に、ページを保護するため<?php include($DOCUMENT_ROOT . "/blacklist.php"); ?>に、すべてのページの最初の行にスローします..blacklist.php含まれるもの:

<?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;
    }
?>

私は Scott Chamberlain のアドバイスを受け、安全のためにスクリプトに Captcha を実装する予定です。ユーザーが正しく答えるdieと、サイト ルートにリダイレクトされます。楽しみのために、robots.txt という名前のディレクトリにトラップを投げて、もちろんrobots.txt に/admin/追加しています。Disallow: /admin/

編集:さらに、ルールを無視してボットをこのページにリダイレクトしています: http://www.seastory.us/bot_this.htm

于 2010-09-29T23:32:59.520 に答える
1

これは、コーディングよりもネットワークセキュリティで解決したほうがよい問題だと思う傾向がありますが、あなたのアプローチ/質問には論理があります。

サーバーの障害については、調査に値する可能性のある多くの質問と議論があります。

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

于 2010-09-29T21:08:03.223 に答える
0

最初に、IP がどこから来ているかを調べることができます。私の推測では、それらはすべて中国やナイジェリアなどの 1 つの国から来ていると思われます。その場合、htaccess で何かを設定して、これら 2 つの国からのすべての IP を許可しないようにすることができます。

于 2010-09-29T20:42:37.457 に答える