保护 Conan Exiles 服务器免受 DDoS 攻击

发布于 阅读时间 28 分钟

一台 Conan Exiles 服务器真正需要哪些端口,如何加固 RCON 和查询端口,为什么 PvP 服务器恰好在突袭时段被攻击,以及攻击达到什么量级之后就只能靠服务器前面的网络过滤。

一台 Conan Exiles 服务器如果偏偏在 Raid 时段(突袭时段)开始时就连不上了,问题很少出在硬件上。绝大多数情况下是有人正在攻击,而且时间恰好选在破坏力最大的时候。本文讲清楚 Conan Exiles 服务器为什么需要 DDoS 防护,您在接下来的十分钟里不花额外费用就能自己加固什么,这些措施在技术上到哪里结束,以及之后服务器前面的网络里必须发生什么。

所有说明都针对 Funcom 的独立服务器,也就是 ConanSandboxServer.exe 或者 StartServer.bat。配置放在 ConanSandbox\Saved\Config\WindowsServer\ 目录下的三个文件里:ServerSettings.ini、Engine.ini 和 Game.ini。即使您在 Linux 上通过兼容层运行服务器也是如此,因为 Funcom 只发布 Windows 版程序,所以那里的路径同样叫 WindowsServer。

如果攻击正在进行:请先保存测量数据(第 9 节),攻击结束后,这些数据就没有了。而且现在不要编辑任何 INI 文件。Conan Exiles 把配置保存在内存里,退出时再写回去,在服务器运行期间做的每一处改动都会因此丢失。

Conan Exiles 服务器为什么需要 DDoS 防护

在大多数游戏里,服务器宕机只是让人心烦。在 Conan Exiles 的 PvP 服务器上,它是一步棋。损失是永久的,一座基地只能在规定的时间窗口内被破坏,而谁在这个窗口里把防守方从游戏里赶出去,就等于在无人抵抗的情况下突袭。这样一来,攻击有了具体的收益和事先就知道的时间点,而且一旦成功过一次就会重复。

这个时间窗口不是什么秘密。它写在 ServerSettings.ini 里,玩家对战由 RestrictPVPTime 决定,建筑伤害由 RestrictPVPBuildingDamageTime 决定,而每一位运营者都会自愿把它写进服务器名称、规则说明和 Discord 里,否则玩家根本不会知道。所以攻击者不需要侦察什么:他在这些被宣传的地方读到突袭时间,然后把攻击安排在同一个时刻。

而对方要付出的代价低得出奇。所谓的 booter 或 stresser 服务按分钟出售针对某个 IP 地址和某个端口的洪水攻击。针对 7777 UDP 的端口 DDoS 既不需要进入游戏,也不需要了解您的服务器,有地址和端口号就够了。正因如此,小服务器和大服务器一样被稳定地打中。

再加上一个把 Conan Exiles 与大多数生存类游戏区分开的特点。ServerSettings.ini 里有一个开关 LogoutCharactersRemainInTheWorld。它设为 True 时,游戏角色在掉线后会留在世界里站着,而不是消失。于是一次把所有玩家同时踢出游戏的攻击,会留下一排连装备一起不动的角色。这样一次攻击在技术上发生了什么,见文章 什么是 DDoS 攻击?。

技术上,全部游戏流量都走 UDP。UDP 没有可以强制要求的连接建立过程,源地址也可以伪造。因此攻击者既不必进入您的服务器,也不必正确地跟它对话,就能制造负载。他甚至不需要知道是否有人在线。

真正相关的那些端口

一台 Conan Exiles 服务器对外只需要三个 UDP 端口:7777、7778 和 27015。其余的要么是可选的,要么根本不该放在开放网络里。Funcom 对端口占用的说明如下:

端口 协议 用途 在哪里设置
7777 UDP 游戏流量(移动、战斗、建造、同步) Engine.ini 的 [URL] 小节,Port=7777,启动参数 -Port=
7778 UDP Pinger(响应 ping 的端口),固定为游戏端口加一 Engine.ini 的 [URL] 小节,PeerPort=7778
27015 UDP 供服务器列表使用的 Steam 格式状态查询 Engine.ini 的 [OnlineSubsystemSteam],ServerQueryPort,启动参数 -QueryPort=
7777 TCP 向客户端传输 Mod,仅按需开启 与游戏端口相同
25575 TCP RCON 远程控制,出厂默认关闭 Game.ini 的 [RconPlugin] 小节,RconPort=25575,启动参数 -RconPort=

其中有三件事经常被做错。第一,7778 不是一个可以自由选择的端口,而永远是游戏端口加一。因此在同一台机器上运行两个实例的人必须以二为步长往上跳:第一个实例用 7777 和 7778,第二个用 7779 和 7780,再配上 27015 和 27016 作为查询端口。把第二个实例放在 7778 上的人,等于抢走了第一个实例的 Pinger。

第二,7777 上的 TCP 放行是 Mod 传输。Funcom 只在客户端请求时才开启它,而且只有来自 Epic Games Store 的客户端会请求。Steam 客户端仍然通过 Steam 创意工坊接口获取 Mod。如果您的玩家全都从 Steam 来,就不需要这条放行。

第三,RCON 出厂默认是关着的。RconEnabled 默认为 0。谁发现这个端口仍然开着,那就是自己打开了它,或者照抄了某个主机商的现成模板。

在花钱之前,您自己能做的事

下面九个步骤不花钱,而且对实践中最常见的情况有效:来自少数来源的小规模定向洪水攻击、被滥用的查询端口、RCON 上的登录尝试,以及单个 Mod 造成的过载。即使前面已经有网络过滤在工作,这些步骤也值得做。

1. 清点:服务器上有什么在监听?

在写下第一条规则之前,先看清楚您的服务器对外提供了什么。不要猜,要查。在 Windows 上:

Get-NetUDPEndpoint | Where-Object LocalPort -in 7777,7778,27015
Get-NetTCPConnection -State Listen | Sort-Object LocalPort
netstat -ano -p UDP | findstr "7777 7778 27015"

如果服务器在 Linux 上通过兼容层运行,对应的命令是:

ss -lnup
ss -lntp

要看的是本地地址那一列。0.0.0.0:7777 表示“整个互联网都能访问”,127.0.0.1:25575 表示“仅本机”,不需要防火墙规则。从外面做一次端口扫描,就能看到攻击者眼中的样子,而且明确也要扫 UDP,因为在 Conan Exiles 上纯 TCP 扫描几乎什么都找不到:

nmap -Pn -sU -p 7777,7778,27015 YOUR.SERVER.IP.ADDRESS
nmap -Pn -p 7777,25575 YOUR.SERVER.IP.ADDRESS

2. 只开放这三个 UDP 端口

在 Windows 上,内置防火墙里两条规则就够了。第一条开放游戏运行,第二条把 RCON 限制到您自己的地址,而不是对所有人开放这个端口:

New-NetFirewallRule -DisplayName "Conan Exiles" -Direction Inbound -Protocol UDP -LocalPort 7777,7778,27015 -Action Allow
New-NetFirewallRule -DisplayName "Conan RCON" -Direction Inbound -Protocol TCP -LocalPort 25575 -RemoteAddress 203.0.113.10 -Action Allow
Get-NetFirewallRule -DisplayName "Conan*" | Format-Table DisplayName,Enabled,Direction,Action

在 Linux 上,同样的事情用 UFW 是这样,而且顺序必须完全照此执行,以免把自己关在门外:

ufw allow 22/tcp comment 'SSH'
ufw allow 7777/udp comment 'Conan Exiles'
ufw allow 7778/udp comment 'Conan Exiles Pinger'
ufw allow 27015/udp comment 'Conan Exiles Query'
ufw allow from 203.0.113.10 to any port 25575 proto tcp comment 'RCON'
ufw default deny incoming
ufw --force enable
ufw status verbose

请把 203.0.113.10 换成您自己的地址。包含自救办法的完整说明见 设置 UFW 防火墙而不把自己关在门外。只要您的玩家没有一个是从 Epic Games Store 来的,7777 上的 TCP 放行就可以不做。

3. 加固 RCON 或者干脆关掉

RCON 是一个对您服务器有完整权限的远程控制:踢人、封禁、发消息、执行命令。它跑在 TCP 25575 上,在 Game.ini 里配置:

[RconPlugin]
RconEnabled=0
RconPort=25575
RconPassword=
RconMaxKarma=60

如果您不需要 RCON,就让 RconEnabled=0 保持原样。这是默认值,也是最安全的设置。如果需要它,有三条规则。第一:RconPassword 必须又长又随机,因为 RCON 协议以未加密方式把密码送上线路。第二:这个端口不属于开放的互联网,而应限制到您自己的地址,或者放在一个 SSH 通道后面。第三:RconMaxKarma 是内置的抗登录洪水攻击手段,默认值是 60。这个计数器限制一个来源在短时间内可以连续发出多少请求,超过就被拒绝。

此外,一个开放的 RCON 端口是您在网络上存在的可靠线索。大范围扫描 25575 的人会找到游戏服务器,而一台前面没有过滤的游戏服务器是很值得下手的目标。

4. 限制查询端口,而不是关掉它

27015 UDP 端口回答 Steam 格式的状态查询。A2S 查询是一个简短的 UDP 请求,客户端用它取得服务器名称、地图、玩家数和游戏时间,而不必启动游戏。服务器列表、您的状态页面,以及每一个显示在线人数的 Discord 机器人,需要的正是这个。

不要关掉这个端口。否则您的服务器会从服务器列表里消失,新玩家再也找不到它。正确的做法是按源地址设一个上限。在 Linux 上:

iptables -I INPUT -p udp --dport 27015 -m hashlimit --hashlimit-name conan_query --hashlimit-mode srcip --hashlimit-above 10/sec --hashlimit-burst 20 -j DROP
iptables -L INPUT -n -v | head -20

每个来源每秒十次查询,对真实玩家和任何监控都够用,但会丢弃每秒发来成千上万个请求的来源。请用 apt-get install -y iptables-persistent 和 netfilter-persistent save 把规则保存下来,否则下一次重启后它就没了。在 UFW 下它应写进 /etc/ufw/before.rules。

不过这里有一条硬性限制,而且它涉及大多数 Conan Exiles 运营者:Windows 防火墙不认识按源地址的限制。它可以开放、关闭一个端口,或者把它限制到固定地址,但它没法说“每个发送方每秒最多十个数据包”。在 Windows 服务器上,这项任务根本没有现成的系统工具,因此限制必须在服务器前面的网络里完成。

第二点涉及反方向的滥用。反射攻击的意思是:攻击者用伪造的源地址把查询发给成千上万台游戏服务器,而回应全都落到某个第三方身上。因为一个 A2S 回应比请求大,流量在途中被成倍放大。这时您的服务器不是受害者,而是武器,而且出站流量由您付费。Valve 为此引入了一套问答机制:服务器可以先用一个反问来回应 A2S 查询,而使用伪造地址的发送方无法回答这个反问。它只有在被打开的地方才有效,所以对 27015 的速率限制在任何情况下都是必须的。

5. 服务器密码、管理员密码和槽位

ServerSettings.ini 里有三项设置直接决定攻击面:

[ServerSettings]
AdminPassword=
ServerPassword=
MaxPlayers=40
IsBattlEyeEnabled=True

AdminPassword 是整个文件里最关键的值。它不是控制台入口,而是一名正常连接进来的玩家在游戏里给自己开管理员权限所用的密码。一个短的或者被猜到的管理员密码带来的不是延迟,而是服务器的丢失。请把它设得又长又随机,并在有团队成员离开时立刻更换。

ServerPassword 把一台公开服务器变成私人服务器。它对捣乱的玩家、一次性账号,以及所有走正规加入途径的人都有效。对针对线路的攻击它不起作用:灌包攻击您服务器的人根本不想加入。他的数据包会被拒绝,但已经到了,而这才是关键。

MaxPlayers 限制槽位数,也可以通过启动参数 -MaxPlayers= 设置。一个现实的上限同样是一项保护措施:每一个已连接的客户端都会持续产生数据包,而槽位数超过机器承受能力的服务器,在正常运行下就已经会崩。

6. BattlEye 能做什么,不能做什么

Conan Exiles 通过 ServerSettings.ini 里的 IsBattlEyeEnabled 自带一项反作弊检查。它应该打开,但它不是 DDoS 防护,原因是结构性的:反作弊检查的是已经连接进来的客户端。它跑在与游戏同一个进程里,只有在服务器本来就已经处理过一个数据包之后才看得到它。这个进程一旦跑满,检查逻辑就跟着一起沉下去。

您额外安装的每一个服务器端工具也是同样的道理。凡是跑在服务器上的东西,只能丢弃已经到了的东西。反作弊保护的是游戏规则,不是可用性。

7. 把 Mod 保持干净

在经过修改的 Conan Exiles 服务器上,被报告的宕机里有相当一部分根本不是攻击。Mod 列表以 modlist.txt 的形式放在同一个配置目录里,而每一个 Mod 都跑在与游戏同一个进程里。一个带死循环、tick 过密或者没有上限的数据库查询的 Mod,能像一次攻击一样让服务器停住,只是不会有醒目的数据包速率。

区分方法很简单,而且应该总是放在最前面。如果网卡的数据包速率大幅上升,而机器几乎没在干活,那就是攻击。如果数据包速率正常却依然什么都卡,那就是软件问题。有疑问时把 Mod 列表去掉一半再重启,两轮就能把原因缩小到位。

第二点非常实用:一次游戏更新之后,Mod 和服务器版本往往就不再匹配了。玩家在加入时被弹出去,Discord 里写着“服务器挂了”,所有人都在找一个并不存在的攻击。每次更新之后请先检查 Mod 列表。

8. 地址和突袭时间

您的 IP 地址无法保密。它写在服务器列表条目里,否则谁也进不来,而每一个曾经连过的玩家都知道它。换地址能争取时间,但不是解决办法:攻击者会从和旧地址同一个来源读到新地址,多数在几分钟到几小时之内。

尽管如此,有两个习惯是有用的。不要自己在任何地方公布裸 IP 地址,也就是不要发在 Discord 里,也不要写在项目页面上;并且让您的玩家通过一个主机名连接,这样换地址就不会让每一处引用都失效。这里的经典错误是一条指向旧地址、被遗忘的 A 记录,它会让任何更换都失去意义。

至于突袭时间,情况正好与隐藏相反:您需要它是公开的,否则您的服务器就没法运转。请把它用于诊断。如果您的服务器连续三个晚上都在 18:05 掉线,而您的突袭时段从 18:00 开始,那就不再是猜测,而是一个可以附在工单里的模式。

9. 用测量代替猜测

最重要的一步是几乎没人事先做的那一步:在一切正常的时候先建立基线。没有正常值,事后您就说不清每秒 4 万个数据包是很多,还是就是一个人很满的周五晚上。在 Windows 上,系统自带的工具就够用:

Get-NetAdapterStatistics
typeperf "\Network Interface(*)\Packets Received/sec" -sc 20
typeperf "\Network Interface(*)\Bytes Received/sec" -sc 20

在 Linux 上,对应的命令是:

sar -n DEV 1 10
ip -s link show eth0
tcpdump -ni eth0 udp port 7777 or udp port 27015 -c 200 -q

用 tcpdump 时有一条铁律:一定要用 -c 限制数量,满载状态下抓包会让本来已经过载的服务器更吃力。Conan Exiles 的服务器日志放在 ConanSandbox\Saved\Logs\ 目录里,加上启动参数 -log 还会额外在一个窗口里同步输出。存档以单个文件的形式放在 ConanSandbox\Saved\game.db:在压力下动手改任何东西之前,请先把它备份下来。如何解读这些测量数据,见 识别 DDoS 攻击。

这些措施到哪里为止:带宽和数据包速率

现在说没有任何 INI 文件能解决的那一部分。前面所有措施都跑在您的服务器上,也就是线路的末端。防火墙规则处理的是已经跑过网线的数据包。您可以把它丢弃,但没法让它没被发出来。

算一下就清楚了。一台典型的游戏服务器挂在 1 Gbit/s 上,也就是每秒 125 兆字节,只要有人发得比这更多,线路就满了。针对生存类服务器的攻击通常在 5 到 50 Gbit/s 之间,也就是您线路的五到五十倍。到那时,您后面的规则写得好不好已经无关紧要,因为您玩家的数据包在更早的地方就已经过不来了。

第二个量是数据包速率,而它几乎总是比带宽先出事。在 64 字节的小包情况下,1 Gbit/s 的线路里能装进每秒约 149 万个数据包。普通服务器视 CPU 和网卡而定,处理其中几十万个之后就会开始丢弃。因此,一次连您线路三分之一都填不满的攻击,仍然可能让您的 Conan Exiles 服务器瘫掉,因为计算时间都花在丢弃上了。运营者的体验是“负载根本不高,可是什么都没了”。

在 Conan Exiles 上还有一个加重问题的因素:整个游戏世界跑在一个进程里。没有第二个实例能在第一个忙着的时候继续运转。这个进程一旦拿不到计算时间,战斗、建造和存档就会同时停住。

为了有个参照,说明真实出现过的数量级:在 KernelHost 的服务器上,过滤过的攻击包括一次针对语音服务器、超过 473.4 Gbit/s、每秒超过 4150 万个数据包的攻击,以及一次针对游戏服务器、超过 112.2 Gbit/s 的 UDP 洪水攻击。对此没有任何本地设置可用。流量型攻击必须在服务器前面的网络里就被终结。

KernelHost 用什么来应对

每台服务器都标配的持续防护

KernelHost 的 DDoS 防护分两级,持续生效,您不需要开启、订购或配置任何东西:

  • 第 1 级:全球清洗网络中 17 Tbps 的清洗能力。流量型攻击在靠近来源的地方就被清洗掉,不会到达数据中心。
  • 第 2 级:法兰克福的 Arbor 实时过滤,容量 3.2 Tbps。就在服务器前面,逐个数据包地识别并丢弃与协议相关的攻击特征。

有两点是关键。防护持续运行,不需要先对攻击做出反应,所以开头不会有服务器失联的那几分钟。对本来只有几个小时的突袭时段来说,这一点正是要害。而且不使用黑洞路由:您的 IP 地址留在网络里,被丢弃的只有恶意数据包。把 IP 地址从网络里撤下来的做法,对您而言和攻击者达到的结果一样。哪些游戏和协议在覆盖范围内,见 实时游戏服务器 DDoS 防护。

针对长期被攻击服务器的 Advanced DDoS Protection

有些服务器不是偶尔被打,而是被有针对性地连打几周,通常总在同一个时刻。为此有 Advanced DDoS Protection,每月 50.00 欧元起,PrePaid 预付费,没有最低合约期,也没有开通费。区别不在于容量更大,而在于控制权:

  • 专用防护 IP,来自法兰克福的核心网络,您的服务器会在我们自己的网络内切换到它。您这边不需要做任何改造。
  • 按端口和协议自行管理的防护规则,就在客户中心里:您可以分别设置 7777 UDP、7778 UDP 和 27015 UDP 上允许什么。而服务器本身恰恰缺少这种分开设置的能力,在 Windows 上尤其如此。
  • 改动实时生效,因此您可以在攻击进行时随时调整,而不用等到第二天早上。
  • 与游戏匹配的防护策略,同样适用于任意 TCP 或 UDP 端口上经过修改的程序和自研程序。

两级防护对比

对比项 标配的 DDoS 持续防护 Advanced DDoS Protection
价格 包含在每个服务器套餐中,不额外收费 每月 50.00 欧元起,PrePaid 预付费
过滤能力 17 Tbps 全球清洗,加上法兰克福 3.2 Tbps 的 Arbor 实时过滤 同样的两级过滤
IP 地址 您服务器本身的 IP 地址 额外的专用防护 IP
规则集 自动防护策略,无需配置 在客户中心里按端口和协议设置自己的规则
查询端口 27015 自动一并过滤 独立的速率限制,与游戏端口分开
变更 自动跟进 实时生效,攻击进行时也可以
黑洞路由 否 否
合约期 与服务器套餐绑定 PrePaid 预付费,没有最低合约期,没有退订通知期,也没有开通费

对大多数 Conan Exiles 服务器来说,标配的持续防护配上一份干净的配置就够了。Advanced DDoS Protection 针对的是有人把这件事当成私人恩怨的情况。目前把服务器放在别处、并且在那里经常被从网络里撤下来的人,最可靠的解决办法是搬迁:过滤应该在服务器所在的那个网络里。

常见错误及解决办法

“我在 ServerSettings.ini 里的改动重启之后又没了”:编辑的时候服务器还在跑。Conan Exiles 把配置保存在内存里,退出时再写回文件,您的改动就被覆盖了。请先停服务器,等一下,再编辑,然后启动。另外请编辑 Saved\Config\WindowsServer\ 下的文件,而不是旁边的模板,否则下一次游戏更新会把一切覆盖掉。

“我改了端口,现在服务器不在列表里了”:查询端口没有跟着改。游戏端口和查询端口是两个独立的值,而游戏端口加一上的 Pinger 同样必须空着并被放行。请把 Engine.ini 里的 [URL] Port 和 PeerPort 对照 ServerQueryPort 以及您的防火墙规则检查一遍。

“我换了 IP 地址,两小时后又离线了”:攻击者从和旧地址同一个来源拿到了新地址,多数是服务器列表条目、一个带状态显示的 Discord 机器人,或者一条旧的 DNS 记录。换地址是争取时间,不是解决办法。

“RCON 日志里有几百条失败的登录”:这是 25575 TCP 上的登录洪水攻击,它打的是游戏逻辑,不是线路。RconMaxKarma 能把它压下去,真正结束它的办法是把这个端口限制到您自己的地址,或者用 RconEnabled=0 关掉 RCON。

“每隔几分钟就有延迟尖峰,但服务器从来不完全离线”:这是脉冲式洪水攻击的典型画面。几秒钟的冲击就足以让数据包被丢弃,却会低于任何会触发告警的阈值。所以请按秒测量,而不要用五分钟平均值,否则您的分析只会显示一个毫无异常的平均数,而您的玩家每隔几分钟就被踢出战斗。

“所有玩家都卡顿,但网络计数器毫无异常”:这不是 DDoS 攻击。如果 Get-NetAdapterStatistics 或者 sar -n DEV 1 10 都在正常范围内,原因就在软件上。先检查 Mod 列表,然后把服务器版本和各个 Mod 的版本对一遍。

“我原来的主机商把我的 IP 地址封了”:那就是黑洞路由。主机商用它保护自己的网络,对您来说结果和一次成功的攻击完全一样,而且通常在攻击结束后还要持续几个小时。有疑问时请直接问清楚:是过滤还是黑洞路由。这个答案对您可用性的影响,比任何硬件参数都大。

“我在抓包里看不到任何异常”:如果流量已经在前面的网络里被过滤掉了,服务器上当然就什么都收不到。这在过滤正常工作时是常态。反过来说:线路一旦被打满,您甚至可能连用来测量的那条远程管理连接都进不来。这时请使用客户中心里的 VNC 控制台,它独立于虚拟机自身的网络运行。

要点总结

  • 一台 Conan Exiles 服务器对外只需要三个 UDP 端口:7777 用于游戏流量,7778 用于 Pinger,27015 用于状态查询。TCP 7777 只用于向 Epic 客户端传输 Mod,TCP 25575 只在 RCON 开启时才需要。
  • Pinger 固定在游戏端口加一上。因此同一台机器上的多个实例要以二为步长分配端口。
  • RCON 通过 RconEnabled=0 出厂默认关闭,只要您不需要它就应该保持关闭。密码以未加密方式走线路。
  • 27015 端口要限制,而不是关闭:关闭会让服务器从服务器列表里消失,不加限制则让它同时成为目标和反射器。
  • Windows 防火墙可以开放、关闭端口并限制到特定地址,但没法按源地址限制速率。这项任务属于服务器前面的网络。
  • 在 1 Gbit/s 上,线路到每秒 125 兆字节就满了,在 64 字节包大小时相当于每秒约 149 万个数据包。超过这个量,本地规则就不再有用。
  • 在 KernelHost,全球清洗网络中 17 Tbps 的清洗能力和法兰克福 3.2 Tbps 的 Arbor 实时过滤持续一起工作,不额外收费,也不使用黑洞路由。

如果您的服务器已经放在 KernelHost,过滤就已经在工作,您什么都不用做。若仍然发现异常,请带上日期、时间和您的测量数据开一个 支持工单,以便为您的 IP 地址调整过滤规则。攻击正在进行时,您还可以通过 WhatsApp 紧急聊天联系我们:+43 650 8209883。

常见问题

我的 Conan Exiles 服务器在突袭时段中途离线了。我该先查什么?
网卡的数据包速率,而不是 CPU 负载,也不是游戏日志。在 Windows 上,Get-NetAdapterStatistics 显示收到的数据包;在 Linux 上,sar -n DEV 1 10 显示每秒的数据包数。如果入站数据包远远超过您的正常值,而机器几乎没在干活,那就是一次攻击。如果计数器毫无异常却依然什么都卡,原因几乎总是某个 Mod,因为每个 Mod 都跑在与游戏同一个进程里。
一台 Conan Exiles 服务器真正需要哪些端口?
正好三个 UDP 端口:7777 用于游戏流量,7778 用于 Pinger,27015 用于服务器列表的状态查询。此外还有两个可选的 TCP 端口。7777 TCP 只在需要时为向来自 Epic Games Store 的客户端传输 Mod 而开启,Steam 客户端通过创意工坊接口下载 Mod。25575 TCP 是 RCON,出厂默认关闭。游戏端口写在 Engine.ini 的 [URL] 小节里,查询端口在 [OnlineSubsystemSteam] 下,RCON 端口在 Game.ini 的 [RconPlugin] 下。
Conan Exiles 的 7778 端口是做什么用的?
7778 UDP 是 Pinger,固定为游戏端口加一。它不能自由选择:在 Engine.ini 里改动 Port 这个值,也就跟着挪动了 PeerPort。实际影响涉及每一个在同一台机器上运行多个实例的人。端口必须以二为步长分配,也就是第一个实例用 7777 和 7778,第二个用 7779 和 7780。把第二个实例放在 7778 上的人,等于抢走了第一个实例的 Pinger。
我可以直接关掉 27015 查询端口吗?
不行。您的服务器随后会从服务器列表里消失,因为服务器名称、地图和玩家数正是通过这个端口被查询的。正确的做法是按源地址设上限,而不是封禁,例如在 Linux 上用 iptables 加 hashlimit 限制为每秒十次查询,再留一点余量。这对真实玩家和任何监控都够用,但会丢弃每秒发来成千上万个请求的来源。Windows 防火墙没法按源地址限制速率,在那里这件事必须在服务器前面的网络里完成。
我该怎么加固 25575 端口上的 RCON?
最安全的办法是让它保持关闭:RconEnabled 在 Game.ini 里出厂默认为 0。如果您需要 RCON,请设一个又长又随机的 RconPassword,因为这个协议以未加密方式把密码送上线路。请把 25575 TCP 限制到您自己的地址,而不要对所有人开放。RconMaxKarma 的默认值 60 能压住登录洪水攻击,但代替不了这条限制。此外,一个开放的 RCON 端口还会告诉每一个大范围扫描游戏服务器的人:这里有一台。
为什么 Conan Exiles 的 PvP 服务器特别容易被攻击?
因为在那里攻击有具体的收益,而且最佳时机是公开已知的。在 PvP 服务器上,一座基地只能在突袭时段内被破坏,这个时段由 ServerSettings.ini 里的 RestrictPVPTime 和 RestrictPVPBuildingDamageTime 确定,随后又被写进服务器名称、规则说明和 Discord 里宣传出去。谁正好在这个窗口里把防守方从游戏里赶出去,就等于在无人抵抗的情况下突袭。如果 LogoutCharactersRemainInTheWorld 还设为 True,被踢出去的角色会连装备一起留在世界里站着。
服务器上的防火墙对 DDoS 攻击有用吗?
对付小型攻击和不讲究的机器人有用,对付流量型攻击没用。防火墙规则处理的是已经跑过您线路的数据包。线路一旦被打满,您玩家的数据包在更早的地方就已经过不来了,跟您的规则集写得多好完全无关。在 Conan Exiles 上还要加一点:大多数服务器跑在 Windows 上,而 Windows 防火墙不认识按源地址的限制。流量型攻击必须在服务器前面的网络里就被终结。
攻击到多大规模,我的 Conan Exiles 服务器就撑不住了?
一台典型的游戏服务器挂在 1 Gbit/s 上,相当于每秒 125 兆字节。针对生存类服务器的攻击通常在 5 到 50 Gbit/s 之间。同样重要的是数据包速率:在 64 字节包大小时,1 Gbit/s 里能装进每秒约 149 万个数据包,而普通服务器只处理其中的几十万个。所以即使带宽还没被用尽,一次攻击也能让您瘫掉。而因为整个游戏世界跑在一个进程里,战斗、建造和存档会同时停住。
在 KernelHost,我的 Conan Exiles 服务器会在攻击期间离线吗?
不会。我们不使用黑洞路由。您的 IP 地址留在网络里,被丢弃的只有恶意数据包。防护分两级:全球清洗网络中 17 Tbps 的清洗能力,以及法兰克福 3.2 Tbps 的 Arbor 实时过滤。它持续运行,不需要先对攻击做出反应,因此开头不会有服务器失联的那几分钟。对本来只有几个小时的突袭时段来说,这一点正是要害。
KernelHost 的 DDoS 防护要额外付费吗?
不用。两级持续防护包含在每个服务器套餐中,不额外收费,自服务器开通起即生效。您既不用订购,也不用开启或配置。它对您服务器的所有端口和协议都有效,也就是说游戏端口 7777 UDP、7778 UDP 上的 Pinger 和 27015 UDP 查询端口都在其中。
什么时候需要额外的 Advanced DDoS Protection?
当您的服务器不是偶尔被打,而是被有针对性地连打几周,通常总在同一个时刻,而且您想自己掌控过滤的时候。您会获得一个专用防护 IP,并在客户中心里自行按端口和协议管理防护规则,也就是 7777 UDP、7778 UDP 和 27015 UDP 分开设置。改动实时生效,因此您可以在攻击进行时随时调整。价格每月 50.00 欧元起,PrePaid 预付费,没有最低合约期,也没有开通费。

Conan Exiles Conan Exiles DDoS 防护 游戏服务器防护 7777 端口 27015 端口 RCON Advanced DDoS Protection 实时过滤