下图为非法请求示例
可以利用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%使用率就会发邮件,短信,好烦)。真香!谁用谁说好。