Laravel 学院今天下午两点半到三点半期间不能访问问题定位及修复细节报告

今天下午3点多的时候,有微信群用户反应学院访问不了了:

我赶紧打开浏览器,如网友所言,发现确实访问不了了。

我立即登录到阿里云后台,看看 ECS 实例是否运行正常,两个实例都是正常运行的,再查一下两个实例的监控指标,发现装有负载均衡的入口实例上外网网卡出网带宽被打满,我第一时间考虑的是不是网卡带宽太低,于是先将其升级到2M带宽(为了降低验证成本,选择临时带宽升级,就选一天的,一两块钱),发现还是不行,出网带宽立即蹿到2M,又打满了:

接下来,看来不是这个问题,我需要登录到服务器去定位具体原因,此时,由于出网带宽被打满,登录变得很慢(之所以第一时间升级带宽也有这方面的原因),ping 都已经无法 ping 通了:

好在等了一会登进去了,既然是网络问题,我需要监控下网络流量,看看到底是哪些连接导致的带宽被打满,因此需要在服务器上安装一个 iftop 工具:

apt-get install iftop

安装完成后,根据阿里云的监控面板是网卡1(eth1)流量异常,所以通过 iftop 工具监控下 eth1 的流量:

iftop -i eth1 -P  // 带 -P 显示对应端口号

此时,可以看到这张网卡上异常的网络流量都来自 114.84.146.45(右侧)这个外部 IP 与服务器(左侧)的 HTTPS 连接,是在恶意攻击?还是爬取网站信息?

到这里,大概就明白问题的症结所在了,接下来,就好办了,立马把这个 IP 封杀掉,拒绝其与学院所在服务器的连接,这个可以通过 iptables 办到:

iptables -I INPUT -s 114.84.146.45 -j DROP

执行完这条命令,可以看到 iftop 监控界面上的异常连接消息,在阿里云后台的实例监控面板上也可以看到出网带宽的值立即降下来了:

再在浏览器访问 Laravel 学院网站,世界又恢复了平静,仿佛什么都没发生过:

以上就是今天下午学院差不多1个小时不能访问的问题定位和修复过程,希望下次你遇到类似问题可以对你有所启发。

PS:此方案主要用于快速解决问题,长期可行性方案大家可以自行去设计并实现,比如从运维角度根据大数据将异常 IP 检测到并进行隔离,或者从应用角度对单个用户访问频率做限制等。

上一篇: 回顾 2018,展望 2019

下一篇: 基于 Laravel 6.0 重构的新版学院的几点说明(上):重构背景和基本使用篇