故障现象:

1.应用无法通过外网访问,应用服务器所在的内网网段之间(web和db数据库之间访问丢包严重)不能互相访问

其他网段正常





2.怀疑是网络设备问题,将连接该网段设备的交换机重启后故障依旧,通过查看个端口的IP报文数据

发现28号口疑似出现环路现象,接收INPUT数据大大超出发送OUTPUT数据





28号口连接的是OA服务器,OA服务器是一台放在centos6.3下的apache web服务器





怀疑连接该服务器端口或者网线有问题,更换网线和交换机接口后问题依旧









3.拔掉该机器的网线后发现内网恢复正常,问题出在OA服务器上





但单台服务器引起类似环路问题令人费解





4.重启服务器后内网恢复正常





5.通过查看该OA服务器的日志/ var/log/messages 发现了部分报错日志:

localhost kernel: possible SYN flooding on port 8888. Sending cookies





可能是遭到了syn flood流量恶意访问









=======================================









SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,常用假冒的IP或IP号段发来海量的请求连接的第一个握手包(SYN包),被攻击服务器回应第二个握手包(SYN+ACK包),因为对方是假冒IP,对方永远收不到包且不会回应第三个握手包。导致被攻击服务器保持大量SYN_RECV状态的“半连接”,并且会重试默认5次回应第二个握手包,塞满TCP等待连接队列,资源耗尽(CPU满负荷或内存不足),让正常的业务请求连接不进来。

SYN攻击是最常见又最容易被利用的一种攻击手法,也应该算为DDOS攻击的一种,我们都知道,TCP协议有一个缺陷,华三交换机是经过三次握手后面需要等待确认,发送很多这样的连接通信数据包请求华三交换机,使得CPU资源和内存被耗尽,SYN攻击不但影响着网速和路由器,还对主机本身也产生影响,这种攻击威力强大,不管对方是什么系统,只要这些系统打开了TCP这个端口服务华三交换机就可以进行攻击。如果在配合IP欺骗,这种攻击方式会达到非常好的效果。

此次处攻击的对象为OA服务器由两台centos组成,OA系统本身没有什么大的影响,通过内网可以继续访问。流量同时打在了连接OA系统的交换机上,该交换机性能较差,导致同网段的windows服务器如tomcat web服务和sqlserver数据库服务器收到牵连掉包验证而不能正常提供服务,可能是windows服务器对网络的要求比较高,此时应该更换交换机

后续诊断:

检查系统syslog:





# tail -f /var/log/messages

Feb 23 09:48:15 localhost kernel: possible SYN flooding on port 8888. Sending cookies





检查连接数增多,并且SYN_RECV 连接特别多:

# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'





TIME_WAIT 16855

CLOSE_WAIT 21

SYN_SENT 99

FIN_WAIT1 229

FIN_WAIT2 113

ESTABLISHED 8358

SYN_RECV 48965

CLOSING 3

LAST_ACK 313





根据经验,正常时检查连接数如下: 

# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'





TIME_WAIT 612

CLOSE_WAIT 2

FIN_WAIT1 3

FIN_WAIT2 535

ESTABLISHED 257

SYN_RECV 4





应急处理





根据netstat查看到的对方IP特征:

# netstat -na |grep SYN_RECV|more





利用iptables临时封掉最大嫌疑攻击的IP或IP号段,例如对方假冒173.*.*.*号段来攻击,短期禁用173.*.*.*这个大号段(要确认小心不要封掉自己的本地IP了!)

# iptables -A INPUT -s  173.0.0.0/8  -p tcp  –dport 80 -j DROP





再分析刚才保留的罪证,分析业务,用iptables解封正常173.*.*.*号段内正常的ip和子网段。这样应急处理很容易误伤,甚至可能因为封错了导致ssh登陆不了服务器,并不是理想方式。





tcp_synack_retries = 0是关键,表示回应第二个握手包(SYN+ACK包)给客户端IP后,如果收不到第三次握手包(ACK包)后,不进行重试,加快回收“半连接”,不要耗光资源。





总结:





对于SYN flood攻击,调整下面三个参数就可以防范绝大部分的攻击了。









增大tcp_max_syn_backlog  /proc/sys/net/ipv4目录下tcp_max_syn_backlog文件

减小tcp_synack_retries   /proc/sys/net/ipv4目录下tcp_synack_retries

启用tcp_syncookies

现在的内核默认都是开启tcp_syncookies的

可以统一通过调整 /etc/sysctl.conf 文件来调整三个参数:





net.ipv4.tcp_max_syn_backlog = 4096

net.ipv4.tcp_syn_retries = 2





使配置生效:

# sysctl -p

SYN flooding引发的网络故障的更多相关文章

  1. 一次CTS引发的网络故障

    接到业务部门通知,A机房(库a)到B机房(库b)之间的数据库服务器之间的网络带宽异常突增,影响公司对外业务的整体带宽.一接到通知,作为数据库管理对所涉及的IP还是比较敏感.第一反应就是可能当时主库产生 ...

  2. IEEP部署企业级网络工程-网络故障-环路故障

    网络故障 1.环路故障 概念 1).以太网是一个支持广播的网络, 在没有环路的环境中,广播报文在网络中以泛洪的形式被送达到网络的第一个角落,以保证每个设备都能够接受到它.每台二层设备在接收到广播报文以 ...

  3. 记一次诡异的网络故障排除 - tpc_tw_recycle参数引起的网络故障

    一.故障现象 我们团队访问腾讯云上部署的测试环境中的Web系统A时,偶尔会出现类似于网络闪断的情况,浏览器卡很久没有反应,最终报Connection Timeout. 不过奇怪的是,当团队中的某个人无 ...

  4. 一次VLAN标签引发的网络事件的处置

    一次VLAN标签引发的网络事件的处置 一.背景介绍 事件背景: HZ某分公司新装一套业务系统,通过一条专线和BJ总公司连通.分配给HZ公司的ip地址为:a.b.c.X,掩码24位,网关a.b.c.1. ...

  5. 一次“不负责任”的 K8s 网络故障排查经验分享

    作者 | 骆冰利 来源 | Erda 公众号 ​ 某天晚上,客户碰到了这样的问题:K8s 集群一直扩容失败,所有节点都无法正常加入集群.在经过多番折腾无解后,客户将问题反馈到我们这里,希望得到技术支持 ...

  6. linux kernel: possible SYN flooding on port 8080. Sending cookie

    possible SYN flooding on port 7244. Sending cookie

  7. H3C交换机引发的奇葩故障

    设备:H3C S5120-28P-SI 故障:某个交换机的接口速率只有100Mbps. 描述:这个故障还是很特别的,因为按普通的测试办法很难第一时间判断是交换机的固件问题,我也是做了几乎所有外围设备和 ...

  8. 服务请求比较慢SYN flooding

    服务请求比较慢 dmesg 查看日志,发现SYN flooding 问题,某一端口居多 内核输出“TCP: Possible SYN flooding on port”信息,在内核syncookie机 ...

  9. React Native 在用户网络故障时自动调取缓存

    App往往都有缓存功能,例如常见的新闻类应用,如果你关闭网络,你上次打开App加载的数据还在,只是不能加载新的数据了. 我的博客bougieblog.cn,欢迎前来尬聊. 集中处理请求 如果你fetc ...

随机推荐

  1. 全面深入介绍C++字符串:string类

    http://blog.csdn.net/liuliming3000/article/details/1809385 1 从C到C++ string类 2 string类的构造函数 3 string类 ...

  2. MATLAB:图像乘除法运算(immultiply、imdivide函数),同时比较双精度类型图像运算结果

    图像乘除法运算涉及到immultiply.imdivide函数,实现代码如下: 1.图像之间的乘法运算 close all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clear ...

  3. vue2.0 keep-alive最佳实践

    1.基本用法 vue2.0提供了一个keep-alive组件用来缓存组件,避免多次加载相应的组件,减少性能消耗 <keep-alive> <component> <!-- ...

  4. 批处理 ------ @、ECHO OFF、ECHO ON 的使用

    1.在批处理文件中,如果命令前加@,表示这条命令不打印出来,只把结果打印出来,即@是关闭命令本身的回显 2.::在批处理中表示注释某一行 3.ECHO ON表示接下来的命令中(不包括本命令),执行命令 ...

  5. logstash5.5 数据采入elasticsearch5.5(基于x-pack)

    logstash5.5 数据采入elasticsearch5.5(基于x-pack) 以采集redis日志信息为例 redis日志文件.MQ(redis).logstash主机:10.10.83.16 ...

  6. Git-Credential-Manager-for-Mac-and-Linux

    1.安装brew 安装命令: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/instal ...

  7. Hibernate_day03

    一.今天内容 0 列表功能实现 1 表与表之间关系回顾 (1)一对多(客户和联系人) (2)多对多(用户和角色) 2 hibernate一对多操作 (1)一对多映射配置 (2)一对多级联保存 (3)一 ...

  8. Lamport Logical Clock 学习

    1,导论 ①如何在分布式环境下定义系统中所有事件的发生顺序?②分布式环境下多个进程竞争资源时如何互斥?③什么是偏序,偏序的作用是什么,有什么不足?④什么是全序,全序的作用是什么,有什么不足?⑤为什么需 ...

  9. 8.SpringBoot 模板引擎 Thymeleaf

    1.模板引擎原理 JSP.Velocity.Freemarker.Thymeleaf 都是模板引擎.SpringBoot推荐的Thymeleaf:语法更简单,功能更强大: Thymeleaf模板引擎 ...

  10. IO流总结笔记三

    ​ 字节流: 抽象基类:InputStream, OutputStream. 字节流可以操作任何数据.注意:字符流使用的数组是字符数组.Char [] chs 字节流使用的数组是字节数组.Byte [ ...