背景
是咁的,香港有個比較出名既鐵路向Minecraft server叫Project Nazca (PNS) , 樹大招風,最近呢個禮拜狂被人DDoS。
作為過來人,我前兩日出手嘗試幫下佢地。
關於DDoS攻擊
針對Minecraft server既DDoS攻擊黎黎去去都係L3/L4攻擊,絕少係L7 (除非舊版Minecraft),因為可以用防火牆block到。L3/L4攻擊之中,UDP Flood (NTP/DNS等 Amplication) 最常被用都最係實用。
要避免直接受到UDP攻擊,需要技術;而要減低攻擊影響,需要大量的金錢(頻寬)。
難題
PNS行Minecraft server既OS係Windows,叫人無啦啦裝Linux(好多方面)應該難過登天。佢地亦要知玩家IP,唔可以全部127.0.0.1
。GRE + CF WST大法因此直接收皮,唔可以係佢地Server行到。
解決方法
BungeeCord係一個Minecraft server既proxy/多伺服管理程式,配合埋Spigot用,可以做到IP forwarding (差唔多等同L7 transparent proxy)。因此,我既propose係有兩條路:
用GRE Tunnel既: 玩家 <-> GRE Server <-> BungeeCord Server <-> PNS
同埋用CloudFlare + Websocket + WSTunnel做後備既玩家 (WSTClient) <-> CloudFlare <-> BungeeCord Server <-> PNS
當中GRE Server同BungeeCord Server都係我黎提供,全部Server都係香港Server,咁既話可以做到:
- 隱藏IP (教埋佢地點set CloudFlare DNS同轉IP)
- 防DDoS (攻擊者唔會搵到PNS IP,亦唔會搵到BungeeCord Server IP)
- 保持低Ping
- 睇到玩家IP
- 就算攻擊者惡到ko晒所有GRE Server,玩家仲有後路入Ser玩
奶野
BungeeCord要求Minecraft server熄online mode,但PNS admin話佢地之前試過熄過online mode一次,玩家物品唔見晒 (我諗係UUID搞事)。
收皮
垃圾Windows唔support呢樣(GRE)唔support果樣(IP_TRANSPARENT
),令成個計劃失敗。
要到PNS肯將成個Minecraft server搬落VM Linux or baremetal Linux先得。當然BSD既話我都可以睇下點搞。
將玩家連線倒落Linux VM,Minecraft server同VM一齊玩SNAT DNAT,令server可以睇返玩家IP,唔知得唔得呢?我冇咁得閒研究啦。
Extra read
- https://blog.wtako.net/view/24/
- See recommendations below