如何用脚本在CentOS服务器上有效防御CC攻击?

在互联网服务器的日常运维中,安全始终是重中之重,对于运行在CentOS系统上的Web服务器而言,除了传统的DDoS攻击外,一种更为隐蔽和棘手的威胁是CC攻击(Challenge Collapsar),CC攻击并非旨在耗尽网络带宽,而是通过模拟大量正常用户对网站动态页面(如登录、搜索、API接口)的持续请求,疯狂消耗服务器资源(如CPU、内存、数据库连接池),最终导致服务器响应缓慢甚至瘫痪,正常用户无法访问,由于CC攻击的流量特征与正常访问极为相似,传统的网络层防火墙难以有效防御,部署应用层的防御策略,例如编写并运行一个CentOS防CC脚本,显得尤为必要。

如何用脚本在CentOS服务器上有效防御CC攻击?

防御机制的核心思想

一个有效的防CC脚本,其核心工作原理可以概括为三个步骤:监控、分析、阻断,它不依赖于网络流量特征,而是聚焦于服务器的访问日志,通过分析日志中的行为模式来识别恶意IP。

  • 日志监控:脚本会持续或周期性地读取Web服务器(如Nginx或Apache)的访问日志文件,这个文件记录了每一个访问请求的详细信息,包括访问者的IP地址、访问时间、请求的URL、返回状态码、User-Agent等。
  • 行为分析:这是脚本的关键环节,脚本会设定一套规则来判断一个IP的行为是否异常,最常见的规则是“单位时间内的请求频率”,一个正常的用户在60秒内可能只会发起10-20个请求,而一个攻击程序可能在同一时间内发起数百甚至上千个请求,脚本通过统计日志,找出在极短时间内请求次数远超正常阈值的IP地址。
  • 动态阻断:一旦某个IP被识别为攻击源,脚本会立即调用系统的防火墙工具(如CentOS 7及以后版本默认的firewalld,或传统的iptables),将该IP地址加入黑名单,并阻止其后续的所有访问,这个阻断可以是临时的,例如封禁1小时,也可以是永久的,具体策略可根据实际需求设定。

一个基于Shell的简易防CC脚本示例

下面提供一个基于Shell的实用脚本,它适用于使用Nginx作为Web服务器、firewalld作为防火墙的CentOS系统,这个脚本的逻辑清晰,易于理解和定制。

我们需要定义一些关键变量,以便于后续修改和维护。

变量名 含义 示例值
LOG_FILE Nginx访问日志的绝对路径 /var/log/nginx/access.log
DURATION 监控的时间窗口(单位:秒) 60
THRESHOLD 在时间窗口内允许的最大请求次数 100
WHITELIST_IP 白名单IP,用空格隔开,永不封禁 "127.0.0.1 192.168.1.100"
#!/bin/bash
# ==================== 配置区域 ====================
LOG_FILE="/var/log/nginx/access.log"
DURATION=60  # 监控最近60秒的日志
THRESHOLD=100 # 允许的单IP最大请求数
WHITELIST_IP="127.0.0.1" # 白名单,多个IP用空格分隔
# ==================== 核心逻辑 ====================
# 获取当前时间戳和DURATION秒前的时间戳
TIME_END=$(date +"%d/%b/%Y:%H:%M:%S")
TIME_START=$(date -d "$DURATION seconds ago" +"%d/%b/%Y:%H:%M:%S")
# 分析日志,找出在时间窗口内请求超过阈值的IP
# awk的用法:筛选指定时间段内的日志,提取第一列(IP),然后排序并统计每个IP的出现次数
ATTACK_IPS=$(awk -v start="$TIME_START" -v end="$TIME_END" '$4 >= "["start" && $4 < "["end {print $1}' "$LOG_FILE" | sort | uniq -c | sort -nr | awk -v threshold="$THRESHOLD" '$1 > threshold {print $2}')
# 检查是否找到了攻击IP
if [ -z "$ATTACK_IPS" ]; then
    echo "$(date '+%Y-%m-%d %H:%M:%S') - 未发现攻击行为。"
    exit 0
fi
# 循环处理每个攻击IP
for ip in $ATTACK_IPS; do
    # 检查IP是否在白名单中
    if [[ "$WHITELIST_IP" =~ $ip ]]; then
        echo "$(date '+%Y-%m-%d %H:%M:%S') - IP $ip 在白名单中,跳过封禁。"
        continue
    fi
    # 检查IP是否已被firewalld封禁
    if firewall-cmd --list-rich-rules | grep -q "source address="$ip""; then
        echo "$(date '+%Y-%m-%d %H:%M:%S') - IP $ip 已在封禁列表中,无需重复操作。"
        continue
    fi
    # 执行封禁操作
    echo "$(date '+%Y-%m-%d %H:%M:%S') - 发现攻击IP: $ip,正在执行封禁..."
    firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='$ip' drop"
    firewall-cmd --reload
    echo "$(date '+%Y-%m-%d %H:%M:%S') - IP $ip 已被成功封禁。"
done

脚本的部署与自动化

要使这个脚本发挥作用,需要将其部署并设置为定时任务。

如何用脚本在CentOS服务器上有效防御CC攻击?

  1. 保存脚本:将上述代码保存为一个文件,例如anti_cc.sh,并放置在合适的目录,如/usr/local/sbin/
  2. 赋予执行权限:在终端中执行 chmod +x /usr/local/sbin/anti_cc.sh
  3. 设置Cron定时任务:使用crontab -e命令编辑当前用户的定时任务,为了实现近实时监控,可以设置脚本每分钟运行一次,在文件末尾添加以下内容:
    */1 * * * * /usr/local/sbin/anti_cc.sh >> /var/log/anti_cc.log 2>&1

    这行代码的含义是:每分钟执行一次anti_cc.sh脚本,并将其所有的输出(包括正常信息和错误信息)重定向到/var/log/anti_cc.log文件中,便于后续排查问题。

策略的优化与注意事项

虽然上述脚本能有效缓解大部分自动化CC攻击,但在实际应用中仍需注意一些细节:

  • 阈值调整THRESHOLD值是脚本的核心,设置过低可能导致误伤,封禁正常访问量大的用户(如公司网关出口IP);设置过高则防御效果不佳,建议在网站正常访问时段,通过分析日志统计出一个合理的基准值,然后在此基础上适当放宽。
  • 白名单机制:务必将自己的固定IP、公司IP、以及搜索引擎爬虫(如Googlebot)的IP段加入白名单,避免误操作导致自己或重要用户无法访问。
  • 日志轮转:确保Nginx的日志轮转策略(logrotate)配置正确,避免日志文件无限增长,影响脚本分析效率和磁盘空间。
  • 局限性:此脚本主要防御的是源IP相对固定的攻击,对于使用了海量代理IP或僵尸网络的分布式CC攻击,效果会打折扣,在这种情况下,应考虑更专业的解决方案。

相关问答FAQs

问题1:这个防CC脚本和专业的WAF(Web应用防火墙)有什么区别?

解答:这个脚本和专业的WAF在防御层级、深度和功能上存在显著差异,这个脚本是一个基于日志分析和IP封禁的“事后”防御工具,它在攻击发生后通过分析行为模式来阻断后续攻击,而WAF(如ModSecurity、Cloudflare WAF)工作在应用层,是一个“事中”防御系统,它能对每一个HTTP请求进行深度检测,不仅能识别CC攻击,还能防御SQL注入、XSS跨站脚本、文件上传漏洞等多种Web应用攻击,WAF拥有更复杂的规则库和行为分析引擎,可以识别更隐蔽的攻击行为,并且通常提供更精细的策略,如弹出验证码、JavaScript人机验证等,而不是简单粗暴地封禁IP,简而言之,这个脚本是一个轻量级、针对性的应急方案,而WAF是一个功能全面、体系化的专业安全产品。

如何用脚本在CentOS服务器上有效防御CC攻击?

问题2:如果我的网站使用了CDN服务,这个脚本还有效吗?

解答:直接使用是无效的,甚至会产生严重误判,当网站部署了CDN(如Cloudflare、阿里云CDN)后,所有到达您服务器的请求的源IP地址都将是CDN的节点IP,而不是真实用户的IP,脚本分析日志会发现所有请求都来自少数几个CDN IP,一旦请求量超过阈值,脚本就会将CDN节点IP封禁,导致所有用户(包括正常用户)都无法通过CDN访问您的网站,要解决这个问题,需要修改Nginx配置,让它记录真实用户的IP,CDN会在HTTP请求头中加入X-Forwarded-ForCF-Connecting-IP等字段来传递真实IP,您需要在Nginx的log_format配置中,将$remote_addr(记录直连IP)修改为记录这些请求头中的值(如$http_x_forwarded_for),这样,防CC脚本才能获取到真实的访客IP并进行有效分析。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-04 08:16
下一篇 2024-12-12 12:58

相关推荐

  • 如何正确配置服务器以实现有效的削峰用电?

    服务器削峰配置错误可能导致设置错峰用电,影响能源利用效率和系统稳定性。正确的削峰策略应基于服务器工作负载、电力成本以及电网需求响应机制来制定,以实现成本节约和环境可持续性。

    2024-08-05
    005
  • ftp怎么上传到虚拟主机_FTP

    在将文件通过FTP上传到虚拟主机时,您需要按照特定的步骤来配置和使用FTP客户端。以下是使用FTP上传文件到虚拟主机的详细指南:,,1. **安装并配置FTP服务**, **安装FTP服务软件**:确保您的虚拟主机上已经安装了FTP服务软件,如vsftpd、proftpd或FileZilla Server等。对于未安装FTP服务的虚拟主机,您需要先进行安装。, **配置FTP服务**:安装完FTP服务软件后,您需要对其进行配置以启动服务。这包括指定哪些账户可以登录FTP服务以及这些账户的权限设置。确保配置文件(如vsftpd.conf)正确设置了本地用户登录和写入权限。,,2. **获取虚拟主机的FTP登录信息**, **登录信息**:从您的云虚拟主机管理页面获取FTP登录信息,包括FTP登录地址(主机名或IP地址)、用户名和密码。如果是新账户,可能需要设置或重置这些信息。,,3. **选择与配置FTP客户端**, **选择FTP客户端**:选择一个FTP客户端,如FileZilla。它是一个免费且易于使用的FTP客户端,适用于多种操作系统。, **安装与配置FTP客户端**:下载并安装所选的FTP客户端。在FileZilla中,您可以通过“站点管理器”添加新的FTP连接,输入获取的主机地址、端口(默认为21)、用户和密码信息。,,4. **连接到虚拟主机并上传文件**, **连接到FTP服务器**:使用配置好的FTP客户端连接到您的虚拟主机。在FileZilla中,选中已配置的站点并点击“连接”按钮来建立连接。, **上传文件**:连接成功后,您可以从本地区域拖动文件到远程区域来上传文件。确保您知道网站根目录的位置,通常是/htdocs(Linux)或/(Windows),以便将文件上传到正确的位置。,,5. **管理与维护**, **文件管理**:通过FTP客户端不仅可以上传文件,还可以下载、删除、重命名或修改文件权限。这对于网站维护和管理非常重要。, **故障排除**:如果遇到连接问题或其他错误,检查FTP客户端的日志以获取详细信息。常见的问题包括网络问题、防火墙设置、权限不足等。确保虚拟机和主机之间的网络可以相互PING通,并且所有相关的端口在防火墙中都是开放的。,,在使用FTP过程中,还应注意以下事项:,, **安全性考虑**:FTP协议本身不具备加密传输功能,敏感信息(如登录凭据)可能会被拦截。建议使用SFTP或FTPS等安全版本的FTP,或者通过VPN连接来保护数据传输的安全性。, **性能优化**:当需要上传大量小文件时,可能会遇到性能瓶颈。可以考虑压缩文件后再上传,减少网络传输时间和提高传输效率。, **权限管理**:正确设置文件和目录的权限是避免网站出现访问错误的关键。确保网站文件和目录的权限模型符合运行环境的要求。,,使用FTP上传文件到虚拟主机涉及安装和配置FTP服务,获取必要的登录信息,选择合适的FTP客户端并进行配置,连接到虚拟主机并执行文件传输操作,以及进行必要的管理和故障排除。遵循以上步骤,可以帮助您有效地管理和更新您的网站内容。

    2024-07-01
    005
  • 如何正确安装分布式数据库软件?

    分布式数据库软件是一种允许数据存储在多个物理位置的系统,以提升可扩展性和容错能力。安装此类软件通常涉及配置网络设置、分配数据节点和协调节点、以及进行必要的性能调优。

    2024-08-02
    006
  • 服务器cdn加速优缺点_CDN加速ECS资源

    CDN加速优点:提高访问速度,减轻源站压力,提升用户体验。缺点:配置复杂,可能产生额外费用,存在缓存更新延迟问题。

    2024-07-14
    007

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信