服务器被攻击,我的网站没有挂,ip限流,nginx免费防火墙
·
9月12号下午3点,我看到微信群里面说我的小程序音乐不能播放了,我打开我的也是一样报错,我就立即打开了宝塔面板,看到我的服务器遭到个人ip疯狂请求,由于我在宝塔里面配置了这些,能拿到用户的ip地址
location /apt/ {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'x-requested-with,content-type';
proxy_pass http://127.0.0.1:7001/;
proxy_set_header Host $host;
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
index http://127.0.0.1:7001/;
# proxy_pass http://127.0.0.1:7001/;
}
通过pm2 monit命令在后台看到有一个ip在不停的请求我的音频接口,我赶紧停掉了我的这个服务,可是这个人不知道是从什么时候就开始攻击我的网站,不知道为什么,我的宝塔免费的防火墙并没有拦截到这个人的请求,我设置的是10秒内超过5次就封所这个人的ip理论上是不会造成请求过多的。

没办法,我又研究了下怎么避免在服务器受到攻击时的一些应对办法,作为一个白嫖党要钱的是肯定不行的,于是我把重要的接口上加了一个中间件,中间件再去过滤掉一些频繁请求的ip,大概就是这样
// 存储用户请求信息的数据结构
const userRequests = {};
// 中间件函数,用于检查用户请求频率
export async function requestLimitMiddleware(ip: string) {
const now = Date.now();
// 检查用户是否存在于userRequests中
if (!userRequests[ip]) {
userRequests[ip] = [];
}
// 移除超过10秒的请求记录
userRequests[ip] = userRequests[ip].filter((timestamp) => now - timestamp <= 10000);
// 如果用户的请求数超过5次,返回错误响应
if (userRequests[ip].length >= 7) {
return { data: '请求频率超限' };
}
// 记录当前请求时间
userRequests[ip].push(now);
return { data: '请求成功' };
};

这样我们可以限制这个人在10秒内的请求次数,来达到降低服务器的性能损耗,避免了dos攻击,这也只针对少数攻击有一定的作用,如果大家有什么好的方法欢迎分享出来。
我的微信小程序:轻音乐Pro
更多推荐
所有评论(0)