我有一个客户端,其域名似乎受到看似DDoS的严重打击。在日志中,使用随机IP的用户代理是正常的,但是他们翻阅页面的速度太快而不能成为人类。他们似乎也没有要求任何图像。我似乎无法找到任何模式,我的怀疑是它是一个Windows僵尸车队。
客户过去曾遇到SPAM攻击问题 - 甚至不得不指向Postini的MX以获得6.7 GB /天的垃圾邮件以阻止服务器端。
我想在robots.txt禁止的目录中设置一个BOT陷阱...之前从未尝试过这样的事情,希望有人有一个创意来捕获BOT!
编辑:我已经有很多关于捕获它的想法......当陷入陷阱时,该怎么办呢。
答案 0 :(得分:6)
您可以设置一个PHP脚本,其脚本被robots.txt明确禁止。在该脚本中,您可以拉出可疑机器人的源IP(通过$ _SERVER ['REMOTE_ADDR']),然后将该IP添加到数据库黑名单表中。
然后,在您的主应用程序中,您可以检查源IP,在黑名单表中查找该IP,如果找到它,则抛出403页。 (也许有一条消息,“我们检测到来自您的IP的滥用行为,如果您认为这是错误的,请与我们联系......”)
在好的方面,你会自动将坏机器人列入黑名单。在不利方面,它不是非常有效,而且可能很危险。 (一个人出于好奇而无辜地检查该页面可能会导致大量用户被禁止。)
编辑:或者(或者另外,我猜)您可以相当简单地向您的应用添加GeoIP支票,并根据原籍国拒绝匹配。
答案 1 :(得分:1)
你可以做的是让另一个盒子(一种牺牲的羔羊)与你的主要主机不在同一个管道上然后拥有一个重定向到它自己的页面(但是在网址中有一个随机的页面名称)。这可能会让机器人卡在一个无限循环中,将cpu和bandwith绑在你的牺牲羊羔身上但不在主盒子上。
答案 2 :(得分:1)
我倾向于认为这是一个比编码更能解决网络安全问题的问题,但我看到了你的方法/问题中的逻辑。
关于服务器故障,有很多问题和讨论可能值得研究。
答案 3 :(得分: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
或重定向回站点根目录。为了好玩,我将陷阱放在名为/admin/
的目录中,并将Disallow: /admin/
添加到robots.txt。
编辑:此外,我将机器人忽略规则重定向到此页面:http://www.seastory.us/bot_this.htm
答案 4 :(得分:0)
你可以先看一下ip的来源。我的猜测是他们都来自中国或尼日利亚这样的国家,在这种情况下你可以在htaccess设置一些东西来禁止这两个国家的所有ip,就像为机器人创造一个陷阱一样,我没有丝毫想法