如何利用redis的高性能防止非法攻击

一些小黑客会试图通过正常的但高频的【正常访问】去查看我们网站的一些隐藏的页面,比如管理员登录页面。还有一种比较常见的是去扫描一些 行业内的 现成的 木马文件,来攻击我们的网站。因为短时间内会有大量的看似正常的请求,会造成性能不高的服务器的报警,如内存或者cpu,甚至带宽 吃紧,影响正常服务。

下图为非法请求示例

可以利用redis的高性能优势去做一些文章。

原理就是用网站程序去判断用户的请求,如果判断出是恶意的,那么把该访问者记录下来存储到redis中去。如果该访问者再来请求,那么直接给他返回500。正常情况来讲,黑客的扫描工具得知500相应码后,应该会停止扫描吧。就算不停止,那么redis的高性能也可以抵挡这些非法扫描请求,从而达到保护服务器的目的。通常可以设置一个小时内禁止该ip的正常访问。时间可以自己设置。

如何判断恶意访问:比如我的是php程序,如果用户的请求中出现了 .asp或者.jsp,或者hack,hacker字样,那么就判断你小子不老实,就打入冷宫。至于加哪些判断字符可以根据自己的需求进行设置。

需要服务器安装redis,我这里是用的php做了一个示例,我的php文件名为【illegal_deny.php】,用户可以直接在站点入口包含此文件即可。

require __DIR__.'/../app/diy/illegal_deny.php';

下边是文件内容。请根据自己的实际情况进行修改。

<?php
//redis的配置
//define('REDIS_SERVER_IP', '121.40.24.38');
define('REDIS_SERVER_IP', '127.0.0.1');
define('REDIS_SERVER_PORT', 6379);
//auth就是密码
define('REDIS_SERVER_AUTH', 'yourpassword');

//禁止访问的时间,单位秒 3600 = 1小时
define('DENY_TIME', 3600);


function getRedis($db = 0){
    
    $redis = new \Redis();
    $res = $redis->connect(REDIS_SERVER_IP,REDIS_SERVER_PORT);
    $redis->auth(REDIS_SERVER_AUTH);
    $redis->select($db);
    return $redis;
}

//如果是访问一些非法网址,比如黑客,就进行一段时间的访问屏蔽 begin
//非法访问次数
$illegal_attempt_count_key = 'ILLEGAL_ATTEMPT_COUNT';

//是否已经被限制访问
$illegal_key = "ILLEGAL_IP_".$_SERVER['REMOTE_ADDR'];
//$illegal_key = "ILLEGAL_IP_".$_SERVER['HTTP_X_FORWARDED_FOR'];



$uri = $_SERVER['REQUEST_URI'];


$redis = getRedis();
//$redis->delete($illegal_key);
if($redis->exists($illegal_key)){
 
    header('HTTP/1.1 500 Internal Server Error');
    exit(0);
}

$limit_time = DENY_TIME;//禁止时间,单位秒
//判断是否要进行限制

//几个禁止访问的目录
if($uri == '/admin'){
    //
    $redis->setex($illegal_key,$limit_time,date("Y-m-d H:i:s",time()));
    $redis->incr($illegal_attempt_count_key);
    header('HTTP/1.1 500 Internal Server Error');
    exit(0);
}

//限制访问地址包含的一些关键词,只要匹配到就进行限制
$illegal_urls = ['hack','hacker','.asp','.jsp'];
foreach ($illegal_urls as $url){
    if(strpos($uri, $url)){
        //
        $redis->setex($illegal_key,$limit_time,date("Y-m-d H:i:s",time()));
        $redis->incr($illegal_attempt_count_key);
        
        header('HTTP/1.1 500 Internal Server Error');
        exit(0);
    }
}
//如果是访问一些非法网址,比如黑客,就进行一段时间的访问屏蔽 over

附:对我的1cpu2G内存的服务器加了这个【护盾】后,服务器就不会再报警了(之前是cpu 一旦过90%使用率就会发邮件,短信,好烦)。真香!谁用谁说好。