0

我的客户在同一物理专用服务器上拥有多个网站。通常,蛮力攻击会尝试访问一个网站上的无效 URL,然后继续访问其他网站。

有没有办法在一个网站上捕获无效的 url 请求并更新同一服务器上所有网站的共享阻止列表?

我读到这个:如何使用基于 PHP/MySQL 的脚本来禁止网站的 IP 块?并且正在寻找一种方法来更新我可以在每个站点上自动包含的某种文件,以减少恶意活动的影响,也许可以在 cron 上清理该文件。

对于这种情况有什么想法或最佳实践吗?

谢谢!

4

3 回答 3

2

如果您有服务器访问权限,我更喜欢http://www.fail2ban.org。当您没有时,我会在 htaccess 中将重定向到 php 为 404 或其他内容,脚本会记录请求错误的频率,并且在 10 或之后...请求您阻止 ip。

但是在服务器上这样做真的更好,所以apache不需要回答所有这些请求..

问候

于 2013-01-13T23:01:15.567 回答
2

虽然我对此有严重的保留意见,但我们的服务器管理员安装了PSAD,它“似乎”可以工作 - 目前有很多关于中文(基于中国的 IP 地址,当然可以是任何地方的代理)的警报。只是要清楚你知道你在阻止什么以及为什么。

提示:将电子邮件警报的警报级别设置为 4+(或关闭电子邮件警报),否则您每天会收到数千个。

于 2013-01-13T23:14:14.573 回答
1

我想你可以使用这样的东西:

假设您只分配了以下要访问的链接。

假设您通常有一个类似这样的网址,site.com/index.php?id=如果您只想让人们访问id=homepageabout-us,,servicecontact

$id = $_GET['id'];
switch($id){

case "homepage";
echo //do something
break;

case "about-us";
include('about.php');
break;

case "service"; 
echo  //something;
break;

case "contact";
echo //something
break;



default: 
get_ip_and_ban(); // initiate a function, that records and bans IP
break; 


}

更新 - (如何在多个服务器之间共享 IP ..)或类似的东西

好的,这就是如何获取 IP .. 或者我将如何获取 IP。

function get_ip() {

    if(!empty($_SERVER['HTTP_CLIENT_IP'])) 
        { $ip=$_SERVER['HTTP_CLIENT_IP']; }
            elseif(!empty($_SERVER['HTTP_X_FORWARD_FOR']))
                {$ip=$_SERVER['HTTP_X_FORWARD_FOR'];}
                    else {$ip=$_SERVER['REMOTE_ADDR'];}
                        return $ip;

} 

所以,get_ip();是一个获取 ip 的函数,现在,你可以将任何试图访问错误链接的人插入到数据库中。因此,在完成之后让我们创建一个简单的函数来检查数据库中是否存在坏 IP。假设$allowed_ip是来自数据库的一组错误 IP,此函数将检查是否存在其中一个错误 IP,如果存在,则以下函数将阻止用户访问该页面。

function access_directive($allowed_ip){

    if(get_ip() === $allowed_ip)
     {exit("Dude, You are blocked. Get Lost"); }

}

现在为了简单起见,我将尝试仅阻止 <?php echo access_directive("127.0.0.1"); ?>位于页面顶部的 localhost,并将阻止在access_direcive();

您需要创建一个数据库来存储错误的 ip,然后在您的页面顶部使用上述功能或类似功能来阻止其他人。

于 2013-01-13T23:17:02.097 回答