事情的经过是这样的,我将服务器上的redis端口暴露了在外面,而且没有给redis设置用户名和密码,当我用第三方开源工具 another redis deskTop Manager,连接时于是悲剧发生了,不知道是工具的事情还是别的事情造成的,先看看发生的特征吧。
执行命令:netstat -tun
你会看到自己的服务器不断的变换端口,然后朝着6379端口发送数据,注意看发送的ip也不一样,而且会不断的变换ip,造成了网络只有SYN_SENT状态,接着就造成了网络的堵塞,网站随即也就打不开了,这就是洪水攻击。
下面引用别人的对这个SYN_SENT洪水攻击的解释
SYN攻击属于DOS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费服务器CPU和内存资源.SYN攻击聊了能影响主机外,还可以危 害路由器,防火墙等网络系统,事实上SYN攻击并不管目标是什么系统,只要这些系统打开TCP服务就可以实施.
我们知道,在网络中两台电脑建立TCP连接 时需要进行三次握手过程,客户端首先向服务器发关TCP SYN数据包,接着服务器会向客户端发关相应的SYN ACK数据包,
最后客户端会以ACK进行响应.从而建立正常的握手过程.在具体的连接细节中,服务器最早接受到SYN包时,在TCP协议栈中会将相应的半 连接记录添加到队列中,之后等待接受下面准备握手的数据包,
如果握手成功,那么这个半连接记录将从队列中删除.或者当服务器未收到客户端的确认包时,会重 发请求包,一直到超时才将此条目从未连接队列删除.但是,
在服务器中的TCP协议栈中存储的半连接记录是有限的,当服务器受到SYN型的DOS攻击后,队 列会很快处于充满状态,客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包,
服务器回复确认包,并等待客户的确认,由于源地址是不存 在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢严重者引起网络堵塞甚至系统 瘫痪,
服务器随后就不再接受新的网络连接,从而造成正常的客户端无法访问服务器的情况发生.
正常情况下,出现SYN_SENT的state应该很少,并且短暂
如果一个连接长时间处在SYN_SENT,有可能是没连上,比如端口没有打开
解决办法
备份数据,重新装系统吧,各种杀进程,也怕杀不干净。
防护
有了这个教训,一定要注意经常的数据备份和防护,切记不要直接把端口暴露出去,若要暴露一定要设置用户名和密码。