最近我的一个小破网站不断遭受莫名其妙的攻击,攻击方法很是简单,从同一个IP超大量地请求我网站的某个页面。
(图源 :pixabay)
按说它请求就请求呗,网站架设在VPS上,流量也够用,CPU资源也可以,可是没想到的是,恶意请求产生了巨量的访问日志和错误日志,不断地充塞我的VPS空间,最后因为空间问题挂掉。
网站几天前第一次挂掉时,我登录看了一下日志,从中甄别出攻击者的IP,然后使用ufw将其加入到黑名单,再删除巨量的日志,重启服务。
原本以为这一系列手段下来,应该就算彻底地解决了这个问题。毕竟这个网站运行了四五年了,从未发生过这种事情。咱也没做啥得罪人的事,不应该被恶意针对。
不过事实证明我想简单了,昨晚因为需要做一些其它操作,登录一下VPS,结果发现空间竟然又要满了!什么?我不是几天前刚清理过嘛!?
看了一下空间占用,果然又是nginx的日志占用了大量空间,
head access.log
tail access.log
head error.log
tail error.log
组合拳查了一下,部分内容类似这个样子:
果然验证了又是之前相同的攻击方式,同时因为触发了Nginx限流设置,产生了更大量的错误日志,加速了磁盘空间的消耗。
对于这类攻击,因为IP来源固定,所以我之前的方式是直接使用ufw屏蔽来自此IP的访问:
sudo ufw deny from xxx.xxx.xxx.xxx
之后可以通过如下指令查看我们设置的规则是否生效:
sudo ufw status numbered
这是我最近加入的两条禁止入站的规则:
再删除巨量的日志,重启服务。
原本在使用ufw禁用来自此IP的访问之后,事情就应该告一段落。
但是突然想到一个问题,我屏蔽了这个IP,没准过两天攻击者可能再次更换IP来进行同样的攻击呀?
那么我岂不是每隔一段时间就要登录一下VPS,查看一下日志,看到可疑IP后用ufw屏蔽,再删除日志,重启服务,想想就累。
当然,我还可以考虑写一个脚本,自动去分析日志,自动去屏蔽IP,自动去清理日志&重启服务,但是想想还是很累。
有没有什么一劳永逸又不是那么累的方案呢?
我突然想到其实我的VPS是能承受得住巨量请求的,CPU扛得住,流量也扛得住,唯一的问题就是生成的日志不断充塞磁盘空间。那么我禁止生成日志,岂不是就OK啦?
懒得去查Nginx日志的具体规则,直接粗暴地把两种日志都写入到/dev/null,这样就搞定啦。就是编辑/etc/nginx/nginx.conf,将原来相关条目的值修改为:
access_log /dev/null;
error_log /dev/null;
正确的方式应该是将上述指令写入到对应站点的配置文件中,不过我这个VPS上就一个站,就不纠结那么多啦。
禁用nginx日志,不是运维人员处理问题的最佳方式。比如禁用日志后,我们就再也没法从日志中分析出问题所在,识别出攻击者IP等等。
不过我这个站重要性一般般,即使真的被彻底攻击DOWN掉,也没啥实质损失,那么就让攻击者慢慢去玩吧。
还有就是如果我想再去查出新的攻击者,重新启用日志即可,这样一想,好像还真不是什么大问题呢。