背景
早上到公司发现个人网站打不开,一直在转,用xshell
连接服务器,虽然能连上,但是卡到爆,处于完全无法操作的状态,登录阿里云后台发现CPU使用率持续超过45%:
可怜的1M带宽也被全部占用(也就是截图中的1122kbps):
想查看是哪个进程占用这么大的CPU和带宽,但是带宽被未知程序占用,xshell
完全连不上,怎么破!最后只能强制重启服务器,重启之后CPU和带宽立马恢复正常,网站也能访问了,想着再去排查一下之前是什么原因导致的,但是由于恢复正常了,没法排查,所以就算了,以为从此就恢复正常了,可谁知,没过半小时网站又打不开了!
持续跟进
当时正好是中午吃饭时间,所以就没管了,吃完饭回来继续弄!
无意中发现阿里云的网页版远程连接可以正常使用,一点都不卡(估计是优先级比较高,优先使用带宽),由于对linux网络相关命令不熟,只能一边百度一边尝试解决。
先是查了一下CPU占用排名前十的进程:
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
发现仅仅memcached
就占了25%
!但是当时以为这是正常现象,因为我也没关注过平时正常情况下占用多少。
然后又查了下内存占用排名前十进程:
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head
主要是memcached
和tomcat
。但是我主要还是想看哪个进程占用了主要带宽,以及客户端IP,然后试了下iftop
这个蛮不错的命令,需要单独安装:
yum install iftop
安装完之后直接可以使用了,执行iftop -i eth1
可以查看占用带宽最高的若干IP:
不执行还不知道,一执行吓一跳,一个名为103.102.4.4
的俄罗斯IP累计带宽占用了1.28G
,我说怎么网站访问不了啊,原来全被你占用了!但是仅仅是这样还不知道具体是哪个程序占用了,执行iftop -i eth1 -P
可以分端口查看:
果然全是memcached
进程!然后随便查了下发现memcached没有认证机制,默认情况下任何人都可以访问!也是醉了,所以赶紧把它给停了,停了之后发现带宽立马恢复正常,网站也能访问了(只是报了一个memcached服务没找到的错误)!
所以当时我想到最快的解决办法应该是先把这个攻击的IP拉黑,然后把网站尽快恢复正常:
vim /etc/sysconfig/iptables
# 添加如下一行
-A INPUT -s 103.102.4.4 -j DROP
service iptables restart
拉黑之后再把memcached
开启,发现没过多久又被攻击了,这次是换了一个IP,所以发现拉黑IP这个方法也不是个办法!然后发现只需要禁止外网访问memcached就可以,启动参数里面加上-l 127.0.0.1
即可:
./memcached -p 11211 -d -u root -m 100 -c 256 -P /tmp/memcached.pid -l 127.0.0.1
关于这一块可以访问我写的另外一篇博客:Linux上安装和启动Memcached-禁止外网访问Memcached
至此,关于memcached
导致的问题已解决,不过当我再次执行iftop -i eth1 -P
命令时发现不止memcached这一个东西被攻击,squid
也被攻击了,只是带宽占用不大:
但是发现我的squid压根没启动啊,没办法,一朝被蛇咬十年怕井绳,对网络安全不太在行的我干脆把squid给卸载了!至此,网站才算正式恢复正常!正常情况下,CPU占用才1%而已嘛!
更新
2018-03-02更新,今天收到了阿里云官方发的邮件,说受到大规模memcached
恶意攻击: