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

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

在信息安全领域,拒绝服务攻击(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实现快速批量文件重命名攻略!



http://www.kler.cn/news/360997.html

相关文章:

  • blender分离含有多个动作的模型,并导出含有材质的fbx模型
  • 软件分享丨火绒应用商店
  • 【C++指南】类和对象(四):类的默认成员函数——全面剖析 : 拷贝构造函数
  • Leetcode 1857. 有向图中最大颜色值
  • Harmony OS 开发之ArkTS语言基础-类、接口、继承、模块、泛型
  • Vue Data UI——Vue 3 数据可视化组件库
  • 什么是堡垒机 ?
  • Nodes 节点
  • 时间序列预测(六)——循环神经网络(RNN)
  • 07 实战:视频捕获
  • 【系统架构设计师】专题:嵌入式系统考点梳理
  • 排序(1)
  • git的学习使用(认识工作区,暂存区,版本区。添加文件的方法)
  • RabbitMQ异常
  • PyTorch模型转换ONNX 入门
  • 24下河南秋季教资认定保姆级教程
  • 【YOLO系列】YOLO11原理和深入解析——待完善
  • 《深度学习》Dlib 人脸应用实例 性别年龄预测 案例实现
  • 传输层协议UDP详解
  • 【OpenGauss源码学习 —— (VecSortAgg)】