我的网站最近一直在接受漏洞扫描,我对此不负责任。我正在尝试阻止任何IP,要求超过合理数量的页面。实际上,我不确定数量可能是4-5个请求,并阻止它们。
我见过用光速web服务器做这件事,但我用的是apache。如何限制对我的页面的PHP请求,以便如果用户超过限制,他们将被阻止从我的网站30分钟?(我真的不确定什么是好的数量。这样真正的用户就不会被屏蔽了。)
发布于 2011-01-10 07:12:48
在这样的解决方案中,重要的是,实际的“阻塞”是非常便宜的资源成本。正确识别攻击者也很重要,不要无意中禁止某些人,但也不要太开放,因为在阻止某人之前,你已经浪费了很多资源。
然而,你并不是第一个遇到这个问题的人。
有一个很棒的叫做mod_evasive的apache模块,它就是为实现这个目的而配置的。
我曾经在一个服务器上做了一个非常简单的技术(因为它在使用partuclar应用程序时工作得更好),它的流程如下:
我的应用程序使用当前小时的键和用户ip地址对本地apc缓存中的一个变量进行计数,并检查是否达到了限制。
如果是,则将ip地址写入作业日志,在作业日志中,cronjob将其提取并使用iptables添加一个过滤器,因此来自该ip的包将被丢弃。
因此,它们甚至不能到达are服务器,所花费的资源也是最少的。
添加的规则每天都会被清除一次。
发布于 2011-01-10 06:08:35
我使用它来阻止自定义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由我编写,未经测试
发布于 2011-01-10 05:47:39
我想我们都知道接下来会发生什么(记住每个文件/图像等都是一个单独的请求)。
为了建议一种替代方案,为什么不简单地一次屏蔽一个违规的IP地址--你大概可以从你的流量日志中获得有问题的IP地址,并且在你的httpd配置中添加一个"Deny from xxx.xxx.xxx.xxx“风格的IP地址块是很容易的。(此外,与基于PHP的方法不同,这也适用于图像等。)
否则,很容易冒着阻止合法网络流量、谷歌蜘蛛等的风险。
https://stackoverflow.com/questions/4642016
复制相似问题