2011-01-09 109 views
1

我的网站最近得到了漏洞扫描,我不负责。我试图阻止任何请求超过合理数量的页面的IP。我实际上不确定可能有4-5个请求并阻止它们。限制来自php/apache或.htaccess的http请求?

我已经看到这与光速web服务器完成,但我有apache。如何限制PHP请求到我的页面,如果用户超过了限制,他们被阻止离开我的网站30分钟? (我真的不知道什么是好金额,真正的用户不会被阻止)

回答

1

重要的事情在这样的解决方案是,实际的“堵”是很资源成本低廉。正确识别攻击者并不意外禁止某人也很重要,但也不要太开放,以免在阻止某人之前浪费了大量资源。

但是,您不是第一个遇到此问题的人。

有一个伟大的apache模块可用,称为mod_evasive,它被配置为做到这一点。

我曾经做了一个非常简单的技术在服务器上(因为它的工作与partuclar应用程序更好),其有一个像这样一个流程:

我的应用程序计数在当地APC缓存,这是关键的变量当天的当前小时和用户IP地址,并检查是否已达到限制。

如果是这样的话,ip地址被写入一个工作日志中,一个cronjob拿起它并使用iptables添加一个过滤器,这样ip包中的包就会被丢弃。

所以他们甚至没有到达网络服务器,并且资源消耗极少。

每天一次添加的规则被清除。

0

我想我们都知道接下来会发生什么(记住每个文件/图像,等等是一个请求)。

要提出一个替代方案,为什么不简单地一次性阻止一个有问题的IP地址 - 您大概可以从流量日志中获得有问题的IP地址,并且添加“Deny from xxx.xxx.xxx.xxx”样式很简单IP地址块到您的httpd配置。 (此外,不同于基于PHP的方法,这将适用于图像等为好。)

要做到,否则容易运行妨碍合法的网络流量,谷歌的蜘蛛的风险等

1

我使用这将阻止自定义IP地址,只需粘贴在脚本中:

<?php 
$deny = array("111.111.111", "222.222.222", "333.333.333"); 
if (in_array ($_SERVER['REMOTE_ADDR'], $deny)) { 
    header("location: http://www.mywarningpage_or_anywhereyouwouldlike.com/"); 
    exit(); 
} ?> 

要自动阻止某人,您将不得不随时随地创建IP的历史记录。

<?php 
$ip = $_SERVER['REMOTE_ADDR']; 
$time = time(); 
$myFile = "ip_log.txt"; 
$fh = fopen($myFile, 'a') or die("can't open file"); 
$stringData = $ip.":"$time."\n"; 
fwrite($fh, $stringData); 
fclose($fh); 

到现在自动让第一个脚本让我写数组

$ip = $_SERVER['REMOTE_ADDR']; 
$ips = file("ip_log.txt") 
$count = count($ips); 
for ($i=0;$i<=$count;$i++){ 
if (strpos($ips[$i],$ip)==true){ 
$teile = explode(" ", $pizza); 
$ip_h[] = $teile[0]; // Teil1 
$time_h[] = $teile[1]; // Teil2 
} 

//now you have arrays of the actual users ip with times. 
// now set a timeinterval of amount of requests you define as "spam" 
// and check with if for through array to deny similar like first script 

没有测试