CC攻击应急:自动拉黑IP的Shell脚本
字数 1253 2025-08-15 21:30:53
CC攻击应急:自动拉黑IP的Shell脚本教学文档
1. 脚本背景与原理
1.1 应用场景
- 网站无任何防护措施("裸奔"状态)
- 遭受CC攻击(特别是使用代理IP的攻击)
- 需要快速应急响应
1.2 核心思路
- 通过计划任务定期执行脚本
- 统计单位时间内的IP访问量
- 设定访问量阈值
- 自动拉黑超过阈值的IP地址
2. 脚本详解
2.1 完整脚本代码
#!/bin/bash
# 该脚本可以根据web日志的访问量,自动拉黑IP(加入计划任务,结合计划任务在固定时间段内执行,并根据该时间段内产生的日志进行分析)
# 首先把日志保存到根目录一份,计算日志有多少行
line1=`wc -l /access_log|awk '{print$1}'`
cp /var/log/httpd/access_log /
# 计算现有的日志有多少行
line2=`wc -l /var/log/httpd/access_log |awk '{print$1}'`
# 根据上一次备份的日志和现在拥有的行数差值,作为单位时间内分析日志访问量
tail -n $((line2-line1)) /var/log/httpd/access_log|awk '{print$1}'|sort -n|uniq -c|sort >/1.txt
cat /1.txt|while read line
do
echo $line >/line
num=`awk '{print$1}' /line`
# 设定阀值num,单位时间内操作这个访问量的ip会被自动拉黑
if (($num>12))
then
ip=`awk '{print$2}' /line`
firewall-cmd --add-rich-rule="rule family=ipv4 source address='${ip}' port port=80 protocol=tcp reject" --permanent
firewall-cmd --reload
fi
done
2.2 关键组件解析
-
日志处理部分:
wc -l:计算文件行数awk '{print$1}':提取第一列数据tail -n:获取文件最后n行sort -n|uniq -c|sort:对IP进行排序、计数和再排序
-
防火墙操作部分:
firewall-cmd --add-rich-rule:添加富规则--permanent:使规则永久生效firewall-cmd --reload:重载防火墙配置
3. 部署与测试步骤
3.1 环境准备
- CentOS 7系统
- 已安装并运行http服务
- 防火墙已启用
3.2 部署流程
- 将脚本保存为可执行文件(如
block_ip.sh) - 添加执行权限:
chmod +x block_ip.sh - 将脚本加入计划任务(crontab)
3.3 测试方法
- 使用nikto等工具模拟大量访问
- 验证网页访问是否被阻止
- 检查防火墙规则:
firewall-cmd --list-all - 查看防火墙配置文件:
/etc/firewalld/zones/public.xml
4. 关键参数与自定义
4.1 阈值调整
- 脚本中默认阈值为12次访问
- 修改
if (($num>12))中的数字以适应不同场景
4.2 日志路径
- 默认日志路径:
/var/log/httpd/access_log - 根据实际环境修改为nginx或其他web服务器的日志路径
4.3 防火墙规则
- 默认阻止80端口的TCP访问
- 可修改
firewall-cmd命令中的端口号和协议类型
5. 进阶扩展
-
基于访问特征的拉黑:
- 分析特定URL的访问频率
- 检测异常User-Agent
-
IP白名单功能:
- 添加信任IP不进行检测
-
自动解封机制:
- 设置拉黑时间限制
- 定时清理过期规则
-
报警机制:
- 集成邮件或短信通知
- 记录拉黑操作日志
6. 注意事项
-
阈值设置:
- 需根据网站正常流量调整
- 设置过低可能导致误封
- 设置过高可能无法有效防护
-
性能影响:
- 高频执行可能增加服务器负载
- 建议根据业务需求设置合理的执行频率
-
规则管理:
- 定期检查并清理防火墙规则
- 可通过
/etc/firewalld/zones/public.xml管理规则
-
日志轮转:
- 确保日志不会无限增长
- 配置logrotate进行日志切割
7. 总结
该脚本提供了一种简单有效的CC攻击应急方案,特别适合无专业防护设备的场景。通过自动化分析访问日志并动态更新防火墙规则,可以有效缓解CC攻击带来的影响。管理员可根据实际需求调整阈值、检测规则和执行频率,使其更加贴合业务场景。