网站被间歇性扫描,IP不断更换,我的应对方法

文章目录

背景

我负责的一个网站,不出名,平时也没多少流量。1天有几百个就不错了。没想到,这么不起眼的网站也有被人盯上的时候。

一天,后台使用人员告诉我网站打开很慢,慢到不能忍。

我就查询日志,看看出什么问题了,不查不知道,一查吓一跳。当天的日志已经记录了好几个文件,正常情况下不可能,网站根本没那么大的访问量。然后打开日志一看,全是某个ip的访问记录。这个ip在不断的更换网址或者参数,很明显在扫描网站。

应对方式

封ip

立马封禁这个ip。直接在防火墙里屏蔽这个ip,服务器软件也封禁这个ip。效果是立竿见影,马上日志文件就不再膨胀了。访问量也正常了。

本以为对方会消停点,没想到过了大约1个小时。网站又很慢了,我查看日志,发现换了个ip又在扫描。把这个ip又封禁了。

自动不响应策略

只封禁ip不行,他还会换ip。对方也似乎知道我发现他了,扫描没那么频繁了,但是还是在换ip扫描,间歇性的扫描,一秒钟三四次,隔一段时间扫描一次;他在模拟正常的访问。我得想个应对策略。

查看日志,日志里只要访问不存在的url路径就会有错误记录。想到了一个应对策略。用redis记录,只要某个ip访问错误url路径,就把这个ip作为键,值是次数。这样就记录这个ip访问错误的次数。在入口文件里查询当前访问的ip是否有记录,如果次数超过某个值,就直接退出响应。

代码

错误处添加的代码

php 复制代码
//获取ip
$ip=get_user_ip();
//以ip为键
$inc_key='ip_'.$ip;
$redis = new \Redis();
$redis->connect('127.0.0.1', 7280);
$redis->auth('xxxxxxxxxx');
//记录这个ip访问次数
$redis->incr($inc_key);
$redis->close();

入口文件里添加代码

php 复制代码
//获取当前ip
$user_ip=get_user_ip();
//以ip为键
$inc_key='ip_'.$user_ip;
$redis = new \Redis();
$redis->connect('127.0.0.1', 7280);
$redis->auth('xxxxxxxxxx');
//获取这个ip访问次数
$ip_num=$redis->get($inc_key);
//如果能取得值,说明曾经访问过错误路径
if($ip_num!==false){
	//如果访问错误次数大于100,增加这个ip的次数,退出响应。增次数能知道这个ip有多少次错误访问
    if ($ip_num>100){
        $redis->incr($inc_key);  
        $redis->close();  
        die;
    }
}
// 关闭Redis连接
$redis->close();

为啥不上其他防护软件呢?

我倒是很想上,加上各种安全防护系统。关键在于花钱,公司不舍得。咱就是个打工的,出问题了就是打工人没做好,要是花钱,老板觉得还养着技术干嘛。

相关推荐
还是做不到嘛\.10 小时前
Dvwa靶场-SQL Injection (Blind)-基于sqlmap
数据库·sql·web安全
不写八个11 小时前
PHP教程004:php链接mysql数据库
数据库·mysql·php
智算菩萨14 小时前
【论文精读】通过元学习与关联规则挖掘增强人工智能在网络安全领域特征选择中的可解释性
论文阅读·人工智能·学习·web安全·论文笔记
一名优秀的码农16 小时前
vulhub系列-48-Hack_Me_Please(超详细)
安全·web安全·网络安全·网络攻击模型·安全威胁分析
cch891816 小时前
PHP vs Go:Web开发选谁更胜一筹?
前端·golang·php
一只鼠标猴16 小时前
甲方应急响应:从事件处置到溯源闭环实战指南
安全·web安全·网络安全·应急响应·应急·应急溯源
淼淼爱喝水17 小时前
OpenEuler 系统下 Ansible 环境部署与连通性测试完整步骤
linux·开发语言·php·openeuler
zmj32032417 小时前
ISO/SAE 21434:2021(道路车辆 - 网络安全工程) 汇总
网络·安全·web安全·21434
Chengbei1119 小时前
一次比较简单的360加固APP脱壳渗透
网络·数据库·web安全·网络安全·系统安全·网络攻击模型·安全架构
爱学习的程序媛19 小时前
JWT签发全指南:从原理到安全实践
分布式·安全·web安全·安全架构·jwt签发·无状态认证