服务器环境
- 双核心cpu 8G内存
- 操作系统:centos6
- web服务器: apache2.4
- php版本: 5.6
- mysql版本:5.5
起因
公司的网站在最近一段时间访问变的非常的缓慢,作为公司唯一略懂linux运维的人,这个任务毫无疑问的就落到了我的头上了,于是请求到了ssh权限之后,就开始了我的工作了。
问题分析
首先网站本身的访问量是不多的,猜测应该不是自然负载很高
其次服务器的代码和数据库并没有任何人动过
那么我唯一能想到的原因就是网站被ddos了,接下来验证一下猜想
解决过程
首先ssh到服务器,使用top命令查看一下当前服务器的负载情况,检测到httpd进程占用了cpu达到百分之百
这么就确定是被ddos了,接下来只要分析apache的日志,把恶意的ip封禁掉就可以了
- 日志文件在/home/wwwlogs/access_apache.log
-
日志格式如下
124.239.252.4 - - 2018-10-26 11:49:15 "OPTIONS * HTTP/1.0" 200 -
在awk处理的时候,以空格为分隔符,每一列分别对应$1,$2.....$9...
如果你的apache日志和我的不一样 那么通过打开http.conf修改LogFormat如下,然后重启httpd服务
LogFormat "%h %l %u %{%Y-%m-%d %H:%M:%S}t \"%r\" %>s %b" common
使用tail+awk组合命令对日志文件进行分析
tail -n 10000 /home/wwwlogs/access_apache.log | awk '{A[$1]++;}END{for (a in A) print A[a] " "a}' | sort -n
通过这个列举出最近10000次内访问的ip地址, 并且能够看到ip地址数量
发现ip为124.239.252.4的机器在10000次内居然有2000次的访问量,那么很容易得出这不是人类所为,接下来只要利用iptable强大的功能,把这个ip给封掉就可以了
iptables -I INPUT -s 124.239.252.4 -p tcp --dport 80 -j DROP
如果要封禁124.239.252的ip段,ip应该填写(124.239.252.0/24),24表示掩码长度
封完之后还得记得把封掉的ip记录一下,方便误杀恢复
最后再使用top命令看一下cpu负载,发现cpu占用只有20%不到,那么便大功告成了
尽管可能又漏网之鱼,但影响不大就可以了,搞定之后,就可以愉快的去做其他的事情了.