当宝塔面板管理的网站突然变慢、CPU占用持续高位,且访问日志中出现大量来自少数IP的重复请求时,基本可以判断遭遇了CC攻击。CC攻击不像DDoS那样直接耗尽带宽,而是利用大量看似合法的请求拖垮应用层,因此需要在应用层做限流与拦截。宝塔面板内置的防火墙功能,正好提供了面向网站级别的访问频率控制能力。

一、确认CC攻击特征
在配置拦截前,先通过宝塔的网站日志或系统监控确认攻击形态:
- 单个IP在短时间发起数百次以上请求
- 请求集中在某个接口或首页,无明显业务行为
- PHP-FPM或Nginx连接数异常上涨
二、开启宝塔防火墙并配置限流
进入宝塔面板,打开安全模块中的防火墙,确保状态为开启。针对具体站点,可在网站-设置-流量限制中做如下配置:
| 配置项 | 建议值 | 说明 |
|---|---|---|
| 并发连接数限制 | 50 | 单IP同时连接数上限 |
| 单IP请求速率 | 10/秒 | 超过则临时拦截 |
| 封锁时间 | 600秒 | 触发后封禁时长 |
使用Nginx规则增强拦截
如果面板图形化限流不够灵活,可在网站配置中添加Nginx限流区。示例如下:
# 在Nginx主配置http段定义限流区
limit_req_zone $binary_remote_addr zone=cc_zone:10m rate=10r/s;
# 在站点server段使用
server {
listen 80;
server_name example.ipipp.com;
location / {
# 突发允许20个,无延迟排队
limit_req zone=cc_zone burst=20 nodelay;
proxy_pass http://127.0.0.1:8080;
}
}
三、配合宝塔防火墙URL过滤
宝塔防火墙支持URL拦截与UA过滤。对于明显异常的User-Agent或特定攻击路径,可添加规则:
- 拦截包含空UA或常见扫描器的请求
- 对/wp-admin、/xmlrpc.php等高频被攻击路径单独限流
简单PHP脚本记录拦截日志
若想自己统计被拦IP,可用以下PHP片段写入日志:
<?php
// 获取客户端IP
$ip = $_SERVER['REMOTE_ADDR'];
// 示例:记录到文件
file_put_contents('/www/wwwroot/example.ipipp.com/block.log', $ip . ' ' . date('Y-m-d H:i:s') . PHP_EOL, FILE_APPEND);
?>
四、验证与调整
配置完成后,用浏览器或命令行正常访问站点,确认不被误拦;再使用压力测试工具模拟高频请求,观察面板是否出现封禁记录。若正常用户被误伤,可适当调高单IP请求速率或缩短封锁时间。
注意:限流只能缓解小规模CC,超大流量仍需结合上游机房清洗或CDN防护。
五、总结
宝塔面板网站遭遇CC攻击时,优先使用自带的防火墙限流功能,配合Nginx的limit_req模块做精细控制,能够快速降低服务器负载。日常也应保持面板与Nginx版本更新,减少因规则滞后带来的风险。