企业安全体系架构分析:开发安全架构之防CC攻击脚本编写
字数 1373 2025-08-18 11:38:48

防CC攻击脚本编写与实现指南

1. CC攻击概述

1.1 什么是CC攻击

CC(Challenge Collapsar,挑战黑洞)攻击是DDoS攻击的一种类型,攻击者使用代理服务器向受害服务器发送大量貌似合法的请求。攻击工具名称来源于其功能特点。

1.2 CC攻击原理

攻击者控制某些主机不停地发送大量数据包给对方服务器,造成服务器资源耗尽直至宕机崩溃。CC攻击主要针对网页,模拟大量用户(线程)持续访问需要大量数据操作(CPU时间)的页面,导致服务器资源浪费,CPU长时间处于100%负载状态。

1.3 CC攻击特征

  1. 业务流量激增
  2. 访问日志持续大量增长
  3. 大量相同来源IP访问同一域名

2. 传统防御方式与局限性

2.1 WAF防御方式

  • 商业WAF和开源WAF通常采用阻断方式防御CC攻击
  • 返回403响应码,将原本应返回的1M大小包替换为1K大小的403页面

2.2 传统防御的不足

  • 在云端环境中,即使返回403响应,仍会产生流量费用
  • 攻击者只需造成目标方损失即算成功,防御成本可能高于攻击成本

3. 高效防CC攻击方案设计

3.1 整体思路

在代理服务器层面阻止非正常请求通过,使攻击请求无法返回给攻击者,从而避免流量费用产生。

3.2 技术实现要点

  1. 使用Nginx内置限流功能初步识别CC攻击
  2. 通过ngx_log_if模块筛选攻击日志
  3. 将攻击IP自动加入防火墙阻断规则

4. 详细实现步骤

4.1 Nginx基础配置

# 定义请求限制区域
limit_req_zone $binary_remote_addr zone=one:10m rate=300r/s;

# 应用请求限制
limit_req zone=one burst=30;

配置说明:

  • 同一IP每秒请求限制为300次
  • 持续30秒的异常请求将被阻断并返回503状态码

4.2 日志配置

# 定义503错误日志路径
access_log /var/log/nginx/503/errortest.log;

4.3 ngx_log_if模块

  • 模块地址:https://github.com/cfsego/ngx_log_if
  • 功能:筛选特定条件的Nginx日志

4.4 防CC脚本实现

#!/bin/bash

i=1
while :
do
    # 获取日志状态码
    status=`awk -v i=$i -F ' ' 'NR==i{print $9}' /var/log/nginx/503/errortest.log`
    
    if [ "$status" = '503' ];then
        # 提取503日志中的IP
        ip_503=`awk -v i=$i -F ' ' 'NR==i{print $1}' /var/log/nginx/503/errortest.log`
        echo $ip_503
        
        # 将IP加入防火墙规则
        sed -i "6 i-A INPUT -s $ip_503/32 -j DROP" /etc/sysconfig/iptables
        
        # 清空日志并重启服务
        echo "" > /var/log/nginx/503/errortest.log
        service iptables restart
        nginx -s reload
        break
        
    elif [ `cat /var/log/nginx/503/errortest.log|awk -F ' ' 'NR==i{print $9}' /var/log/nginx/503/errortest.log`="" ];then
        break
    else
        i=$[i+1]
    fi
done

4.5 定时任务设置

使用crontab设置每分钟或更短时间运行一次防御脚本:

* * * * * /path/to/your/script.sh

5. 技术要点解析

5.1 日志处理技术

  • 使用awk工具提取日志中的关键信息
  • 状态码提取:awk -v i=$i -F ' ' 'NR==i{print $9}'
  • IP地址提取:awk -v i=$i -F ' ' 'NR==i{print $1}'

5.2 防火墙规则管理

  • 使用sed动态插入防火墙规则:sed -i "6 i-A INPUT -s $ip_503/32 -j DROP"
  • 规则插入到iptables配置文件的第6行

5.3 服务管理

  • 重启iptables服务:service iptables restart
  • 重载Nginx配置:nginx -s reload

6. 优化建议

  1. 日志处理优化:可考虑批量处理多条503日志中的IP,减少服务重启次数
  2. 规则管理优化:添加IP前可先检查是否已存在该规则,避免重复
  3. 防御策略细化:可根据业务特点调整限流阈值
  4. 监控告警:添加脚本执行结果监控和告警机制

7. 参考资料

  1. ngx_log_if模块:https://github.com/cfsego/ngx_log_if
  2. awk使用指南:https://www.cnblogs.com/xudong-bupt/p/3721210.html
  3. Nginx官方文档:http://nginx.org/en/docs/
防CC攻击脚本编写与实现指南 1. CC攻击概述 1.1 什么是CC攻击 CC(Challenge Collapsar,挑战黑洞)攻击是DDoS攻击的一种类型,攻击者使用代理服务器向受害服务器发送大量貌似合法的请求。攻击工具名称来源于其功能特点。 1.2 CC攻击原理 攻击者控制某些主机不停地发送大量数据包给对方服务器,造成服务器资源耗尽直至宕机崩溃。CC攻击主要针对网页,模拟大量用户(线程)持续访问需要大量数据操作(CPU时间)的页面,导致服务器资源浪费,CPU长时间处于100%负载状态。 1.3 CC攻击特征 业务流量激增 访问日志持续大量增长 大量相同来源IP访问同一域名 2. 传统防御方式与局限性 2.1 WAF防御方式 商业WAF和开源WAF通常采用阻断方式防御CC攻击 返回403响应码,将原本应返回的1M大小包替换为1K大小的403页面 2.2 传统防御的不足 在云端环境中,即使返回403响应,仍会产生流量费用 攻击者只需造成目标方损失即算成功,防御成本可能高于攻击成本 3. 高效防CC攻击方案设计 3.1 整体思路 在代理服务器层面阻止非正常请求通过,使攻击请求无法返回给攻击者,从而避免流量费用产生。 3.2 技术实现要点 使用Nginx内置限流功能初步识别CC攻击 通过ngx_ log_ if模块筛选攻击日志 将攻击IP自动加入防火墙阻断规则 4. 详细实现步骤 4.1 Nginx基础配置 配置说明: 同一IP每秒请求限制为300次 持续30秒的异常请求将被阻断并返回503状态码 4.2 日志配置 4.3 ngx_ log_ if模块 模块地址:https://github.com/cfsego/ngx_ log_ if 功能:筛选特定条件的Nginx日志 4.4 防CC脚本实现 4.5 定时任务设置 使用crontab设置每分钟或更短时间运行一次防御脚本: 5. 技术要点解析 5.1 日志处理技术 使用awk工具提取日志中的关键信息 状态码提取: awk -v i=$i -F ' ' 'NR==i{print $9}' IP地址提取: awk -v i=$i -F ' ' 'NR==i{print $1}' 5.2 防火墙规则管理 使用sed动态插入防火墙规则: sed -i "6 i-A INPUT -s $ip_503/32 -j DROP" 规则插入到iptables配置文件的第6行 5.3 服务管理 重启iptables服务: service iptables restart 重载Nginx配置: nginx -s reload 6. 优化建议 日志处理优化 :可考虑批量处理多条503日志中的IP,减少服务重启次数 规则管理优化 :添加IP前可先检查是否已存在该规则,避免重复 防御策略细化 :可根据业务特点调整限流阈值 监控告警 :添加脚本执行结果监控和告警机制 7. 参考资料 ngx_ log_ if模块:https://github.com/cfsego/ngx_ log_ if awk使用指南:https://www.cnblogs.com/xudong-bupt/p/3721210.html Nginx官方文档:http://nginx.org/en/docs/