服务器被 CC 攻击,用这个方法直接打回去
先判断你的服务器是不是被CC攻击了
服务器突然变慢、网站打不开,或者CPU飙升到100%,不一定就是CC攻击。
先登录服务器或宝塔面板,执行下面两步快速确认:
- 用 top 命令看负载:在SSH终端输入
top,如果wa或si值很高,或者大量nginx/php-fpm进程占满CPU,多半是攻击。 - 查看访问日志:宝塔用户直接进「网站」-> 站点 ->「访问日志」,观察是否有同一IP在短时间内刷了几千次请求。手动找的话执行
tail -100 /www/wwwlogs/站点日志.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10,看前10个IP的请求次数。
如果某个IP请求量明显异常(比如超过正常流量100倍以上),基本就确认是CC攻击了。
开打第一步:用宝塔面板一键封IP
如果你是宝塔用户,最直接的方法就是通过面板自带工具封IP。
操作路径:
- 登录宝塔面板,左侧点击「安全」。
- 在「IP规则」页面点击「添加IP规则」。
- 填入你要封禁的IP地址(可以把前面查到的恶意IP逐条填进去)。
- 行为选择「拒绝」,备注写“CC攻击IP”,点击「添加」。
这个操作会立即生效,被封IP无法访问服务器任何端口。
如果攻击IP很多(比如几百个),可以批量导入:把IP每行一个保存为 ip.txt,然后在SSH执行脚本。
这里给一条通用命令,适用于宝塔且服务器已安装 ufw 或 iptables 的情况:
while read ip; do ufw deny from $ip; done < ip.txt
如果是腾讯云/阿里云服务器,建议同时去云控制台的安全组里把IP加进黑名单,这样在云防火墙层面就先拦截了。
进阶操作:用iptables写一条规则永久封禁
零基础用户可能觉得命令复杂,但只记住一条就够了。
在SSH终端执行:
iptables -I INPUT -s 恶意IP地址 -j DROP
把 恶意IP地址 替换成你查到的IP,比如 iptables -I INPUT -s 192.168.1.100 -j DROP。
这条规则会立即切断该IP所有连接。
如果想封禁一个IP段(比如192.168.1.0/24),就写:
iptables -I INPUT -s 192.168.1.0/24 -j DROP
注意:iptables 规则重启后失效,如果你想让规则永久生效,需要先安装 iptables-persistent,然后执行 netfilter-persistent save;
或者直接把规则写到 /etc/rc.local 里。
避坑指南:别把自己封出去
- 别封自己当前连接的IP:执行 iptables 前先看一下你自己的IP
curl ifconfig.me,如果误封了,你会直接断开SSH。解决办法:要么提前把白名单IP加进 iptables(用-A INPUT -s 你的IP -j ACCEPT),要么在云控制台用VNC连接恢复。 - 不要一次性把所有查到的IP都封了:里面可能混有搜索引擎爬虫(如百度、谷歌),导致网站收录下降。建议先查IP归属地,把明显来自机房的IP先封,爬虫IP放行。
- 如果攻击源是随机IP(动态打):单靠手动封IP效率低,建议配合宝塔面板的「Nginx防火墙」插件(付费),开启智能CC防御,自动拦截高频率IP。
效果验证:怎么确认攻击停下了
执行封禁后,再跑一次查看日志的命令:
tail -100 /www/wwwlogs/站点日志.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10
如果前10个IP的请求数从几万降到了几十,说明封禁生效。
另外可以用 htop 看CPU占用是否回落,或者直接打开网站看能否正常访问。
如果攻击还在继续,说明对方换了IP段,你需要结合WAF规则(例如宝塔的「全局设置」->「CC防御」)设置频率限制:每个IP每秒最多请求10次,超出自动封禁1小时。
这样即使对方换IP,也能大幅减轻压力。
最后提醒:CC攻击不是病毒,是滥用请求,所以防要比封更重要。
建议平时就开启CDN(Cloudflare等)隐藏服务器真实IP,并配置好访问频率限制。
如果你按本文步骤操作后仍无法解决,可以查看服务器是否被植入后门导致成为跳板,用 netstat -anp 检查异常连接。
遇到问题欢迎留言讨论。