您的位置: 新闻资讯 > 行业动态 > 正文

CentOS 服务器的隐形护盾:用脚本揪出DDoS攻击(图文)


来源:mozhe 2025-03-05

网络世界的 “暗箭”:DDoS 攻击



在网络技术飞速发展的今天,我们的生活越来越依赖于各种网络服务。但网络世界并非绝对安全,各种威胁如影随形,其中 DDoS 攻击就是一个令人头疼的问题。
大家是否还记得,某知名游戏在举办重要活动期间,大量玩家涌入服务器,本应是热闹非凡的场景,却突然出现服务器崩溃,玩家纷纷掉线,无法登录游戏的情况。这让满怀期待的玩家们大失所望,游戏官方也遭受了巨大的损失。后来调查发现,罪魁祸首竟是 DDoS 攻击。攻击者通过控制大量的 “僵尸主机”,向游戏服务器发送海量的请求,导致服务器不堪重负,无法正常为玩家提供服务。
DDoS,全称 Distributed Denial of Service,即分布式拒绝服务攻击 。它就像一场有组织的网络 “暴动”,攻击者利用多个计算机或设备联合起来,向目标服务器发起攻击,使目标服务器的资源被大量占用,无法响应正常的用户请求,最终导致服务中断。这种攻击的危害不容小觑,它不仅会使企业的业务无法正常开展,造成巨大的经济损失,还会损害企业的品牌形象,让用户对其失去信任。比如电商平台在大促期间遭受 DDoS 攻击,导致用户无法下单,销售额大幅下降,同时也会让用户对该平台的稳定性产生质疑,从而转向其他竞争对手。
常见的 DDoS 攻击类型丰富多样。流量型攻击中,UDP 洪水攻击会向目标主机发送大量 UDP 数据包,这些数据包是随机发送的,目标主机往往找不到对应的应用来处理,只能不断返回错误信息,最终导致系统资源耗尽,无法正常提供服务;ICMP 洪水攻击则是攻击者通过向目标主机发送大量的 ICMP Echo Request(ping)数据包,使得目标主机疲于回应这些恶意请求,而无法响应正常的业务请求 。协议型攻击里,SYN 洪水攻击是攻击者向目标主机发送大量的 SYN 请求包,但并不完成完整的 TCP 三次握手步骤,导致目标主机必须为每个请求分配一定的资源等待回应,当大量的半连接请求堆积时,就会耗尽目标主机的连接资源,导致正常的连接请求无法被处理;HTTP 洪水攻击主要针对 Web 应用,攻击者通过大量的 HTTP 请求来消耗 Web 服务器的资源,比如发送海量的 GET 或 POST 请求,使服务器忙于处理这些请求而无法响应正常用户的访问,还有一种 HTTP 慢速攻击,攻击者以较低的频率发送请求,保持连接但不完成请求,长时间地占用服务器资源,导致服务器并发连接数被耗尽 。应用型 DDoS 攻击中,DNS 放大攻击是攻击者通过伪造源 IP 地址为目标主机的查询请求,向 DNS 服务器发送大量的查询请求,DNS 服务器在接收到请求后,会向被伪造的目标 IP 地址发送大量的响应数据包,这些 DNS 响应数据包的流量远远大于请求数据包,从而实现对目标主机的流量放大攻击;CC 攻击(ChallengeCollapsarAttack)是攻击者通过控制大量的傀儡机,模拟正常用户的访问行为,向目标网站的动态页面发送大量请求,这些请求通常会消耗大量的服务器资源,如数据库查询、CPU 计算等,由于 CC 攻击模拟的是正常用户行为,传统的防火墙等防护设备难以有效识别和拦截。
面对如此猖獗的 DDoS 攻击,我们必须提高警惕,采取有效的防范措施。在下文中,我们将深入探讨如何利用 Centos 脚本发现 DDoS 攻击,为我们的网络安全保驾护航。

脚本登场:CentOS 与 DDoS 的较量


前期准备:工欲善其事,必先利其器


在 CentOS 服务器上进行 DDoS 攻击检测脚本的编写与操作,就如同一场精密的手术,而具备 root 权限便是这场手术的 “手术刀”,它赋予我们对服务器各项关键配置和文件进行深度操作的能力。只有拥有 root 权限,我们才能顺利地执行后续的一系列操作,对系统资源进行调配,查看和修改网络相关的配置文件等。
同时,一些必要工具的安装也至关重要,netstat 便是其中之一。netstat 是一个强大的网络工具,它就像是网络世界的 “侦察兵”,能够获取网络连接、路由表、网络接口等各种详细信息。通过它,我们可以查看服务器当前的网络连接状态,哪些 IP 正在与服务器进行通信,以及这些连接所使用的端口等信息 。而 awk 则是数据处理的 “魔法师”,它能够对文本数据进行灵活的处理和分析。在处理 netstat 获取的大量网络连接信息时,awk 可以帮助我们快速提取出关键数据,比如只筛选出特定 IP 或端口的连接信息 。还有 sort 和 uniq 工具,sort 用于对数据进行排序,uniq 则用于去除重复的数据。在分析网络连接数据时,我们可以先使用 sort 对 IP 地址进行排序,然后再用 uniq 统计每个 IP 地址出现的次数,这样就能方便地找出连接数异常的 IP 地址 。
在 CentOS 7 系统中,如果要安装 netstat 工具,可以使用以下命令:

 
sudo yum install net-tools
在 CentOS 8 及以上版本中,由于 yum 逐渐被 dnf 替代,安装命令则变为:

 
sudo dnf install net-tools
安装完成后,就可以在终端中使用 netstat 命令了。例如,查看所有活动的 TCP 连接和监听的 TCP 端口,可以执行:

 
netstat -tuln

编写核心脚本:火眼金睛识攻击


接下来,我们正式编写用于发现 DDoS 攻击的脚本,这个脚本就像是网络世界的 “守护者”,时刻警惕着 DDoS 攻击的出现。

 
#!/bin/bash
# 定义日志文件路径
LOG_FILE="/var/log/ddos_detection.log"
# 获取当前时间
CURRENT_TIME=$(date +"%Y-%m-%d %H:%M:%S")
# 使用netstat命令获取TCP连接信息,提取源IP地址,统计每个IP的连接数并按连接数降序排列
CONNECTION_INFO=$(netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr)
# 设置连接数阈值,超过该阈值则认为可能是DDoS攻击
THRESHOLD=100
while read COUNT IP; do
if [ $COUNT -gt $THRESHOLD ]; then
echo "$CURRENT_TIME: 疑似DDoS攻击,IP: $IP,连接数: $COUNT" | tee -a $LOG_FILE
fi
done <<< "$CONNECTION_INFO"
下面逐行解释这个脚本的含义:
  • #!/bin/bash:这是脚本的声明,指定使用 bash 解释器来执行脚本。
  • LOG_FILE="/var/log/ddos_detection.log":定义日志文件的路径,将检测到的疑似 DDoS 攻击信息记录到这个文件中。
  • CURRENT_TIME=$(date +"%Y-%m-%d %H:%M:%S"):获取当前的时间,精确到秒,用于记录攻击发生的时间。
  • CONNECTION_INFO=$(netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr):这一行是脚本的核心数据获取部分。首先,netstat -ntu命令用于获取所有的 TCP 和 UDP 网络连接信息;awk '{print $5}'提取每行数据的第五个字段,这个字段包含了源 IP 和端口信息;cut -d: -f1通过冒号分隔,提取出源 IP 地址;sort对 IP 地址进行排序;uniq -c统计每个 IP 地址出现的次数;最后sort -nr按连接数降序排列 。
  • THRESHOLD=100:设置连接数的阈值为 100,当某个 IP 的连接数超过这个阈值时,就可能是 DDoS 攻击。
  • while read COUNT IP; do... done <<< "$CONNECTION_INFO":通过循环读取CONNECTION_INFO中的每一行数据,将连接数和 IP 地址分别赋值给COUNT和IP变量。
  • if [ $COUNT -gt $THRESHOLD ]; then... fi:判断当前 IP 的连接数是否超过阈值,如果超过,则将疑似 DDoS 攻击的信息输出到终端并追加到日志文件中 。

优化与完善:让脚本更智能


为了让这个脚本更加智能和实用,我们可以进行一些优化。首先是设置合理的阈值。阈值的设置需要根据服务器的实际负载情况来调整,如果设置过低,可能会产生误报,将正常的高并发访问误判为 DDoS 攻击;如果设置过高,则可能无法及时发现真正的 DDoS 攻击。比如,对于一个小型网站服务器,平时的并发连接数可能在几十左右,那么将阈值设置为 100 是比较合理的;但对于一个大型电商平台的服务器,在促销活动期间,正常的并发连接数可能会达到数千甚至上万,这时就需要将阈值相应地提高 。
其次,添加日志记录功能。我们已经在脚本中定义了日志文件路径,将疑似 DDoS 攻击的信息记录到日志文件中。为了更好地分析攻击情况,我们可以在日志中记录更多的信息,比如被攻击的端口、攻击持续的时间等。可以修改脚本如下:

 
#!/bin/bash
# 定义日志文件路径
LOG_FILE="/var/log/ddos_detection.log"
# 获取当前时间
CURRENT_TIME=$(date +"%Y-%m-%d %H:%M:%S")
# 使用netstat命令获取TCP连接信息,提取源IP地址,统计每个IP的连接数并按连接数降序排列
CONNECTION_INFO=$(netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr)
# 设置连接数阈值,超过该阈值则认为可能是DDoS攻击
THRESHOLD=100
# 记录攻击开始时间
ATTACK_START_TIME=""
while read COUNT IP; do
if [ $COUNT -gt $THRESHOLD ]; then
if [ -z "$ATTACK_START_TIME" ]; then
ATTACK_START_TIME=$CURRENT_TIME
fi
# 获取被攻击的端口
ATTACKED_PORT=$(netstat -ntu | grep $IP | awk '{print $4}' | cut -d: -f2 | head -1)
echo "$CURRENT_TIME: 疑似DDoS攻击,IP: $IP,连接数: $COUNT,被攻击端口: $ATTACKED_PORT" | tee -a $LOG_FILE
else
if [ -n "$ATTACK_START_TIME" ]; then
ATTACK_END_TIME=$CURRENT_TIME
echo "$ATTACK_START_TIME - $ATTACK_END_TIME: DDoS攻击结束,IP: $IP" | tee -a $LOG_FILE
ATTACK_START_TIME=""
fi
fi
done <<< "$CONNECTION_INFO"
在这个优化后的脚本中,我们添加了ATTACK_START_TIME和ATTACK_END_TIME变量来记录攻击的开始和结束时间。当检测到疑似攻击时,如果ATTACK_START_TIME为空,则记录当前时间作为攻击开始时间;当连接数低于阈值时,如果ATTACK_START_TIME不为空,则记录当前时间作为攻击结束时间,并将攻击的起止时间和 IP 地址记录到日志中 。同时,通过netstat -ntu | grep $IP | awk '{print $4}' | cut -d: -f2 | head -1命令获取被攻击的端口信息并记录到日志中 。这样,我们在后续分析日志时,就能更加全面地了解 DDoS 攻击的情况,为采取有效的防御措施提供更有力的支持 。

实战演练:脚本大显身手

模拟攻击:营造 “危机” 场景


为了更直观地展示我们编写的脚本在检测 DDoS 攻击时的强大作用,我们先来模拟一场 DDoS 攻击场景。在这里,我们选用 Hping3 工具来模拟攻击行为。Hping3 是一款功能强大的网络测试工具,它能够灵活地构造各种类型的网络数据包,非常适合用于模拟 DDoS 攻击 。
首先,确保我们已经在攻击源主机上安装了 Hping3。在 Linux 系统中,可以使用以下命令进行安装(以 Debian 或 Ubuntu 系统为例):

 
sudo apt install hping3
安装完成后,我们就可以使用 Hping3 来模拟攻击了。假设我们的目标服务器 IP 为 192.168.1.100,我们执行以下命令来模拟 SYN 洪水攻击:

 
sudo hping3 --flood -S -p 80 192.168.1.100
在这个命令中,--flood参数表示以最快的速度发送数据包,-S表示发送 SYN 数据包,-p 80指定目标端口为 80,即 Web 服务常用的端口 。
当执行这个命令后,我们可以看到攻击源主机开始向目标服务器发送大量的 SYN 请求包。此时,在目标服务器上,正常的网络连接状态被打破。我们可以通过netstat -ntu命令查看网络连接信息,会发现大量来自攻击源 IP 的 SYN_RECV 状态的连接请求,服务器的资源被逐渐耗尽,CPU 使用率急剧上升,网络带宽也被大量占用。这就是典型的 DDoS 攻击场景,服务器在这种攻击下,正常的服务请求很难得到响应,就像一个被人群包围的商店,顾客挤不进去,正常的交易无法进行 。

脚本检测:直击 “幕后黑手”


在模拟攻击进行的同时,我们运行之前编写的检测 DDoS 攻击的脚本。在终端中执行脚本文件,假设脚本文件名为ddos_detection.sh,则执行命令:

 
sudo bash ddos_detection.sh
随着脚本的运行,它开始对服务器的网络连接信息进行实时分析。由于我们正在进行模拟攻击,大量来自攻击源 IP 的连接请求使得脚本迅速捕捉到异常。在脚本的输出结果中,我们可以看到类似以下的信息:

 
2024-10-10 15:30:05: 疑似DDoS攻击,IP: 192.168.1.101,连接数: 150
这表明脚本检测到 IP 为 192.168.1.101 的主机与服务器的连接数超过了我们设定的阈值 100,极有可能是 DDoS 攻击的源头。通过进一步查看日志文件/var/log/ddos_detection.log,我们还能获取更多详细信息,比如被攻击的端口等 。
从这些输出结果可以分析出,当某个 IP 的连接数异常高时,就很可能是 DDoS 攻击正在发生。我们可以根据这些信息,及时采取措施,如封禁攻击源 IP,使用防火墙限制该 IP 的访问等 。同时,我们还可以对日志文件进行深入分析,了解攻击的持续时间、攻击的频率等信息,为后续的防御策略调整提供依据。例如,如果发现某个 IP 在短时间内多次发起攻击,就需要加强对该 IP 的监控和防范,或者调整脚本的阈值,使其能更精准地检测到攻击行为 。通过这次实战演练,我们可以看到脚本在检测 DDoS 攻击方面的有效性,它就像一个敏锐的 “卫士”,时刻守护着服务器的安全,一旦发现异常,就能及时发出警报 。

后续行动:应对与防范

临时应对:阻止攻击蔓延


当脚本检测到 DDoS 攻击后,我们必须迅速采取行动,阻止攻击的进一步蔓延。在 Linux 系统中,iptables 是一个强大的防火墙工具,我们可以利用它来封禁攻击 IP 。例如,如果检测到 IP 为 192.168.1.101 的主机发起 DDoS 攻击,我们可以执行以下命令封禁该 IP:

 
sudo iptables -I INPUT -s 192.168.1.101 -j DROP
这条命令的含义是在 INPUT 链中插入一条规则,将来自 192.168.1.101 的所有流量都丢弃,从而阻止该 IP 对服务器的进一步攻击 。封禁攻击 IP 可以迅速切断攻击源与服务器的连接,减少攻击流量对服务器资源的占用,为后续的处理争取时间 。
对于流量型 DDoS 攻击,当攻击流量非常大,超出了服务器自身的处理能力时,采用流量清洗方案是一种有效的应对措施 。流量清洗是指将攻击流量从正常流量中分离出来,通过特定的设备或服务进行清洗,只将正常的流量回注到服务器 。现在有许多专业的流量清洗服务提供商,如阿里云的 DDoS 高防服务、腾讯云的 DDoS 防护服务等 。这些服务通常基于大规模的分布式清洗节点,能够快速检测和清洗 DDoS 攻击流量 。以阿里云 DDoS 高防服务为例,它通过 DNS 解析方式将流量牵引到全球的 DDoS 防护网络,利用 Tbps 级别的防护能力清洗流量型和资源耗尽型 DDoS 攻击 。在遭受大流量 DDoS 攻击时,我们可以将服务器的流量接入到这些专业的流量清洗服务中,确保服务器能够继续为正常用户提供服务 。

长期防范:构建安全防线


从长期角度来看,加强服务器对 DDoS 攻击的防范能力至关重要 。定期更新系统和软件是基础且关键的一步 。系统和软件的开发者会不断修复已知的漏洞,这些漏洞往往是 DDoS 攻击的切入点 。例如,操作系统的漏洞可能会被攻击者利用,通过特定的攻击手段绕过系统的防护机制,发起 DDoS 攻击 。我们要及时关注系统和软件的更新信息,在 CentOS 系统中,可以使用 yum 或 dnf 命令进行软件包的更新,如执行sudo yum update命令,确保服务器的操作系统和各种应用程序都处于最新的安全状态,降低被攻击的风险 。
合理配置服务器资源也不容忽视 。根据服务器的业务需求,合理分配 CPU、内存、网络带宽等资源 。如果服务器的资源配置不合理,在正常业务高峰时都可能出现性能瓶颈,更难以抵御 DDoS 攻击 。比如,为 Web 服务器分配足够的内存,使其能够缓存更多的页面数据,减少磁盘 I/O 操作,提高响应速度;为数据库服务器合理配置 CPU 核心数,确保其能够快速处理大量的数据库查询请求 。同时,优化服务器的网络配置,如设置合理的 TCP 连接超时时间、调整网络缓冲区大小等,也能提高服务器的稳定性和抗攻击能力 。
使用专业的 DDoS 防护服务是提升服务器安全防护能力的重要手段 。除了前面提到的阿里云、腾讯云等云服务提供商的 DDoS 防护服务外,还有一些专门的网络安全公司提供专业的 DDoS 防护解决方案 。这些防护服务通常结合了先进的流量检测技术、智能的防护算法和大规模的清洗资源 。它们能够实时监测网络流量,通过分析流量的特征、行为模式等,精准识别出 DDoS 攻击流量,并及时采取相应的防护措施 。例如,一些防护服务利用机器学习算法对正常流量和攻击流量进行建模,当检测到流量模式与攻击模型匹配时,立即启动防护机制,将攻击流量引流到清洗设备进行处理 。通过使用专业的 DDoS 防护服务,我们可以借助其强大的技术实力和丰富的防护经验,为服务器提供全方位、多层次的防护,有效降低 DDoS 攻击对服务器的威胁 。

总结与展望


在这场网络安全的持久战中,DDoS 攻击始终是高悬在服务器头顶的 “达摩克利斯之剑”,而我们通过在 CentOS 系统上编写脚本,为服务器筑起了一道抵御 DDoS 攻击的坚固防线。回顾我们的探索过程,从深入了解 DDoS 攻击的类型和危害,到掌握利用 CentOS 脚本发现攻击的方法,再到学会在攻击发生时如何临时应对和长期防范,每一步都凝聚着我们对网络安全的重视和追求。
使用 CentOS 脚本发现 DDoS 攻击具有诸多优势。它就像一位不知疲倦的 “网络卫士”,能够实时监测服务器的网络连接状态,迅速捕捉到异常的连接请求。而且,脚本的编写和运行成本相对较低,对于各类规模的企业和个人开发者来说,都是一种可行的安全防护手段。通过对脚本的优化和完善,我们可以根据服务器的实际情况进行定制化设置,提高检测的准确性和有效性。
然而,网络安全的形势瞬息万变,DDoS 攻击的手段也在不断更新和升级。我们不能满足于现有的防护措施,而要持续关注网络安全领域的最新动态,不断探索更有效的防范方法。这可能包括学习和应用新的检测技术,如基于机器学习的异常检测算法,它能够通过对大量正常网络流量数据的学习,建立起正常流量模型,当检测到流量与模型差异较大时,就能更精准地识别出 DDoS 攻击 。同时,我们也要加强服务器的整体安全管理,不仅要防范 DDoS 攻击,还要关注数据泄露、恶意软件入侵等其他安全威胁 。
在服务器管理中,安全问题绝不能有丝毫的懈怠和轻视。每一次安全事件都可能给我们带来巨大的损失,无论是经济上的损失,还是用户信任的丧失。让我们共同努力,以更加积极的态度和行动,守护好我们的网络家园,让网络世界充满安全与信任,为数字时代的发展创造一个稳定、可靠的网络环境。

关于墨者安全
墨者安全致力于安全防护、服务器高防、网络高防、ddos防护、cc防护、dns防护、防劫持、高防服务器、高防dns、网站防护等方面的服务,全网第一款指纹识别技术防火墙,自研的WAF指纹识别架构,提供任意CC和DDoS攻击防御。

热门文章

X

7x24 小时

免费技术支持

15625276999


-->