服务器被 DDoS 攻击,低配置服务器自救方案
低配置服务器被 DDoS 攻击?这套自救方案零基础也能用
服务器刚被 DDoS 攻击时,很多新手第一反应是“完了,要花钱升级配置”。
其实只要攻击流量没超过带宽上限(例如 1Gbps 以下),多数情况下可以通过系统自带的工具扛住几个小时,争取申请更高防护的时间。
本文按零基础能照做的顺序展开,所有命令都能直接复制执行。
准备:快速判断攻击类型
先登录服务器,跑两条命令看当前负载和连接状态:
# 查看 CPU 和内存占用
top -bn1 | head -5
# 查看实时网络连接数(留意 SYN_RECV 状态数量)
ss -ant | awk '{print $1}' | sort | uniq -c | sort -rn
如果 SYN_RECV 连接数远超 ESTAB,说明是 SYN Flood 攻击;
如果网卡流量跑满但连接数正常,则是带宽型攻击。
低配置机器更怕连接耗尽型攻击,因为 CPU 和内存会被并发连接拖死。
接下来按照下面三步操作,多数情况下能让服务恢复响应。
第一步:用 iptables 限速,立刻释放 CPU
对于连接耗尽型攻击,最有效的办法是限制每秒新连接数量。
执行以下命令(以 SSH 为例,不要直接关闭自己的连接):
# 设置默认策略为接受(避免误拒绝 SSH)
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
# 限制来自每 IP 的 TCP 新连接数为 20/秒,突发 50
iptables -A INPUT -p tcp --syn -m limit --limit 20/s --limit-burst 50 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
如果攻击源 IP 比较固定,可以更精准地封禁:
# 假设攻击 IP 段为 123.45.67.0/24
iptables -A INPUT -s 123.45.67.0/24 -j DROP
注意:执行完 iptables -L -n 确认规则已生效。
如果系统重启后规则丢失,需要安装 iptables-persistent。
对于 CentOS/Rocky Linux:
yum install -y iptables-services
systemctl enable iptables
service iptables save
第二步:宝塔面板用户直接添加防火墙规则
如果你用的是宝塔面板,操作路径更直观:登录面板 → 安全 → 左侧 防火墙 → 点击 全局设置,开启 防火墙增强模式。
然后在 系统防火墙 中添加规则:
- 协议:TCP
- 端口:80,443(只针对 Web 服务)
- 策略:限制
- 每 IP 连接数:20
- 每秒请求数:5
保存后立刻生效。
此时页面提示“已成功添加规则”。
如果攻击集中在某个端口(如 80),也可以直接屏蔽该端口所有外部访问,然后在 CDN 层面做代理转发。
第三步:利用 Cloudflare 免费 CDN 隐藏源 IP
如果攻击源直接打到源站 IP,光靠限速不够,最好把域名接入 Cloudflare。
免费套餐也能过滤大量应用层攻击。
操作流程:
- 在 Cloudflare 添加域名,把 DNS 记录改成 Proxied(橙色云)。
- 在服务器上修改 Web 配置,只允许 Cloudflare 回源 IP 访问 80/443 端口。下载 官方 IP 列表 后,用 iptables 限制:
curl -s https://www.cloudflare.com/ips-v4 > /tmp/cf_ip.txt
for ip in $(cat /tmp/cf_ip.txt); do
iptables -A INPUT -p tcp --dport 80,443 -s $ip -j ACCEPT
done
iptables -A INPUT -p tcp --dport 80,443 -j DROP
完成后,攻击流量会先经过 Cloudflare 清洗,服务器压力骤降。
常见问题与避坑说明
Q:限速后自己打不开网站了?
A:检查 iptables 规则中是否放行了白名单 IP(比如你自己的办公公网 IP)。可以用 iptables -I INPUT -s 你的IP -j ACCEPT 插入到规则最前面。
Q:攻击流量超过服务器带宽上限怎么办?
A:限速和防火墙只能减轻 CPU 负载,如果带宽被占满,必须联系机房或购买更高防御。此时可临时添加 Cloudflare Spectrum,或者直接关掉非核心服务。
Q:规则重启后丢失?
A:参考前面 iptables-persistent 安装步骤。宝塔面板重启后规则不会丢,因为其规则存储在 /etc/firewall/ 中。
效果验证:确认攻击已被缓解
执行以下命令对比攻击前的数值:
# 查看当前实际连接数(尤其是 SYN_RECV 是否下降)
ss -ant | grep SYN_RECV | wc -l
# 查看网卡流量(是否恢复到正常值)
iftop -t -s 10
# 宝塔面板用户直接看实时负载图
通常 1-2 分钟内,CPU 占用会从 100% 降到 30% 以下,网站首页可正常打开。
如果此时攻击源改用大流量硬打,则说明需要更高防护,但至少你已经争取到了时间。
看完这套方案,建议先按步骤操作一遍,同时向云服务商或安全公司申请应急清洗。
低配置机器不是无法自救,关键是先堵住连接入口,再用 CDN 做外层过滤。
希望这份教程能帮你安稳度过被攻击的第一小时。