VPS被DDoS攻击后怎么自救?从封禁到恢复的五步操作

从流量异常识别到iptables封禁、CDN接入、高防切换,五步恢复VPS正常访问
发布于
3

VPS突然连不上,SSH断掉、网站打不开、面板也进不去——如果你正在经历这个,大概率是被DDoS了。这时候慌没用,按下面的步骤走,先止血再恢复。

怎么判断是不是DDoS攻击

不是所有的连不上都是DDoS。先排除几个常见情况:服务器欠费被停了、配置改错了、或者机房本身网络故障。如果你排除不了,先登录服务商的后台控制台,看VNC能不能连进去。

如果VNC能进,但公网IP完全ping不通、SSH连不上,十有八九是DDoS。进一步确认:在VNC里跑 iftopnload,如果看到入向流量跑到带宽上限、但出向流量几乎为零,这就是典型的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防护,接入步骤:

  1. 在Cloudflare添加你的域名
  2. 修改域名的NS记录指向Cloudflare
  3. DNS记录里的A记录指向Cloudflare的边缘IP(而不是你的源站IP)
  4. 在源站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厂商的防护方案,或者直接用云服务商自带的高防服务。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 讨论
热门最新
总结
暂无总结
0 / 600

VPS突然抽风——SSH连不上、控制台显示”Unknown”、机房通知物理机故障。慌的时候容易把本来就复杂的事情搞得更乱。本文是一份冷静状态下写好的恢复清单——按步骤走,二十分钟内把服务迁到新机器上。 第一步:确认挂到什么程度 先别急着重建

按网上的教程配了SSH密钥、禁了密码登录,结果退出后连不上了——这种翻车事故每年都在重复上演。本文把SSH配置中的常见翻车点和恢复方法系统讲一遍。 翻车一:改了配置文件重启SSH后连不上 最经典的翻车:改了/etc/ssh/sshd_con

一台VPS撑不住了——CPU跑满、带宽打满、偶尔502。这时候加配置是一条路,但单机的上限摆在那里。更灵活的做法是加机器做负载均衡:多台VPS分担流量,一台挂了其他继续服务。本文用Nginx反向代理搭建一个最基础的负载均衡方案,三台后端服务

VPS用着用着突然变卡,网站打开要好几秒、SSH敲命令有明显延迟——这种情况比完全断连更难排查。不是挂了,是慢了。本文用四个命令分别定位CPU、内存、磁盘IO和网络的瓶颈,告诉你性能卡在哪个环节。 排查前的第一步:确认不是自己的网络问题 很

新开的VPS默认用root+密码登录、22端口全网开放,等于把门钥匙挂在门口。搞定这五个安全设置最多花半小时,把脚本小子和自动扫描器挡在外面。每一步都有命令,照做就行。 第一步:创建普通用户、禁用root直接登录 root是每台Linux都