目录

一、TCP洪水攻击介绍

1.TCP洪水攻击介绍

1.1 半连接队列(SYN队列)

1.2 全连接队列

2.ss命令浅析

二、Linux服务器TCP洪水攻击入侵Demo(上)

2.1 TCP洪水攻击环境准备

三、Linux服务器TCP洪水攻击入侵Demo(下)

3.1  入侵攻防分析实战

3.2  继续抓包分析

四、TCP洪水攻击结果分析和解决方案Demo

4.1 洪水攻击结果现象

4.2 缓解TCP洪水攻击方案

4.3 现象和思路总结


本博文简单介绍TCP洪水攻击流程,同时使用 hping3 进行攻击服务,重点介绍怎么区分洪水攻击以及解决方案。

一、TCP洪水攻击介绍

1.TCP洪水攻击介绍

洪水攻击是一种网络攻击,它使用伪造的TCP连接请求来淹没服务器的资源,从而使服务器无法响应正常的用户请求
这种攻击通过不断地发送同步(SYN)连接请求到服务器,而服务器会尝试建立连接,当服务器回复 SYN+ACK 报文后,攻击者不会发送确认(ACK)
那SYN队列里的连接则不会出队,逐步就会占满服务端的 SYN半连接队列
服务器会一直等待,耗尽服务器的资源,最终就是服务器不能为正常用户提供服务

(想了解特别详细的可以看看TCP三次握手的流程)

攻击的背景来源:TCP 进入三次握手前,服务端会从内部创建了两个队列
半连接队列(SYN 队列)
全连接队列(ACCEPT 队列)

1.1 半连接队列(SYN队列)

存放的是三次握手未完成的连接,客户端发送 SYN 到服务端,服务端收到回复 ACK 和 SYN
状态由 LISTEN 变为 SYN_RCVD,此时这个连接就被放进 SYN 半连接队列
半连接队列的个数一般是有限的,在SYN攻击时服务器会打开大量的半连接,分配TCB耗尽服务器的资源,使得正常的连接请求无法得到响应

查看系统最大半队列大小

sysctl -a|grep max_syn

或者 cat /proc/sys/net/ipv4/tcp_max_syn_backlog

查看系统当前半队列大小

ss -s   结果的 synrecv 0  或者 netstat -natp | grep SYN_RECV | wc -l

 查看 SYN队列是否有溢出

间隔执行下面命令,如果有持续大量递增则是溢出 netstat -s|grep  LISTEN

1.2 全连接队列

存放的是完成三次握手的连接,客户端回复 ACK, 并且服务端接收后,三次握手就完成了
连接会等待的应用取走,在被取走之前,它被放进 ACCEPT全连接队列

查看系统最大全连接队列大小

cat /proc/sys/net/core/somaxconn

长度由 net.core.somaxconn 和 应用程序使用 listen 函数时传入的参数,二者取最小值
默认为 128,表示最多有 129 的 ESTABLISHED 的连接等待accept

查看系统当前全连接队列大小

ss -lnt   如果是指定端口 可以用 ss -lnt |grep 80

# -l 显示正在Listener的socket
# -n 不解析服务名称
# -t 只显示tcp

state 在LISTEN 状态下
  Send-Q表示listen端口上的全连接队列最大为128
  Recv-Q为全连接队列当前使用了多少

2.ss命令浅析

Socket Statistics 是Linux中的一条网络工具命令,用于显示当前系统的各种网络连接状态,包括TCP、UDP以及Unix套接字等。相比netstat可以显示更多更详细的有关 TCP 和连接状态的信息。

本博文主要用来查看洪水攻击时,连接队列的情况。  

二、Linux服务器TCP洪水攻击入侵Demo(上)

2.1 TCP洪水攻击环境准备

机器准备:

机器A 部署Nginx 作为常规服务

阿里云服务需要关闭 syn_cookie ,即net.ipv4.tcp_syncookies = 0

vim /etc/sysctl.conf

修改完之后,需要执行 sysctl -p 配置才能生效。

docker部署nginx   docker run --name nginx-wnn -p 80:80 -d nginx:1.23.3

机器B安装hping3 ,模拟 SYN 攻击

准备hping3工具:hping3是一款开源的网络扫描和测试工具,可用于模拟tcp洪水攻击

hping3 命令安装

# 依赖库
yum -y install libpcap
yum -y install libpcap-devel
yum -y install tcl-devel

#安装
yum -y install hping3

使用hping3模拟tcp洪水攻击:通过hping3指令,向攻击目标发送大量tcp数据包,从而模拟tcp洪水攻击。

hping3 -S -p 80 --flood 112.74.xxx.xx
#-S是发送SYN数据包,-p是目标端口,112.74.xxx.xx是目标机器ip

现象:

攻击前 访问A机器的nginx成功
攻击时  机器A服务访问超时失败(使用谷歌浏览器开启隐身模式,或者 curl -v 地址)
查看内存占用率不高、CPU平均负载和使用率等比较低,CPU耗在 si 软中断 消耗时间比例升高

攻击后,转圈 无法访问

攻击之前地址是可以正常访问的,攻击之后 无法访问nginx

三、Linux服务器TCP洪水攻击入侵Demo(下)

3.1  入侵攻防分析实战

top查看cpu情况

查看内存占用率不高、CPU平均负载和使用率等比较低,CPU耗在 si 软中断 消耗时间比例升高

CPU主要用在软中断上,从进程列表上看到CPU 使用率最高的也是软中断进程 ksoftirqd

ksoftirqd是运行在Linux的进程,专门处理系统的软中断的,格式是 “ksoftirqd/CPU 编号
在多核服务器上每核都有一个ksoftirqd进程,经常看到ksoftirqd/0表示这是CPU0的软中断处理程序

所以软中断过多比较大可能导致问题,通过文件系统 /proc/softirqs 看是哪类下软中断导致
/proc/softirqs 提供了软中断的运行情况
/proc/interrupts 提供了硬中断的运行情况

命令  watch -d cat /proc/softirqs

说明:
  HI 高优先级软中断
  TIMER 表示定时器软中断,用于定时触发某些操作
  NET_TX 表示网络发送软中断,用于处理网络发送的数据包
  NET_RX 表示网络接收软中断,用于处理网络接收的数据包
  BLOCK 表示块设备软中断,用于处理磁盘读写请求。
  TASKLET:任务中断,用于处理任务的中断任务。
  SCHED 表示内核调度软中断
  HRTIMER:高精度定时器中断,用于处理高精度定时任务。
  RCU:Read-Copy Update中断,用于处理读写锁的内核操作。

现象:
几个指标都在变化中,但是NET_RX 是变化最多的
推断是网络接收软中断,用于处理网络接收的数据包 导致出现问题

分析网络流量 sar :

sar -n DEV 1 -h

#-n DEV 表示显示网络收发的报告,间隔 1 秒输出一组数据 -h人类可读方式

分析网卡数据包

eth0:接收的网络帧(包) PPS较大为179063, 而每秒收到的数据包大小BPS为9.2M(转为字节)
计算为:9.2 * 1024 * 1024 /179063 = 54字节,平均每个网络帧只有54字节,很小的网络帧是小包问题

3.2  继续抓包分析

tcpdump -i eth0 -n tcp port 80

对输出结果进行分析:

第一列:时分秒毫秒

第二列:网络协议 IP

第三列:发送方的ip地址

第四列:箭头 > 表示数据流向

第五列:接收方的ip地址

第六列:冒号

第七列:数据包内容,包括Flags 标识符,seq 号,ack 号,win 窗口,数据长度 length

更多标识符:使用 tcpdump 抓包后,会遇到的 TCP 报文 Flags,有以下几种:

[S] : SYN(开始连接)
[P] : PSH(推送数据)
[F] : FIN (结束连接)
[R] : RST(重置连接)
[.] : 没有 Flag (意思是除上面四种类型外的其他情况,有可能是 ACK 也有可能是 URG)

分析:

大部分数据都是从 112.xxx.xxx.8.43231 > 171.xx.xxx.9.http: Flags [S] ,数据包是SYN
确认是 SYN FLOOD 洪水攻击

四、TCP洪水攻击结果分析和解决方案Demo

4.1 洪水攻击结果现象

攻击中查看SYN半连接队列大小: 持续递增

netstat -natp | grep SYN_RECV | wc -l

攻击中查看SYN半连接队列是否有溢出

间隔执行下面命令,如果有持续大量递增则是溢出

netstat -s|grep  LISTEN

4.2 缓解TCP洪水攻击方案

一、开启tcp_cookie
vim /etc/sysctl.conf

net.ipv4.tcp_syncookies = 1

修改完之后,需要执行 sysctl -p 配置才能生效。

二、增大半连接队列和全连接队列
    半连接队列的最大长度不一定由 tcp_max_syn_backlog 值决定的
    测试发现服务端最多只有 256 个半连接队列而不是 1024,Linux 内核版本实现不一样,和somaxconn全连接队列也有关系
    增加半连接队列大小不能只增大 tcp_max_syn_backlog 的值,还要一同增大 somaxconn  即增大全连接队列

#增大 tcp_max_syn_backlog(半连接队列)
echo 2048 > /proc/sys/net/ipv4/tcp_max syn backlog

#增大 somaxconn(全连接队列)
echo 2048 > /proc/sys/net/core/somaxconn

三、减少 SYN+ACK 重传次数(减小tcp_synack_retries的值)

# 减少SYN+ACK 的重传次数为1,加快处于SYN_REVC 状态的 TCP 连接断开
echo 1 > /proc/sys/net/ipv4/tcp_synack_retries

4.3 现象和思路总结

当发现服务器或业务卡顿的时候,通过top命令来查看服务器负载和cpu使用率,然后排查cpu占用较高的进程

如果发现cpu使用率并不高,但是si软中断很高,且ksoftirqd进程cpu占用率高,则说明服务器持续发生软中断

通过cat /proc/softirqs 来分析是哪类型的软中断次数最多,watch命令来查看变化最快的值

多数情况下网络发生中断的情况会比较多,通过sar命令来查看收发包速率和收发包数据量

验证是否是网络收发包过多导致,计算每个包的大小,判断服务器是否收到了flood攻击

通过tcpdump来抓包,分析数据包来源ip和抓包数据中的Flags来分析数据包类型

如果是Flood洪水攻击,可以通过调整tcp链接参数策略和防火墙封禁异常ip

如果是大规模DDOS攻击,则花钱找运营商购买流量包封堵

DDOS攻击实操以及SSH免登录原理介绍:

你知道小伙伴们的阿里云服务为什么会被ru侵,是怎么ru侵的吗?_为什么redis部署到阿里云会被攻击_这是王姑娘的微博的博客-CSDN博客

TCP洪水攻击Ru侵和结果分析解决方案相关推荐

  1. TCP洪水攻击(SYN Flood)的诊断和处理

    TCP洪水攻击(SYN Flood)的诊断和处理 SYN Flood介绍 前段时间网站被攻击多次,其中最猛烈的就是TCP洪水攻击,即SYN Flood. SYN Flood是当前最流行的DoS(拒绝服 ...

  2. 当遭遇TCP洪水(SYN Flood)后的的诊断思路和处理过程

    转载来源 :当遭遇TCP洪水(SYN Flood)后的的诊断思路和处理过程 : http://www.safebase.cn/article-258753-1.html 摘要: SYN Flood介绍 ...

  3. linux洪水攻击软件,SYN洪水攻击工具hping SYN-Flooding tool

    这是SYN洪水攻击工具hping SYN-Flooding tool,是一個網路工具,可以用來測試firewall, 網路效能, 觀察遠端主機的回應狀態,包括TCP,UDP,ICMP. 软件介绍 前段 ...

  4. linux洪水攻击软件,Linux服务器下对SYN洪水攻击的诊断和阻挡

    1.简介SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,常用假冒的IP或IP号段发来海量的请 ...

  5. 对现有的所能找到的DDOS代码(攻击模块)做出一次分析----SYN(洪水攻击)篇

    对现有的所能找到的DDOS代码(攻击模块)做出一次分析----SYN(洪水攻击)篇 //======================================================== ...

  6. ddos中的tcp反射攻击技术分析

    我们常听说UDP反射攻击,那你听说过TCP反射攻击吗? 我们对TCP三次握手谙熟于心,但你确定服务器收到SYN包之后一定返回SYN/ACK吗? 现网的DDoS对抗中,基于TCP协议的反射攻击手法已经悄 ...

  7. Linux实战:awl-2.0工具模拟洪水攻击,建立大量的TCP连接

    实战:awl工具模拟洪水攻击,建立大量未完成第二次握手的TCP连接 基于TCP协议的数据传输,需要进行三次握手四次挥手才可以完成.每一次连接都会占用系统内存,直至连接关闭才会释放系统内存.在进行第一次 ...

  8. TCP三次握手之-awl工具-SYN洪水攻击

    文章目录 云盾数据 TCP三次握手 TCP报文段的头部格式 实战-使用tcpdump 抓包 tcpdump 常用参数 tcpdmp 抓包 awl -syn-洪水攻击 原理 实战 总结: 云盾数据 - ...

  9. 利用tcp三次握手,使用awl伪装MAC地址进行多线程SYN洪水攻击

    SYN洪水攻击概述: SYN洪水攻击主要源于: tcp协议的三次握手机制 tcp协议面向链接的协议 SYN洪水攻击的过程: 在服务端返回一个确认的SYN-ACK包的时候有个潜在的弊端,如果发起的客户是 ...

最新文章

  1. 投票系统之防止重复投票
  2. [architecture]-ARM SMMU学习概念总结一篇就够了
  3. pilt图像处理_图像处理 PIL
  4. 使用 Carla 和 Python 的自动驾驶汽车第 4 部分 —— 强化学习代理
  5. Python打卡第四周
  6. WPF之X名称空间学习
  7. 时序动作定位:Rethinking the Faster R-CNN Architecture for Temporal Action Localization(TAL-Net)
  8. 【学习笔记】函数高级使用技巧:建立函数队列
  9. 【Qt基础】2.Qt基础 窗口、资源、布局与控件
  10. PM2.5空气质量提醒实验
  11. 陈安之超级成功法则(1)
  12. 部署web项目在腾讯云当中
  13. unity拖拽UI生成Cube并跟随鼠标移动,放置点可放下
  14. 1009 说反话 (20分)
  15. Facebook、微软、谷歌三大研究巨头齐聚首,共同探讨人工智能发展现状和趋势
  16. 海信电视微助手怎么连接电脑连接网络连接服务器,海信智能电视连接手机的教程详解!...
  17. 混合硬盘计算机,混合固态硬盘
  18. 通过you-get下载bilibili视屏
  19. 5.4校招 实习 内推
  20. 应用网络电视机顶盒通过宽带网络代替数字电视

热门文章

  1. 结婚周年送媳妇什么好啊???
  2. 旅游行业开发小程序的优势
  3. 区块链前线@2019.2.18
  4. MySQL讲义第27讲——select 查询之自连接查询
  5. Modelsim SE 10.4a安装
  6. mysql常用命令orderby_常用mysql命令大全
  7. SpringMVC-应用(数据绑定-自定义类型转换器,数据的格式化,数据校验)
  8. 基于zxing的仿微信二维码扫描界面
  9. python用泰勒级数计算圆周率_利用泰勒级数加速计算
  10. 使用AlertDialog弹窗实现相机拍照或者从图库选取图片显示