VPS突然连不上,SSH断掉、网站打不开、面板也进不去——如果你正在经历这个,大概率是被DDoS了。这时候慌没用,按下面的步骤走,先止血再恢复。
怎么判断是不是DDoS攻击
不是所有的连不上都是DDoS。先排除几个常见情况:服务器欠费被停了、配置改错了、或者机房本身网络故障。如果你排除不了,先登录服务商的后台控制台,看VNC能不能连进去。
如果VNC能进,但公网IP完全ping不通、SSH连不上,十有八九是DDoS。进一步确认:在VNC里跑 iftop 或 nload,如果看到入向流量跑到带宽上限、但出向流量几乎为零,这就是典型的DDoS流量特征。
还有一个信号:服务商后台给你发了异常流量告警邮件,说你的IP被黑洞路由了。这时候不用再做任何判断,直接进入下面的自救流程。
第一步:立即封禁攻击IP
如果流量还没大到直接被黑洞的程度,你还有操作空间。先用命令查当前有哪些IP在大量连接你的服务器:
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -20这条命令会列出连接数最多的20个IP。把那些每秒几十上百个连接的IP揪出来,用iptables封掉:
iptables -I INPUT -s 攻击IP地址 -j DROP如果攻击源IP特别多,手动封不现实,直接用下面的规则按连接频率自动封:
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 -j DROP这个规则的意思是:同一个IP如果对80端口建立了超过20个TCP连接,后面来的全部丢包。数字可以根据你网站正常情况调整。
第二步:关闭非必要服务减少攻击面
DDoS的攻击面越大越难防。攻击进行时,先把不必须的服务全部停掉:
systemctl stop mysql
systemctl stop redis
systemctl stop php-fpm只保留最基本的SSH和Nginx,让攻击流量没有太多目标可以打。MySQL这种数据库通常不直接对外暴露,停掉后Web服务虽然访问不了,但至少后端数据不会被攻击流量拖垮。
另外检查一下有没有对外开放的端口是你忘了关的:
ss -tlnp看到3306(MySQL)、6379(Redis)、27017(MongoDB)这类端口如果在0.0.0.0监听,立刻关掉或者改成仅监听127.0.0.1。
第三步:接入CDN隐藏源站IP
如果你的服务器IP已经暴露了,DDoS攻击者直接对着IP打,iptables封IP只是临时方案。根本办法是接入CDN把真实IP藏起来。
Cloudflare免费套餐就自带基础DDoS防护,接入步骤:
- 在Cloudflare添加你的域名
- 修改域名的NS记录指向Cloudflare
- DNS记录里的A记录指向Cloudflare的边缘IP(而不是你的源站IP)
- 在源站Nginx上配置只允许Cloudflare的IP段访问,拒绝直连
配置Nginx只允许Cloudflare IP段:
# 在server块里添加
allow 173.245.48.0/20;
allow 103.21.244.0/22;
# ... 其他Cloudflare IP段
deny all;这样即使攻击者知道你的源站IP,直接请求也会被Nginx拒绝。Cloudflare那边会挡住大部分DDoS流量。
第四步:配置防火墙规则限流
CDN接好后不代表万事大吉。源站本身还需要合理的防火墙策略。用ufw或iptables做基础加固:
# 限制SSH连接频率,60秒内只能新建6个连接
ufw limit ssh再配置fail2ban,自动封禁暴力尝试的IP:
apt install fail2ban -y
# 默认配置就能用,失败5次封10分钟用Nginx做应用层限流也很有效:
# nginx.conf的http块
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
# 在server或location块里
limit_req zone=mylimit burst=20 nodelay;限制单IP每秒10个请求,突发不超过20个。对正常用户无感,但能挡住简单粗暴的CC攻击。
第五步:切换高防IP或迁移
如果前面四步做完流量还在打、带宽跑满,说明攻击量级超出了你当前VPS的处理能力。这时候只有两条路:
临时购买高防IP:大部分主流云服务商都提供高防IP服务,按天或按月购买,有固定的防护峰值(比如10Gbps、50Gbps)。买的防护量要大于你正在遭受的攻击量,不然一样被黑洞。
换IP迁移:如果数据有备份,最快的办法是在同机房开一台新机器、把数据迁过去、DNS指向新的IP。雨云这类平台的入门VPS月付只要几块钱起,紧急情况开一台新机器换IP的成本很低。用优惠码 admin01 注册还能首月五折。
换IP后立刻接入CDN,别让新IP再次暴露。
日常预防该做哪些
被DDoS打过的都知道,预防比事后自救重要得多。日常就该做完的几件事:
- 网站一上线就接入CDN,关掉源站对公网的直接访问
- SSH改用密钥登录,禁用密码登录和root直接登录
- 给VPS做定期快照或者自动备份,方便随时迁移
- 监控流量基线——正常情况下你的服务器每天用多少流量要有数,突然暴涨才能第一时间发现
- 选VPS时问清楚服务商有没有免费的基础DDoS防护,机房有没有黑洞清洗策略
常见问题
DDoS攻击要不要报警?
如果攻击导致直接经济损失、或者属于敲诈勒索伴随攻击,可以报警并保留流量日志、攻击时间、源IP等信息作为证据。但大部分中小规模的DDoS,攻击源是境外被控的肉鸡,追溯难度大,短期内自救恢复服务比追查来源更重要。
套了CDN为什么还是被DDoS打?
通常是源站IP泄露了。检查你的网站是否在CDN接入前就已经暴露过IP(DNS历史记录可以查到),或者网站代码里有直接引用源站IP的地方(比如图片链接写的是源站IP)。另外,如果攻击量超过了CDN免费套餐的防护上限,也会被打透。
免费CDN能防住DDoS吗?
Cloudflare免费套餐对小型DDoS和CC攻击有效,但免费版的防护峰值有限、没有中国内地加速节点。如果你的用户主要在境内,建议搭配国内CDN厂商的防护方案,或者直接用云服务商自带的高防服务。






