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

2023-10-27

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

摘要: SYN Flood介绍前段时间网站被攻 击多次,其中最猛烈的就是TCP洪水攻击,即SYN Flood。SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,常用假冒的IP或IP号段发来海量的请求连接的第一个握手包(SYN包) …

TCP洪水(SYN Flood)介绍

1、 SYN Flood介绍

前段时间网站被攻 击多次,其中最猛烈的就是TCP洪水攻击,即SYN Flood。

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

详细的原理,网上有很多介绍,应对办法也很多,但大部分没什么效果,这里介绍我们是如何诊断和应对的。

2. 诊断

我们看到业务曲线大跌时,检查机器和DNS,发现只是对外的web机响应慢、CPU负载高、ssh登陆慢甚至有些机器登陆不上,检查系统syslog:

# tail -f /var/log/messages

Apr 18 11:21:56 web5 kernel: possible SYN flooding on port 80. 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 42349
CLOSE_WAIT 1
SYN_SENT 4
FIN_WAIT1 298
FIN_WAIT2 33
ESTABLISHED 12775
SYN_RECV 259
CLOSING 6
LAST_ACK 432

以上就是TCP洪水攻击的两大特征。执行netstat -na>指定文件,保留罪证。

3. 应急处理

根据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登陆不了服务器,并不是理想方式。

4. 使用F5挡攻击

应急处理毕竟太被动,因为本机房的F5比较空闲,运维利用F5来挡攻击,采用方式:让客户端先和F5三次握手,连接建立之后F5才转发到后端业务服务器。后来被攻击时F5上看到的现象:

  1. 连接数比平时多了500万,攻击停止后恢复。

  2. 修改F5上我们业务的VS模式后,F5的CPU消耗比平时多7%,攻击停止后恢复。

  3. 用F5挡效果明显,后来因攻击无效后,用户很少来攻击了,毕竟攻击也是有成本的。

  4. 调整系统参数挡攻击

没有F5这种高级且昂贵的设备怎么办?我测试过以下参数组合能明显减小影响,准备以后不用F5抗攻击。

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

不修改这个参数,模拟攻击,10秒后被攻击的80端口即无法服务,机器难以ssh登录; 用命令netstat -na |grep SYN_RECV检测“半连接”hold住180秒;

修改这个参数为0,再模拟攻击,持续10分钟后被攻击的80端口都可以服务,响应稍慢些而已,只是ssh有时也登录不上;检测“半连接”只hold住3秒即释放掉。

修改这个参数为0的副作用:网络状况很差时,如果对方没收到第二个握手包,可能连接服务器失败,但对于一般网站,用户刷新一次页面即可。这些可以在高峰期或网络状况不好时tcpdump抓包验证下。

根据以前的抓包经验,这种情况很少,但为了保险起见,可以只在被tcp洪水攻击时临时启用这个参数。

tcp_synack_retries默认为5,表示重发5次,每次等待30~40秒,即“半连接”默认hold住大约180秒。

之所以可以把tcp_synack_retries改为0,因为客户端还有tcp_syn_retries参数,默认是5,即使服务器端没有重发SYN+ACK包,客户端也会重发SYN握手包。

第二个参数 net.ipv4.tcp_max_syn_backlog = 200000也重要,具体多少数值受限于内存。

以下配置,第一段参数是最重要的,第二段参数是辅助的,其余参数是其他作用的:

# vi /etc/sysctl.conf

#最关键参数,默认为5,修改为0 表示不要重发
net.ipv4.tcp_synack_retries = 0

#半连接队列长度
net.ipv4.tcp_max_syn_backlog = 200000

#系统允许的文件句柄的最大数目,因为连接需要占用文件句柄
fs.file-max = 819200

#用来应对突发的大并发connect 请求
net.core.somaxconn = 65536
#最大的TCP 数据接收缓冲(字节)
net.core.rmem_max = 1024123000
 
#最大的TCP 数据发送缓冲(字节)
net.core.wmem_max = 16777216

#网络设备接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.netdev_max_backlog = 165536

#本机主动连接其他机器时的端口分配范围
net.ipv4.ip_local_port_range = 10000 65535

使配置生效:

# sysctl -p

root@ubuntu:~# sysctl -p
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_rmem = 32768
net.ipv4.tcp_wmem = 32768
net.ipv4.ip_local_port_range = 10000 65535
net.core.netdev_max_backlog = 165536
net.core.wmem_max = 16777216
net.core.rmem_max = 1024123000
net.core.somaxconn = 65536
fs.file-max = 819200
net.ipv4.tcp_synack_retries = 0
net.ipv4.tcp_max_syn_backlog = 200000

在这里插入图片描述
注意,以下参数面对外网时,不要打开。因为副作用很明显,具体原因请google,如果已打开请显式改为0,然后执行sysctl -p关闭。因为经过试验,大量TIME_WAIT状态的连接对系统没太大影响:

#当出现 半连接 队列溢出时向对方发送syncookies,调大 半连接 队列后没必要
net.ipv4.tcp_syncookies = 0

#TIME_WAIT状态的连接重用功能
net.ipv4.tcp_tw_reuse = 0

#时间戳选项,与前面net.ipv4.tcp_tw_reuse参数配合
net.ipv4.tcp_timestamps = 0

#TIME_WAIT状态的连接回收功能
net.ipv4.tcp_tw_recycle = 0

为了处理大量连接,还需改大另一个参数:

# vi /etc/security/limits.conf 

在底下添加一行表示允许每个用户都最大可打开409600个文件句柄(包括连接):

* - nofile 409600

基本防护策略就这些啦。

教你如何在Linux中防止SYN Flood攻击

SYN泛洪攻击(SYN Flood)是指使用不完善的TCP/IP三次握手,恶意发送大量只包含SYN握手序列的数据包的攻击方法。这种攻击方法可能会导致被攻击的计算机拒绝服务甚至崩溃,从而使潜在的连接占用大量的系统资源,无法完成三次手。

Iptables防火墙设置

如果您遭受SYN洪水攻击下的Linux服务器,您可以设置以下:

减少SYN-超时时间:

iptables -A FORWARD -p tcp –syn -m limit –limit 1/s -j ACCEPT
iptables -A INPUT -i eth0 -m limit –limit 1/sec –limit-burst 5 -j ACCEPT

每秒最多3个syn数据包

iptables -N syn-flood
iptables -A INPUT -p tcp –syn -j syn-flood
iptables -A syn-flood -p tcp –syn -m limit –limit 1/s –limit-burst 3 -j RETURN
iptables -A syn-flood -j REJECT

设置syncookies

sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.tcp_max_syn_backlog=3072
sysctl -w net.ipv4.tcp_synack_retries=0
sysctl -w net.ipv4.tcp_syn_retries=0
sysctl -w net.ipv4.conf.all.send_redirects=0
sysctl -w net.ipv4.conf.all.accept_redirects=0
sysctl -w net.ipv4.conf.all.forwarding=0
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1

防止ping命令

sysctl -w net.ipv4.icmp_echo_ignore_all=1

阻止特定的IP范围

iptables -A INPUT -s 192.168.5.1/8 -i eth0 -j Drop

参考链接 :

教你如何在Linux中防止SYN Flood攻击 : https://www.jianshu.com/p/f64d31702e64

当遭遇TCP洪水(SYN Flood)后的的诊断思路和处理过程 :https://www.toutiao.com/a6745251398679527949/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当遭遇TCP洪水(SYN Flood)后的的诊断思路和处理过程 的相关文章

  • Shadow Build 读取不到配置文件

    问题 使用阴影构建后 无法读取配置文件 方法 阴影构建在单独目录中搜索 普通构建在项目目录搜索
  • MySQL的安装与配置

    免安装版的Mysql MySQL关是一种关系数据库管理系统 所使用的 SQL 语言是用于访问数据库的最常用的标准化语言 其特点为体积小 速度快 总体拥有成本低 尤其是开放源码这一特点 在 Web应用方面 MySQL 是最好RDBMS Rel
  • C语言文件操作详解

    C语言文件操作详解 一 文件指针和流 1 文件指针 2 流 二 文件的打开与关闭 1 fopen与fclose函数 2 文件打开方式 3 实例演示 三 文件的顺序读写 一 fgetc与fputc函数 1 fgetc总述 2 fgetc使用实
  • UE4-材质自发光

    1 创建材质 选择无光照 将贴图及控制自发光强度参数逻辑连接完成 使用staticswitchparameter 节点进行判断是否开启自发光 2 设置完成后 在场景中选择自发光物体 细节面板找到光照 Lightmass 使用静态光照的自发光
  • Python 数据处理之散点图--matplotlib

    import matplotlib pyplot as plt plt rcParams font sans serif SimHei 解决中文显示问题 x values 1 2 3 4 5 y values 3000 4000 6000
  • 华为od机试 最大价值的矿堆 Java

    题目 我们规定 0表示空地 1表示银矿 2表示金矿 矿堆表示由相邻的金矿或银矿连接形成的地图 银矿价值是1 金矿价值是2 你的目标是找出地图中最大价值的矿堆 并且输出该矿堆的价值 示例1 输入 22220 00000 00000 01111
  • SeleniumLibrary4.5.0 关键字详解(五)

    SeleniumLibrary4 5 0 关键字详解 五 库版本 4 5 0 库范围 全局 命名参数 受支持 简介 SeleniumLibrary是Robot Framework的Web测试库 本文档说明了如何使用SeleniumLibra
  • 全基因组选择-GS的技术评估

    基因组选择的流程 GS一般包括以下步骤 图1 首先建立参考群体 reference population 参考群体中每个个体都有已知的表型和基因型 通过合适的统计模型可以估计出每个SNP或不同染色体片段的效应值 然后对候选群体 candid
  • Tomcat 弱口令 && 后台getshell漏洞

    漏洞编号 VUL 2021040008 爆发时间 2018 10 10 漏洞简介 Tomcat支持在后台部署war文件 可以直接将webshell部署到web目录下 其中 欲访问后台 需要对应用户有相应权限 影响版本 Tomcat8 x T
  • vue格式化时间戳

    js var articleContent new Vue el articleContent data articles Vue filter yearMonthTime function value value为13位的时间戳 func
  • SpringCloud LoadBalancer 新一代负载均衡器

    前言 工作中使用 OpenFeign 进行跨服务调用 最近发现线上经常会遇到请求失败 java net ConnectException Connection refused connect 复制代码 通过排查我们发现不是接口超时 而是有时
  • 【hadoop——Hive的安装和配置】保姆式教学

    目录 一 Hive的安装和配置 1 Hive并不是hadoop自带的组件 因此我们需要去下载hive 此次课我们使用hive 1 2 1版本 下载地址为 2 下载完成之后 安装包默认保存在下载文件夹中 解压安装包apache hive 1
  • 【LeetCode】7. 整数反转 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,

    7 整数反转 给你一个 32 位的有符号整数 x 返回将 x 中的数字部分反转后的结果 如果反转后整数超过 32 位的有符号整数的范围 2 31 2 31 1 就返回 0 假设环境不允许存储 64 位整数 有符号或无符号 示例 1 输入 x
  • HTML5_京东首页样式

    通用样式 去掉边框 里面的东西不会乱 页头 头部样式 header background f7f7f7 header gt header inner height 32px header gt header inner gt lf line
  • 架构师学习--组件化开发之APT使用及JavaPoet

    一 概念及作用 什么是APT 全称是Annotation Processing Tool 翻译过来就是注解处理工具 它的作用就是可以在代码编译期间对注解进行处理 并且生成Java文件 减少手动的代码输入 因此它能够使我们编写的代码更加优雅
  • IOday1

    附加题 带注册功能的账号密码输入 include
  • 记一次生产请求耗时的问题

    最近发现lb上记录的request time比upstream response time大的比较多 例如upstream response time记录是0 062 request time记录的就是5 064等等 整个耗时很反常 而且出
  • libgdx 环境搭建

    libgdx 环境搭建 分类 Android 2012 12 13 23 40 13994人阅读 评论 0 收藏 举报 一 开发包下载 1 libgdx 开发包下载 google code 最新 libgdx 0 9 7 zip 2012
  • Unity UI或3d模型的动画控制(Animation类)

    文章目录 Animation动画控制类 一 动画设置 二 模型的动作选择 三 关键方法 四 实践展示 五 控制模型移动 Animation动画控制类 在Unity中 我们可以使用2D的Spine动画来制作核心战斗模块 当然也能用3D模型来制
  • 计算机二级C语言题库(60套真题+刷题软件)2023年9月份新题第二套

    刷题软件 文末有联系方式 1 在数据库的三级模式中 外模式 用户模式或子模式 A 只有3个 B 只有2个 C 可以有任意多个 D 只有1个 本题考查的知识点是数据库设计基础 外模式也称子模式或用户模式 它是用户的数据视图 也就是用户所见到的

随机推荐

  • 酒链区块链骗局

    区块链到底有什么价值 区块链技术被称为价值互联网 大体上原因在于它解决了原有互联网的三个基本问题 第一 区块链通过在数字货币领域的应用 提供了资金流 或者叫资本流 信息在互联网的流动的解决方案 第二 区块链通过加密和分布式账本的引用 解决了
  • 阿里云物联网平台MQTT教程

    之前一直使用的中移物联网ONENET平台的MQTT的功能 由于阿里云平台的MQTT功能支持SSL 所以使用了一下阿里云平台 创建产品和设备 首先肯定是进入阿里云官网 并搜索物联网平台 点击物联网平台控制台 注意不是飞燕平台 点击创建产品 选
  • 设定嵌入式linux系统的用户名和密码

    遇到一个问题 板子上电后 串口可以正常输入命令行 而且不需要密码 用户名就是root 因为没有设置密码 但是SSH登录时用户名输入root 密码直接敲回车键也就是不输入密码竟然是错误的 于是想到了一个办法 修改板子上root的密码 设定开发
  • PT学习(一)搭建小型局域网

    路由器 VLAN 192 168 20 1 IP1 192 168 1 1 IP2 192 168 2 1 一 目标 二 直通线连接 三 192 168 1 1 1 Set路由器Fa0 0 IP 192 168 1 1 子网掩码 255 2
  • C++基础之随机数函数 猜数字小游戏 生成1-100之间的随机数

    include
  • 软件测试/测试开发丨ChatGPT:带你进入智能对话的新时代

    简介 人工智能时代来临 我们正处于AI的iPhone时刻 黄仁勋 英伟达CEO ChatGPT 好得有点可怕了 我们距离危险的强人工智能不远了 马斯克 Tesla SpaceX Twitter CEO 以上的内容说明我们现在正处于一个技术大
  • 新疆计算机应用能力考试,新疆维吾尔自治区中等职业学校计算机应用能力等级考试sual Basic语言程序设计机试试卷(A卷)...

    内容简介 新疆维吾尔自治区中等职业学校计算机应用能力等级考试Visual Basic语言程序设计机试试卷 A卷 考试时间90分钟 满分100分 上机考试考生环境的建立 1 查看考试环境 考生在考试机上打开 我的电脑 可以看到已经映射好的T
  • Cisco Packet Tracer安装

    思科模拟器 Cisco Packet Tracer 安装步骤 一 下载思科 Cisco Packet Tracer 6 2 网络模拟器正式版软件包 下载完成后得到zip格式的压缩包 鼠标右键点击压缩包选择解压到当前文件夹 进入文件夹 双击C
  • Git安装步骤嗷,详细到每一步

    下载Git安装包 Git 下载 安装总结 一路默认 文件路径可以换 但必须是全英文路径 要是担心有问题 可以参考以下步骤 第一步 双击打开安装包后 会看见如下界面 第二步 这里 可以修改路径 但是一定要是一个全英文路径 且为空文件夹 第三步
  • 线性模型出现非正定矩阵的问题解释

    常常在Mplus中求解线性结构方程的时候出现 如下警告 WARNING THE LATENT VARIABLE COVARIANCE MATRIX PSI IS NOT POSITIVE 1 背景 大约不少人找了很多书籍 要么一笔带过 要么
  • 数据挖掘算法【java】(包括Apriori、FPTree、ID3、贝叶斯算法、k-means算法、AGNES )

    文章目录 Apriori FPTree算法 ID3算法 贝叶斯算法 k means算法 AGNES 凝聚的层次聚类算法 Apriori 说明 main方法中的变量data表示数据 每个数据之间使用逗号分隔 每行数据结尾使用 n表换行 以下两
  • 流量显示服务器异常,怀疑服务器存在异常流量排查日记,使用ifconfig,nethogs等命令...

    怀疑服务器存在异常流量排查日记 一 用ifconfig查看网卡流量 root AP ifconfig eth4 Link encap Ethernet HWaddr 00 50 56 0A A6 E9 inet addr 192 168 1
  • 再探默认构造函数

    今天使用派生类时又发现了一个问题 基类和派生类的代码如下 class Base public Base int a class Derived public Base public Derived 结果在编译时Derived类报错 erro
  • 5G,上天了!卫星和基站擦出了火花?

    大家好 我是无线深海 我们好久不见 本期我们来聊聊卫星通信 以及卫星通信和地面通信的融合 非地面网络的故事 对于5G来说 这可能只是后半场的锦上添花 但对仍处于畅想中的6G来说 空天地海一体化通信则是待征服的星辰大海 那么 这就开始咯 为什
  • Wireshark

    Wireshark是一个网络协议分析器 早期称为Ethereal 它能够捕获网络数据包并对数据包进行详细的解析 Wireshark可用于捕获和分析几乎所有类型的网络流量 包括以太网 无线网络 蓝牙 USB等等 除了对网络数据包的捕获和解析
  • Java的main方法

    文章目录 引言 一 写法 二 解释 三 运行 参考 引言 写Java代码时 最常用到main方法的场景是运行类中的某一个方法 进行测试 本文简单介绍一下Java的main方法 一 写法 固定写法如下 public static void m
  • wsl之linux QT 安装

    目标 QT 程序能在WSL linux 下面正常使用 上文已经写过如何在win10 下面安装 今天继续 把这阶段工作做完 命令行安装QTCREATOR 注意 要先update 否则build essential装不了 sudo apt ge
  • 运放笔记---“唐老师讲电赛”(一) 运放供电、去耦与PCB设计

    运放供电 去耦与PCB设计 运放参数 1 供电电压Vs 1 所有的运放都可以用单电源供电 没有例外 所有的运放又都可以用双电源供电 没有例外 有些运放供电电压可能高达 600V 而有些运放的供电电压可能最高只能是 3V 使用运放前一定要仔细
  • 数据结构之单向链表类(C++实现)

    Definition h 链表节点定义 typedef struct ListNode ListNode next int data ListNode List h include
  • 当遭遇TCP洪水(SYN Flood)后的的诊断思路和处理过程

    转载来源 当遭遇TCP洪水 SYN Flood 后的的诊断思路和处理过程 http www safebase cn article 258753 1 html 摘要 SYN Flood介绍前段时间网站被攻 击多次 其中最猛烈的就是TCP洪水