Linux服务器遭遇疑似CC攻击简单检测及解决办法

下午突然收到服务商的报警通知,提示我的某台服务器外网流量过高,打开网站查看,一看吓一跳,带宽占用几乎满值,时间持续了几乎15小时,网站访问速度非常慢,服务商的后台里可以看到流量统计,从今天午夜0点到现在,外网流量一直全占满,我的小站一般访问量不可能这么大,看来真的是遭遇到“关注”了……立刻打开搜索引擎,同时联系上服务商的在线技术支持,开始着手解决这个问题。

查看服务器外网实时流量

服务商后台的流量监控不是实时的,并且只有一个大概的总的统计,无法知晓这部分流量是哪里开始的,于是首先安装iftop检查实时流量,执行

1
yum install iftop

安装完成后,在终端中直接执行

1
iftop

观察一段时间发现,目前占用流量最多的是上面两个IP,分别是123.151.10.37和123.151.43.72

iftop界面

锁定这两个ip之后,根据服务商技术支持的指导,执行如下命令

1
netstat -ano|grep 123.151.10.37

执行后发现,这个ip正在不断的对网站的80端口进行持续访问,并且大多都超时了。

netstat查看

可以看到大量的访问并且状态是TIME_WAIT,技术支持的建议是开启tcp短连接回收。

开启tcp短连接回收

关于tcp短连接产生大量TIME_WAIT的基础知识,可以参考这篇文章了解,这里我直接根据技术支持的建议进行操作, 首先打开sysctl.conf文件

1
vi /etc/sysctl.conf

找到(如果没有找到,就直接加上这行)

1
net.ipv4.tcp_syncookies = 1

在其后面加上

1
2
3
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30 

保存退出,然后执行

1
sysctl -p 

这样就生效了,上面的参数含义引用网上的说明

net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;

net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

防火墙iptables临时封禁ip

发现添加了短连接回收的参数后,并没能阻止那两个ip的继续访问,于是需要在iptables中直接禁止这两个ip的访问,直接在终端里输入

1
2
iptables -I INPUT -s 123.151.10.37 -j DROP  
iptables -I INPUT -s 123.151.43.72 -j DROP  

这样的话封禁效果会持续到下次重启,如果想永久保持封禁,则需要在/etc/sysconfig/iptables里加上以上语句。 封禁那两个ip之后,再次iftop查看,发现流量已经瞬间降下来了,持续观察一段时间后,基本确定问题解决。

封禁ip后再次查看iftop

坚持原创技术分享,您的支持将鼓励我继续创作!