本页目录
每台 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 中:
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;然后在需要的地方应用这些限制:
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 地址,而不是操作系统。
怀疑遭受攻击时的处理方法
不要反复重启。重启无法阻止针对您地址的流量,反而会断开合法用户的连接,并增加诊断难度。请查看状态页面,了解是否存在全网范围的故障。
从外部检查网络路径。从您自己的电脑向服务器运行 mtr,并从服务器向您的电脑运行 mtr:
mtr -rwzc 100 203.0.113.10如果丢包从某一跳开始并一直延续到最后一跳,说明确实存在丢包。仅出现在某个中间跳的丢包,通常是该路由器对 ICMP 进行了限速。详情请参阅网络测试。
检查服务器本身。繁忙的应用程序也可能看起来像遭受了攻击。请将负载和连接数与平时的数值进行比较:
uptime ss -s ss -tn state syn-recv | wc -l提交工单。如果服务器无法访问,请将工单标记为紧急:我们对紧急问题的首次响应目标为 30 分钟。请提供受影响的 IP 地址、带时区的开始和结束时间(使用 UTC 最方便)、您观察到的现象(丢包、延迟、涉及哪些端口或服务)、双向的 mtr 报告,以及(如有可能)一小段抓包数据:
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 域控制器,绝不应在公网地址上响应请求。
仍未解决?
- 使用新服务器安全加固中的方法,收窄其余的攻击面。
- 在网络与 DDoS 防护页面了解我们网络的架构。
- 正在遭受攻击,却无法判断看到的是什么情况?提交工单:DDoS 清洗属于 7×24 小时技术支持的服务范围。