香港服务器DDoS防护完整方案:流量清洗、IP封禁与高防服务选型实战

香港服务器因网络质量好、地理位置优越,同样也是DDoS攻击的高发目标,尤其是游戏服务器和电商平台。本文从免费防护方案到商业高防服务,给出层次化的DDoS防护体系。

一、DDoS攻击类型与识别

攻击类型特征防御难度常见目标
UDP Flood海量UDP包占满带宽中等游戏服务器
SYN Flood大量半开连接耗尽连接表较低(内核可防)Web服务器
HTTP Flood(CC)模拟正常HTTP请求,语义层攻击所有Web应用
ICMP Flood大量ping包耗尽带宽低(可直接屏蔽ICMP)任意服务器
DNS放大攻击伪造源IP请求DNS,响应包砸向受害者中等带宽耗尽型

攻击发生时的判断方法

<code"># 1. 查看当前连接数(异常增多)
ss -s
netstat -an | grep ESTABLISHED | wc -l

# 2. 查看实时流量(带宽打满)
iftop -i eth0 -n       # 实时带宽监控
nethogs eth0           # 按进程查看流量

# 3. 查看TOP来源IP(大量相同/相似IP)
netstat -an | awk '/tcp/ {print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20

# 4. 查看异常高频请求IP(Nginx日志)
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

# 5. 系统负载异常
uptime    # load average突增
dmesg | grep -i "dropping" | tail -20

二、第一层防护:Cloudflare免费DDoS防护

Cloudflare橙云代理模式下,攻击流量会被Cloudflare的全球网络吸收,源站IP被隐藏,是最基础也是最有效的DDoS防护手段。

开启Under Attack模式

<code"># 攻击发生时,通过Cloudflare API切换到Under Attack模式
# 所有访问者都需要完成5秒JS验证

curl -X PATCH "https://api.cloudflare.com/client/v4/zones/你的Zone_ID/settings/security_level" \
    -H "Authorization: Bearer 你的API_Token" \
    -H "Content-Type: application/json" \
    --data '{"value":"under_attack"}'

# 攻击结束后恢复正常模式
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/你的Zone_ID/settings/security_level" \
    -H "Authorization: Bearer 你的API_Token" \
    -H "Content-Type: application/json" \
    --data '{"value":"medium"}'

Cloudflare防火墙规则(应对CC攻击)

<code"># 在Cloudflare Dashboard → Security → WAF → Rules创建规则

# 规则1:对高频访问IP触发Challenge
# 条件:同一IP每分钟超过100次请求
# 操作:Managed Challenge(JS验证)

# 规则2:封禁已知恶意User-Agent
# 条件:User-Agent包含 python-requests / curl / Go-http-client 等自动化工具特征
# 操作:Block

# 规则3:封禁可疑的高频API请求
# 条件:URI路径包含 /api/ AND 请求速率 > 50/分钟
# 操作:Rate Limit → Block 10分钟

三、第二层防护:服务器本地防御

iptables防御SYN Flood

<code"># 限制新建连接速率(防SYN Flood)
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 5 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP

# 对单IP的ICMP限速(防ICMP Flood)
iptables -A INPUT -p icmp --icmp-type echo-request \
    -m limit --limit 1/second --limit-burst 10 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

# 批量封禁攻击IP(从攻击IP列表导入)
# 方法1:ipset(高效,支持大量IP)
apt install ipset -y
ipset create blocklist hash:ip maxelem 1000000 timeout 3600

# 将攻击IP加入黑名单(封禁1小时)
ipset add blocklist 1.2.3.4 timeout 3600

# 创建iptables规则匹配ipset
iptables -I INPUT 1 -m set --match-set blocklist src -j DROP

# 方法2:批量添加(从文件)
while read ip; do
    ipset add blocklist "$ip" timeout 3600 2>/dev/null
done < /tmp/attack_ips.txt

Nginx层CC防御

<code">http {
    # 连接限制(全局)
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    limit_req_zone  $binary_remote_addr zone=api:10m rate=10r/s;
    limit_req_zone  $binary_remote_addr zone=web:10m rate=30r/s;

    server {
        # 每IP最多100个并发连接
        limit_conn addr 100;

        # 普通页面:每秒30次请求,突发50次
        location / {
            limit_req zone=web burst=50 nodelay;
            limit_req_status 429;
        }

        # API接口:每秒10次请求,更严格
        location /api/ {
            limit_req zone=api burst=20 nodelay;
            limit_req_status 429;

            # 返回429时的响应体
            error_page 429 = @rate_limit_error;
        }

        location @rate_limit_error {
            add_header Retry-After 60 always;
            return 429 '{"error":"请求过于频繁,请60秒后重试","code":429}';
        }
    }
}

自动封禁高频攻击IP

<code">#!/bin/bash
# /usr/local/bin/auto-block-ddos.sh
# 每分钟运行,自动封禁超过阈值的IP

THRESHOLD=500    # 1分钟内请求超过500次则封禁
BLOCK_DURATION=3600  # 封禁1小时

# 分析最近1分钟的Nginx日志
ATTACK_IPS=$(awk -v start="$(date -d '1 minute ago' '+%d/%b/%Y:%H:%M')" \
    '$4 > "["start' /var/log/nginx/access.log | \
    awk '{print $1}' | sort | uniq -c | sort -rn | \
    awk -v t="$THRESHOLD" '$1 > t {print $2}')

for IP in $ATTACK_IPS; do
    # 跳过白名单(Cloudflare IP段等)
    if echo "$IP" | grep -qE "^(127\.|10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.|192\.168\.)"; then
        continue
    fi

    # 封禁IP(ipset)
    ipset add blocklist "$IP" timeout "$BLOCK_DURATION" 2>/dev/null && \
        echo "$(date): 已封禁攻击IP $IP(请求超过${THRESHOLD}次/分钟)" >> /var/log/ddos-block.log
done

四、第三层:高防IP服务选型

当攻击流量超过Cloudflare免费版(5Gbps软限制)或需要保护非HTTP服务(游戏UDP流量)时,需要购买专业高防服务。

服务商防护容量延迟影响价格参考适用场景
Cloudflare Magic Transit理论无上限极小(BGP宣告)企业定价大型企业
AWS Shield Advanced$3000/月起AWS生态
国内高防IP(阿里/腾讯)300Gbps~T级有延迟增加数千~数万元/月大陆用户为主
香港高防IP(本地服务商)10~300Gbps数百~数千元/月香港节点保护

五、应急响应步骤

<code">DDoS攻击发生时的处置步骤:

1. 确认攻击(1分钟内)
   □ 确认是真实攻击还是业务流量突增
   □ 判断攻击类型(带宽型/CC型/协议型)

2. 开启Cloudflare Under Attack模式(立即)
   □ 通过API或Dashboard一键开启

3. 临时封禁主要攻击源IP(5分钟内)
   □ ipset批量封禁主要攻击IP段

4. 收集证据(同步进行)
   □ 保存tcpdump抓包数据
   □ 保存Nginx访问日志

5. 联系IDC评估需求
   □ 判断是否需要升级到高防IP

6. 攻击结束后复盘(24小时内)
   □ 分析攻击规模、类型、来源
   □ 加固防御规则,防止同类攻击

六、总结

香港服务器DDoS防护的推荐层次:Cloudflare橙云(隐藏IP,吸收HTTP层攻击)→ Nginx限流(本地CC防御)→ iptables/ipset(封禁攻击IP)→ 高防IP(大流量带宽型攻击)。对于大多数网站,Cloudflare免费版配合Nginx限流已经能抵御95%以上的DDoS攻击。IDC.Net提供香港高防服务器方案,对于游戏服务器和高价值业务,可以选择配备高防IP的独立服务器。

THE END