CC攻击是常见的应用层攻击手段,攻击者通过模拟大量正常请求消耗服务器带宽和CPU资源,导致正常用户无法访问网站。在宝塔面板环境中,我们可以通过Nginx自带的限制模块配合Fail2ban工具,实现自动识别并封禁恶意攻击IP的效果,有效抵御大规模CC攻击。

前期准备
首先确保服务器已经安装宝塔面板,并且网站使用Nginx作为Web服务器。同时需要安装Fail2ban工具,在宝塔面板的终端中执行以下命令完成安装:
# CentOS系统安装命令 yum install -y fail2ban # Ubuntu/Debian系统安装命令 apt-get update && apt-get install -y fail2ban
Nginx配置访问频率限制
首先我们需要在Nginx层面设置基础的访问频率限制,过滤掉部分明显的恶意请求,同时生成Fail2ban可以识别的日志特征。
修改站点Nginx配置
登录宝塔面板,进入对应站点的配置修改页面,在server块中添加以下限制规则:
# 定义限制区域,名称为cc_limit,内存大小10m,每秒最多允许10个请求
limit_req_zone $binary_remote_addr zone=cc_limit:10m rate=10r/s;
server {
# 其他原有配置...
# 对网站根路径应用限制规则,突发请求最多允许20个,超出返回503
location / {
limit_req zone=cc_limit burst=20 nodelay;
# 原有站点配置内容...
}
# 自定义503错误页面,避免暴露服务器信息
error_page 503 /503.html;
location = /503.html {
root /www/server/nginx/html;
}
}
配置完成后点击保存,重载Nginx配置使规则生效。此时如果单个IP请求频率超过限制,Nginx会返回503状态码,同时错误日志中会记录相关信息。
确认Nginx错误日志路径
宝塔面板默认的Nginx错误日志路径为/www/wwwlogs/nginx_error.log,后续Fail2ban需要读取这个日志文件识别恶意IP,你可以根据实际配置调整路径。
配置Fail2ban规则
Fail2ban通过读取日志文件,匹配预设的正则规则识别恶意行为,然后调用防火墙规则封禁对应IP。
创建Nginx CC过滤器
在/etc/fail2ban/filter.d/目录下新建nginx-cc.conf文件,添加以下内容:
[Definition] # 匹配Nginx返回的503状态码日志,提取请求IP failregex = ^.*?<HOST> - - [.*?] "(GET|POST|HEAD).*?" 503 .*$ # 忽略的日志正则 ignoreregex =
创建Fail2ban封禁动作
在/etc/fail2ban/jail.d/目录下新建nginx-cc.conf文件,添加以下内容:
[nginx-cc] # 是否启用规则 enabled = true # 使用的过滤器名称 filter = nginx-cc # 监控的日志文件路径 logpath = /www/wwwlogs/nginx_error.log # 最大重试次数,超过该次数的IP会被封禁 maxretry = 10 # 统计时间窗口,单位秒 findtime = 60 # 封禁时长,单位秒,这里设置为1小时 bantime = 3600 # 使用的防火墙工具,宝塔面板默认使用iptables banaction = iptables-multiport
启动并验证规则
完成配置后执行以下命令启动Fail2ban服务并设置开机自启:
# 启动Fail2ban systemctl start fail2ban # 设置开机自启 systemctl enable fail2ban # 重载配置 systemctl reload fail2ban
可以通过以下命令查看Fail2ban的运行状态和封禁记录:
# 查看所有启用的监狱状态 fail2ban-client status # 查看nginx-cc监狱的详细状态,包含封禁IP列表 fail2ban-client status nginx-cc
注意事项
- Nginx的请求频率限制参数需要根据站点实际访问量调整,避免误封正常用户。
- 封禁时长建议根据攻击规模调整,频繁攻击可以适当延长封禁时间。
- 如果服务器使用了云厂商的安全组,建议同时配合安全组的IP封禁功能,提升防御效果。
- 定期查看Fail2ban的封禁日志,确认规则是否正常工作,及时调整匹配正则。