当前位置: 首页 > news >正文

案例分析:拒绝服务攻击引发的网络调优之旅

在信息安全领域,拒绝服务攻击(DoS)与分布式拒绝服务攻击(DDoS)已成为企业面临的重要挑战之一。这些类型的攻击不仅能够导致服务中断,还可能对公司的声誉及财务状况产生不利影响。本文旨在通过一个案例来深入探讨一次拒绝服务攻击背后的原因、它所带来的具体影响以及由此触发的一系列网络优化措施。希望通过这种方式,我们可以更好地理解如何预防和应对这类安全威胁。

复现环境搭建

在欧拉操作系统环境下,我们将采用Docker容器化技术对Nginx服务进行部署,以此来模拟实际生产环境中的业务系统运行状态。

docker run -itd --name=nginx --network=host nginx:1.27.1

随后,利用一台Kali Linux主机发起模拟请求。

hping3 -S -P -i u10 192.168.31.105
  • -S:参数表示设置TCP协议的SYN

  • -p: 表示目的端口

  • -i:表示每隔10ms发送一个网络帧

案例现象

在Kali Linux主机发起模拟请求之后,目标业务服务器(IP地址:192.168.31.105)的命令执行效率以及系统资源访问速度显著下降。

使用sar查看CPU占用

sar -n -DEV 1

采用sar命令,以1秒为时间间隔,对每秒收发的报文数(PPS)及每秒传输的字节数(BPS)进行监控。如下图所示:

使用tcpdump抓包

我们将采用tcpdump工具进行深入调查。在受影响服务器的终端上执行如下tcpdump -i ens18 port 89命令后,通过观察到的Flags[S]标志,可以确认这些都是SYN(同步序列编号)请求包。大量此类SYN包的存在强烈指示了一次正在进行中的SYN Flood攻击。

使用netstat命令检查连接状态。

通过执行如下命令,发现大量的SYN_RECV状态的连接,如下图所示:

netstat -n -p | grep SYN_REC

什么是SYN Flood

SYN Flood 是一种常见的拒绝服务(DoS)攻击,利用 TCP 连接建立的过程中的弱点进行攻击。TCP 协议在建立连接时使用三次握手(Three-Way Handshake)过程,其中涉及到 SYN(同步)和 ACK(确认)标志位。

三次握手

  1. 客户端向服务器发送一个SYN包,请求建立连接。
  2. 服务器响应一个SYN+ACK包,表示同意建立连接。
  3. 客户端再发送一个ACK包,完成连接建立。

三次握手

SYNFlood

  • 攻击者向目标服务器发送大量的 SYN 请求包,但不完成后续的ACK步骤。
  • 服务器在收到每个SYN请求后,都会分配资源并保留一个半打开的连接,等待客户端的ACK。
  • 当攻击者发送大量的SYN请求时,服务器的连接表会迅速填满,导致合法用户的连接请求被拒绝。

解决方案

优化内核参数

为了提高系统抵御SYN Flood攻击的能力,可以通过调整TCP内核参数来优化网络设置。以下是一些关键参数和优化建议:

  • net.ipv4.tcp_syncookies
    启用SYN Cookies。启用后,服务器在遭遇SYN Flood时,可以通过生成SYN Cookie来保护连接表。
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
  • net.ipv4.tcp_max_syn_backlog
    增加半连接队列的大小,以容纳更多的半打开连接。默认的半连接容量只有256
echo 81920 > /proc/sys/net/ipv4/tcp_max_syn_backlog
  • net.core.somaxconn
    增加TCP监听队列的大小,以提高连接接受能力。默认值是4096
echo 5120 > /proc/sys/net/core/somaxconn
  • net.ipv4.tcp_fin_timeout
    减少TCP连接在FIN_WAIT状态下的超时时间,释放资源。默认是60S
echo 15 > /proc/sys/net/ipv4/tcp_fin_timeout
  • net.ipv4.tcp_tw_reuse
    允许重用TIME_WAIT状态的连接,以提高连接复用率。默认值是2
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
  • net.ipv4.tcp_synack_retries

对于远端的连接请求SYN,内核会发送SYN+ACK数据包,以确认收到上一个SYN连接请求包。这是所谓的三次握手机制的第二个步骤。这里决定内核再放弃之前所发送出的SYN+ACK数目。不应该大于255,默认值是5,对应于180秒左右时间。

echo 1 > /proc/sys/net/ipv4/tcp_synack_retries

要使这些更改在重启后生效,可以将参数添加到 /etc/sysctl.conf 文件中:

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 81920
net.core.somaxconn = 5120
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_synack_retries = 1

然后运行以下命令以应用更改:

sudo sysctl -p

防火墙配置

结合内核参数优化,可以使用防火墙(如 iptablesnftables)来限制SYN请求的数量。例如,可以限制每个IP地址的连接速率:

iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 5 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP

结论

SYNFlood攻击是利用 TCP连接建立过程中的缺陷进行的一种常见攻击方式 。通过调整TCP内核参数和结合防火墙策略,可以有效提高系统抵御SYN Flood攻击的能力,确保网络服务的稳定性和可用性。

推荐阅读


  • 忘记密码?一招教你轻松重设欧拉系统密码!

  • 从监控到优化:掌握磁盘I/O性能工具的使用

  • 超越top!探索htop在Linux系统监控中的超强功能

  • 网络架构大解析:这五种拓扑结构将改变你对网络的认知!

  • 掌握Linux性能监控神器:atop实用指南

  • 告别繁琐操作,掌握一线工作中的Shell脚本绝招!

  • 重磅消息:utools工具插件现在完全免费,快来享受!

  • 不可错过!字节跳动打造的最新生产力工具来了

  • 提升效率必备!学习awk命令,轻松搞定数据

  • 高效传输秘籍,揭秘Rsync和SCP的优劣,助你做出明智选择!

  • 当你拥有一台云服务器,你最想做的事情是啥?

  • IP地址乱成一团?用Shell一键搞定!

  • Nginx日志分析:编写Shell脚本进行全面日志统计

  • 如何用find命令按文件大小快速查找并美化输出显示

  • 不再担心数据丢失:用rsync打造你的自动化备份解决方案

  • 从繁琐到简单:Python实现快速批量文件重命名攻略!


相关文章:

案例分析:拒绝服务攻击引发的网络调优之旅

在信息安全领域,拒绝服务攻击(DoS)与分布式拒绝服务攻击(DDoS)已成为企业面临的重要挑战之一。这些类型的攻击不仅能够导致服务中断,还可能对公司的声誉及财务状况产生不利影响。本文旨在通过一个案例来深入…...

Spring Boot Web框架:智慧社区设计新思路

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…...

从 Hadoop 迁移到数据 Lakehouse 的架构师指南

从 Hadoop 到数据湖仓一体架构的演变代表了数据基础架构的重大飞跃。虽然 Hadoop 曾经以其强大的批处理能力统治着大数据领域,但如今的组织正在寻求更敏捷、更具成本效益和现代化的解决方案。尤其是当他们越来越多地开始实施 AI 计划时。根本没有办法让 Hadoop 为 A…...

Python基础——类与对象

类与对象的理解: 在程序中我们将类看作是设计图纸,对象则是根据这个图纸生产的产品。面向对象编程就是使用对象编程,在类中我们定义成员属性和方法。 来看下面这个例子,创建student类,定义对象并对属性赋值。 class S…...

知乎广告怎么做?知乎种树推广怎么收费?

作为国内领先的知识分享平台,知乎以其高质量的内容和精准的用户群体,成为了品牌营销的新蓝海。云衔科技正式推出知乎信息流广告和知广告开户及代运营服务,旨在为企业提供一站式的营销解决方案。 一、知乎广告怎么做? 1.明确广告…...

【设计模式】Python 设计模式之建造者模式(Builder Pattern)详解

Python 设计模式之建造者模式(Builder Pattern)详解 在软件开发中,创建复杂对象往往需要多个步骤,而这些步骤之间的顺序、配置可能有多种变化。为了解决这个问题,建造者模式(Builder Pattern)应…...

微软常用运行库合集 Microsoft Visual C++ Redistributable 2023.11.13

微软常用系统运行库 Microsoft Visual C Redistributable(简称:MSVC,VB/VC,系统运行库)是Windows操作系统应用程序的基础类型库组件。此版微软常用运行库合集整合Visual C 组件安装包运行库所有版本,提供图…...

[机器视觉]basler相机使用SN编号打开相机和采集

背景分析 在项目中是用basler相机采图时,一般用的比较多的遍历相机,然后使用CreateFirstDevice这个函数获取相机,有些时候可能需要同时连接多个相机,这里一般是遍历后,再循环打开相机,根据打开相机的SN号确…...

C#使用实体类Entity Framework Core操作mysql入门:从数据库反向生成模型2 处理连接字符串

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...

Go语言基础学习(Go安装配置、基础语法)·

一、简介及安装教程 1、为什么学习Go? 简单好记的关键词和语法;更高的效率;生态强大;语法检查严格,安全性高;严格的依赖管理, go mod 命令;强大的编译检查、严格的编码规范和完整的…...

高德开放平台API调用实战指南

本文 一、地图展示1.1 地图初始化与展示1.2 自定义标记 二、路线规划2.1 驾车路线规划2.2 步行路线规划 三、定位服务3.1 使用JavaScript API进行定位3.2 IP定位 四、实时交通信息查询4.1 获取实时交通路况 五、智能调度引擎总结 一、地图展示 地图展示是开发基于地理信息系统…...

文档太大LLM处理不过来?这10种LangChain分割技术帮你搞定!

前言 RAG(检索增强生成)是一种创建基于大语言模型(LLM)应用的高效方式。它有助于生成对用户查询的准确回答。为了创建一个基于 RAG 的应用程序,我们需要执行一些操作,例如文档加载、将大文档拆分为多个小块…...

TikTok广告账号被封?常见原因及解决方法分享

TikTok广告投放往往会给我们的账号带来高效曝光和精准流量,但同时许多用户也面临着一个困扰——广告账号被封禁的问题。将在此文一起商讨TikTok广告账号被封禁的原因,分析平台的具体规定,提供解决问题的应对策略,帮助大家有效规避…...

maven聚合ssm

如果没有写过ssm项目请移步SSM后端框架搭建(有图有真相)-CSDN博客 数据库准备 create table user (id int (11),uid varchar (60),name varchar (60),age int (11),sex varchar (12) ); insert into user (id, uid, name, age, sex) values(10,202409…...

网络通信与并发编程(二)基于tcp的套接字、基于udp的套接字、粘包现象

基于tcp的套接字 文章目录 基于tcp的套接字一、套接字的工作流程二、基于tcp的套接字通信三、基于udp的套接字通信四、粘包现象 一、套接字的工作流程 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个…...

400行程序写一个实时操作系统(十):用面向对象思想构建抢占式内核

前言 通过前几章的学习,我们学会了如何为RTOS设计一个合理的内存管理算法。现在,是时候学习设计RTOS内核了。 关于RTOS内核的文章也有很多,但都有一点先射箭再化靶子的意味。要么是代码连篇解释却寥寥无几,要么是要先怎么样再怎么…...

C#学习笔记(九)

C#学习笔记(九) 第六章 面向对象编程(一)类与对象、字段与属性一、类与对象正确的理解1. 什么是类?2.什么是对象?3. 类与对象的区别 二、类的基本规范和对象使用1. 类的规范 三、类的访问修饰符&#xff08…...

意外发现!AI写作这样用,热点文章轻松超越同行90%!

做自媒体,写热点文章很重要。 热点自带流量,能很快吸引不少读者。 可很多自媒体新手很犯愁。 干货文还能勉强写出来,碰到热点文就不知咋办了。 为啥写热点文章这么难呢? 关键是得找个新颖角度切入。 要是只在网上反复复制粘贴那些…...

WPF常见容器全方位介绍

Windows Presentation Foundation (WPF) 是微软的一种用于构建Windows桌面应用程序的UI框架。WPF的布局系统基于容器,帮助开发者以灵活、响应的方式组织用户界面 (UI) 元素。本篇文章将详细介绍WPF中几种常见的容器,包括Grid、StackPanel、WrapPanel、Do…...

重置时把el-tree树节点选中状态取消

要重置 Element UI 的 el-tree 组件并取消所有节点的选中状态,可以通过以下几种方法: 使用 setCheckedKeys 方法: 如果你的树配置了 node-key 属性,可以使用 setCheckedKeys 方法来清空所有选中的节点。 this.$refs.tree.setCheck…...

云计算——弹性云计算器(ECS)

弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂&#xff…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

Bean 作用域有哪些?如何答出技术深度?

导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答&#xff0c…...