记一次服务器优化

服务器环境

  • 双核心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%不到,那么便大功告成了

尽管可能又漏网之鱼,但影响不大就可以了,搞定之后,就可以愉快的去做其他的事情了.

发表评论