10/15 款服务器配置有货即时交付免安装费

安全

服务器 DDoS 防护的工作原理

每台服务器均含始终开启的网络层 DDoS 清洗。了解它能过滤哪些攻击、为什么 HTTP 洪水攻击需要您自行防御,以及怀疑遭受攻击时应采取的措施和需要提供给我们的信息。

阅读约 5 分钟更新于 LinuxWindows Server游戏服务器

适用于
LinuxWindows Server游戏服务器
阅读时间
5 分钟
更新日期
主题
安全

遇到问题?工程师 7×24 小时为您解答

本页目录

每台 DediJet 服务器均含始终开启的网络层 DDoS 清洗,不收取额外费用。无需安装或启用任何东西:系统会自动检测攻击,并在流量到达服务器端口之前于上游进行过滤。本页介绍该防护涵盖哪些内容、不涵盖哪些内容,以及如何让您自己的服务更难被打垮。

清洗的工作原理

进入我们网络的流量会被持续分析。一旦检测到针对您某个地址的攻击,该地址的流量就会在上游进行过滤:符合攻击特征的数据包被丢弃,合法数据包则继续送达您的服务器。清洗会自动启动,无需提交工单或任何手动操作。

我们会尽可能采用过滤而非黑洞路由(null route)。黑洞路由会丢弃发往某个 IP 地址的全部流量,仅作为最后手段。

过滤哪些攻击

清洗针对第 3 层和第 4 层攻击,这类攻击试图耗尽带宽或连接状态资源,仅凭数据包特征即可识别:

攻击类型原理
UDP 洪水攻击向您的地址发送大量 UDP 数据包,以占满链路带宽或压垮端口背后的服务。
SYN 洪水攻击大量从不完成的 TCP 连接请求,用于填满连接表。
ACK 洪水攻击伪造的 TCP 数据包,迫使服务器和网络设备查找并不存在的连接。
放大攻击:DNS、NTP、SSDP、memcached、CLDAP攻击者向互联网上配置不当的服务器发送伪造的小请求,这些服务器再向您的地址发送大得多的响应。

无法拦截的攻击:HTTP 洪水攻击

应用层(第 7 层)攻击发送的请求看起来完全有效:完整的 TCP 连接、正确的 HTTP 请求,而且往往来自大量真实的受感染设备。网络层过滤器无法将其与您的正常访客区分开,因此应用防护由您负责,应用层攻击也不在 SLA(服务等级协议)的保障范围内。有效的应对措施包括:

  • 在公开网站前部署反向代理、CDN 或 WAF。部署完成后,仅接受来自代理地址段的 HTTP 和 HTTPS 流量,防止攻击者直接攻击您的 IP 来绕过它。
  • 缓存,使重复请求根本不会到达您的应用程序和数据库。
  • 按客户端地址设置速率限制,并设置较短的超时时间,以抵御慢速请求攻击。

以下是 nginx 的入门配置。在 http 上下文中定义限流区域(zone),例如在 /etc/nginx/conf.d/limits.conf 中:

nginx
limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=connperip:10m;
limit_req_status 429;
client_header_timeout 10s;
client_body_timeout 10s;

然后在需要的地方应用这些限制:

nginx
location / {
    limit_req zone=perip burst=20 nodelay;
    limit_conn connperip 20;
    proxy_pass http://127.0.0.1:8080;
}

根据实际流量调整 rate 和 burst:一个需要加载 40 个资源的页面,比 API 端点需要更大的突发值(burst)。如果位于 CDN 之后,请先使用 real IP 模块(set_real_ip_from、real_ip_header)还原访客的真实地址;否则所有请求看起来都来自代理,限制会同时作用于所有访客。

遭受攻击时可能出现的现象

清洗是自动进行的,无需您执行任何操作。攻击开始、过滤生效的过程中,您可能会注意到延迟短暂升高,游戏服务器上的玩家也可能遇到短暂的卡顿。重启或重装系统无济于事:攻击流量针对的是您的 IP 地址,而不是操作系统。

怀疑遭受攻击时的处理方法

  1. 不要反复重启。重启无法阻止针对您地址的流量,反而会断开合法用户的连接,并增加诊断难度。请查看状态页面,了解是否存在全网范围的故障。

  2. 从外部检查网络路径。从您自己的电脑向服务器运行 mtr,并从服务器向您的电脑运行 mtr:

    Shell
    mtr -rwzc 100 203.0.113.10

    如果丢包从某一跳开始并一直延续到最后一跳,说明确实存在丢包。仅出现在某个中间跳的丢包,通常是该路由器对 ICMP 进行了限速。详情请参阅网络测试。

  3. 检查服务器本身。繁忙的应用程序也可能看起来像遭受了攻击。请将负载和连接数与平时的数值进行比较:

    Shell
    uptime
    ss -s
    ss -tn state syn-recv | wc -l
  4. 提交工单。如果服务器无法访问,请将工单标记为紧急:我们对紧急问题的首次响应目标为 30 分钟。请提供受影响的 IP 地址、带时区的开始和结束时间(使用 UTC 最方便)、您观察到的现象(丢包、延迟、涉及哪些端口或服务)、双向的 mtr 报告,以及(如有可能)一小段抓包数据:

    Shell
    tcpdump -ni any -c 2000 -w /root/attack.pcap

游戏服务器与 UDP

大多数游戏服务器使用 UDP 协议,因此经常成为攻击目标。UDP 洪水攻击和放大攻击会在到达您的端口之前于网络层被过滤;其余则取决于您的配置:

  • 只开放您实际使用的游戏端口,并将管理端口(RCON、Web 面板、数据库)限制为仅允许您自己的地址访问。
  • 保持服务器软件为最新版本:主流游戏引擎的新版本为查询数据包加入了质询-响应校验,使其无法被用于反射攻击。
  • 报告卡顿时,请记录时间、服务器地址以及玩家遇到的情况:没有时间戳的报告很难追查。

更多游戏托管建议请参阅游戏服务器。

避免自己成为放大器

放大攻击依赖于配置不当的服务器。请确保您的服务器不在此列;我们的可接受使用政策禁止将开放的 DNS 解析器和 NTP 服务器暴露在互联网上。

  • 使用 ss -ulpn 列出 UDP 监听服务,关闭所有并非有意对外提供的服务。
  • DNS:递归解析器只能响应您自己的网络(Unbound 中使用 access-control,BIND 中使用 allow-recursion)。
  • NTP:chrony 仅在配置了 allow 指令时才会向其他机器提供时间服务;除非确有需要,否则请勿添加该指令。
  • Memcached:将其绑定到 127.0.0.1,并保持 UDP 处于禁用状态(-U 0)。
  • SSDP 和 CLDAP:启用了 UPnP 的媒体服务器以及 Active Directory 域控制器,绝不应在公网地址上响应请求。

仍未解决?

需要帮助?

拥有在用服务器的客户可在账户中提交工单,工程师 7×24 小时为您解答。

技术支持流程