DayZ サーバーを DDoS 攻撃から守る

公開日 読了時間 40 分

DayZ サーバーが本当に必要とするポートはどれか、Steam クエリポート、BattlEye の RCon、ログインキュー、再起動後の読み込み段階をどう守るか、そしてどの攻撃規模から手前のネットワークでのフィルタリングしか効かなくなるかを解説します。

夜のプレイ中に全プレイヤーを切断し、そのあと数分間サーバーブラウザーから消える DayZ サーバーに、ハードウェアの問題があることはまずありません。多くの場合は攻撃が走っており、しかもプレイヤーが最も多くオンラインになる時間帯か、予定された再起動が近づいたときが狙われます。DayZ サーバーを DDoS 攻撃から守るには、したがって両方が必要です。サーバー上での適切なポート開放と、その手前のネットワークでのフィルタリングです。本記事ではまず、追加費用なしでご自身で固められる範囲を示し、次にその対策が技術的にどこで限界を迎えるかを示し、最後にサーバーの手前で何が起きる必要があるかを説明します。

本記事の記述はすべて、serverDZ.cfg を使うご自身の DayZ 専用サーバーを前提としています。Windows Server 上で動いている場合も、Debian や Ubuntu 上で互換レイヤーを介して動いている場合も同じです。安定版ブランチ向けの、本番運用に耐える Linux ネイティブのサーバープログラムは Bohemia Interactive から提供されておらず、実験版の Linux ビルドは実験版のクライアントしか受け付けません。Linux のコマンドは root 向けに書かれているため、一般ユーザーの場合は先頭に sudo を付けてください。

攻撃がいま進行中の場合は、serverDZ.cfg を変更せず、サーバーも再起動しないでください。DayZ の再起動は Mod と中央経済システムを読み込み直すため数分かかり、その間サーバーは確実にオフラインになります。まずは測定値を保存してください(「ログを取る」の節を参照)。攻撃が終わってからでは、もう残っていません。

DayZ サーバーが DDoS 攻撃の標的になることが多い理由

DayZ には、サーバーを都合のよい標的にしてしまう性質がいくつも重なっています。第一に、コミュニティサーバーは自分の住所を自分で公開します。ゲームのサーバーブラウザーと DZSA ランチャーに載るためには Steam の問い合わせに応答しなければならず、その応答には IP アドレスとポートが平文で含まれます。つまり攻撃側は何も調べる必要がなく、一覧を読むだけで足ります。

第二に、DayZ サーバーの 1 日の流れは公開されています。ほぼすべてのプロジェクトが 3 時間から 4 時間ごとに自動で再起動し、それをチャットメッセージで予告し、予定を Discord に書き込みます。ちょうどこの時間帯に当たる攻撃は二重に効きます。サーバーはそもそもその時点で到達できず、待機画面で止まっているプレイヤーは別の場所へ行ってしまうからです。

第三に、プレイヤーにとっての損失が大きいです。DayZ では都合の悪い瞬間の障害が、いらだちだけでなく装備の喪失、中断されたレイド、そして世界に無防備なまま残された拠点を意味します。だからこそ BAN されたプレイヤー、敵対するグループ、競合するプロジェクトが最も多い依頼元になります。よく使われる booter サービスを通じた攻撃は、仕掛ける側に技術もまとまった金額も要求しません。

第四に、DayZ の通信はすべて UDP で流れます。UDP には要求できるような接続確立の手順がなく、送信元アドレスは偽装できます。つまり攻撃側は、お使いのサーバーに参加する必要も、正しく話しかける必要もなく、負荷をかけられます。開発元自身も無縁ではないことを示したのが 2025 年 2 月です。DayZ と Arma Reforger 向けの Bohemia Interactive のオンラインサービスが 1 週間以上 DDoS 攻撃を受け、2025 年 2 月 3 日に確認され、2025 年 2 月 6 日の時点でもまだ終わっておらず、コミュニティサーバーも巻き込まれました。DDoS 攻撃が具体的に何であるかは、記事 DDoS 攻撃とは何か で解説しています。

DayZ サーバーのポート:事実の一覧表

DayZ サーバーは UDP だけを話します。TCP のゲームポートはありません。DayZ で本当に固定されている値は、ゲームポートとしての 2302/UDP だけで、それ以外はすべて設定可能であり、ホスティング事業者によって異なります。ですから初期値に頼らず、ご自身の起動コマンドとご自身の serverDZ.cfg を確認してください。

ポート プロトコル 用途 設定場所 インターネットに開けるか
2302 UDP ゲームポート。ボイス通信を含むすべてのゲームトラフィック 起動コマンドの -port=2302 はい
2303 から 2305 UDP ゲームポートの上にあり、エンジンが併せて占有するブロック -port から決まる 通常はい
2305 または 27016 UDP Steam クエリポート:サーバーブラウザーと DZSA ランチャーへの登録 serverDZ.cfg の steamQueryPort はい。開けなければサーバーは見えない
自由に指定可能、一般的には 2305 または 2310 UDP BEC や DaRT といった管理ツール向けの BattlEye RCon BEServer_x64.cfg の RConPort いいえ
22 TCP オペレーティングシステムの SSH アクセス sshd_config ご自身のアドレスだけに限定する
3389 TCP Windows サーバーのリモートデスクトップ システム設定 いいえ
8080 と 2022 TCP ゲームパネルのウェブ画面と SFTP。ここでは Pterodactyl を例にしている パネルの設定 いいえ

2 つの値が繰り返し混乱を招くので、ここで整理します。Steam クエリポートについて。Bohemia が同梱する設定例は steamQueryPort = 2305; としていますが、ホスティング事業者の大部分は 27016/UDP を使っています。どちらの値も有効で、決めるのはご自身のファイルにある値だけです。BattlEye の RCon ポートについて。こちらには拘束力のある標準がまったく存在しません。広く使われている目安はゲームポート +3、つまり 2305 で、別の事業者は 2310 を設定します。DayZ 1.13 以降、BattlEye は BEServer_x64.cfg のパラメーター RConPort を確実に読み取りますが、それ以前はポートを予測しにくい状態でした。

ここから、多くの運用者が陥る落とし穴が生まれます。steamQueryPort と RConPort を決して同じ値にしないでください。設定で Steam の問い合わせに 2305 を割り当てているなら、RCon は別のポート、たとえば 2310 に置きます。

Steam クエリポートが最も弱い箇所である理由

Steam クエリポートは A2S_INFO、A2S_PLAYERS、A2S_RULES という 3 つの問い合わせに応答します。A2S_INFO はサーバー名、マップ、プレイヤー数、バージョンを返し、A2S_PLAYERS は接続中のプレイヤーの名前を、A2S_RULES は設定されたサーバー変数を返します。これらの応答はいずれも、きっかけになった問い合わせよりはるかに大きく、まさにそれがこのポートを二重に危険にしています。

標的としてのご自身にとっては、こういう意味になります。攻撃側は問い合わせ 1 件あたりわずか数バイトでクエリポートを働かせられる一方で、お使いのサーバーは毎回完全な応答を組み立てて送り出します。第三者にとっては、こういう意味になります。攻撃側は送信元アドレスを偽装してお使いのサーバーに問い合わせ、その応答を本来の標的に向けられます。そのときお使いのサーバーは被害者であるだけでなく、増幅器です。Valve はそのため 2020 年 12 月に A2S_INFO にチャレンジの問い合わせを追加しました。サーバーはまず乱数で応答し、問い合わせた側はそれを送り返さなければなりません。これは増幅を弱めますが、なくしはしません。すべての問い合わせがこの経路を通るわけではないからです。

DayZ にはここで、ほかのゲームにはない特徴があります。2 つの別々のサーバーリストがお使いのサーバーに問い合わせるのです。内蔵のコミュニティサーバーブラウザーと、広く使われている DZSA ランチャーです。ですからクエリポートを単純に閉じるという選択はありません。閉じれば、直接接続は引き続き機能するのに、お使いのプロジェクトは両方の一覧から消えてしまいます。閉じるのではなく制限するのが正しい答えです。

費用をかける前に自分でできること

この節が最も長いのは意図的です。きちんと設定された DayZ サーバーは、どこに置かれていようと、小規模から中規模の攻撃を自力で耐えます。

1. 現状把握:DayZ サーバーが実際に開けているポート

ファイアウォールのルールを 1 つ書く前に、お使いのサーバーが外に何を提供しているかを確認します。推測せず、実際に見てください。Linux では次のとおりです。

ss -lnup
ss -lntup

Windows Server では、コマンドプロンプトが同じ情報を返します。

netstat -ano -p UDP | findstr "2302 2303 2304 2305 27016"

注目するのはローカルアドレスの列です。0.0.0.0:2302 は「インターネット全体から到達できる」、127.0.0.1:2310 は「ローカルのみ」で、開放は不要という意味です。そのあとは手順書に頼らず、実際の値を設定ファイルから直接読み取ります。

grep -iE "steamQueryPort|maxPlayers|password|enableWhitelist|verifySignatures" serverDZ.cfg
grep -iE "RConPort|RestrictRCon" battleye/BEServer_x64.cfg

攻撃側からの見え方は、別のマシンから実行する外部からの UDP ポートスキャンで分かります。

nmap -Pn -sU -p 2302-2310,27015-27020 YOUR.SERVER.IP.ADDRESS

2. 起動コマンドと serverDZ.cfg が本当に必要とするものだけを開ける

DayZ では外に向けた開放は 2 つで足ります。ゲームポートのブロックとクエリポートです。それ以外はご自身のアドレスに限定するか、そもそも公開しません。UFW では次のようになります。自分自身を締め出さないよう、この順番どおりに実行してください。

ufw allow 22/tcp comment 'SSH'
ufw allow 2302:2305/udp comment 'DayZ ゲームポート'
ufw allow 27016/udp comment 'DayZ Steam クエリ'
ufw allow from 203.0.113.10 to any port 2310 proto udp comment 'BattlEye RCon'
ufw default deny incoming
ufw default allow outgoing
ufw --force enable
ufw status verbose

203.0.113.10 はご自身のアドレスに、27016 はご自身の steamQueryPort の行に実際に書かれている値に置き換えてください。復旧手段まで含む詳しい手順は 自分を締め出さずに UFW ファイアウォールを設定する にあります。Windows サーバーでも原則は同じです。ポートのグループごとに受信ルールを 1 つ、リモートデスクトップはご自身のアドレスに限定し、それ以外はすべて遮断します。

3. Steam クエリポートは閉じるのではなく制限する

送信元アドレスごとの上限が、本物のサーバーリストとクエリフラッドを分けます。サーバーブラウザーは秒単位で問い合わせますが、攻撃側はミリ秒単位です。

iptables -I INPUT -p udp --dport 27016 -m hashlimit --hashlimit-name dayz_query --hashlimit-mode srcip --hashlimit-above 10/sec --hashlimit-burst 20 -j DROP
iptables -I INPUT -p udp --dport 2302 -m hashlimit --hashlimit-name dayz_game --hashlimit-mode srcip --hashlimit-above 600/sec --hashlimit-burst 900 -j DROP

1 つ目のルールは、同じ送信元から毎秒 10 件を継続して超える Steam の問い合わせを破棄し、2 つ目は毎秒 600 件を超えるゲームパケットを破棄します。どちらの数値も出発点で、絶対の正解ではありません。60 人が入った満員のサーバーは空のサーバーよりはるかに多くのパケットを生みますし、厳しすぎる設定は自分のプレイヤーを追い出すか、サーバーリストから落ちる結果になります。まずは平常時を 1 週間測ってください。

iptables のルールだけでは再起動で消えます。Debian と Ubuntu では次のように保存します。

apt-get install -y iptables-persistent
netfilter-persistent save

UFW を使っている場合、こうしたルールは /etc/ufw/before.rules に書きます。そうしないと、次の ufw reload で消えてしまいます。さらに Steam のサーバーライブラリには、コネクションレスパケット向けの独自のブレーキがあります。環境変数 STEAM_GAMESERVER_RATE_LIMIT_200MS は、200 ミリ秒の窓の中で設定値を超える数が届いた時点で、そのアドレスの A2S パケットをすべて破棄します。

3 つ目の手立ては費用がまったくかかりません。Discord ボットやプロジェクトのサイトがプレイヤー数を表示しているなら、訪問者ごとにサーバーへ問い合わせるのではなく、一定の間隔で結果を保存して使い回してください。そうすれば、よく見られるステータスページが生む問い合わせは、訪問者 1 人あたり 1 件ではなく、間隔あたり 1 件になります。

4. BattlEye の RCon をインターネットから切り離す

BattlEye は DayZ のアンチチート部品で、serverDZ.cfg に BattlEye = 1; と書いて有効にします。一方リモート管理は独自のファイル、つまり BattlEye ディレクトリ内で BEServer_x64.dll と並ぶ BEServer_x64.cfg にあり、そのディレクトリは起動コマンドの -BEpath= が指定します。

RConPassword ALongRandomPassword
RConPort 2310
RestrictRCon 0

これに関する規則が 3 つあります。第一に、RCon のポートは UDP で、TCP ではありません。誤って proto tcp と書いたファイアウォールのルールは何もフィルタリングせず、同時に管理ツールを空振りさせます。第二に、このポートは管理者のアドレスだけに限定してください。固定アドレスを持たない人は、外からのポートを完全に閉じ、SSH やリモートデスクトップで到達できるサーバー上で管理ツールを直接起動します。第三に、RestrictRCon 1 は RCon で実行できるコマンドを制限し、複数人が使うようになった時点で正しい設定になります。

開いた RCon ポートは、2 つのものを同時に意味します。パスワードを試し続けるための招待状であり、あふれさせられる UDP ポートがもう 1 つある、ということです。開放をごく少数のアドレスだけに絞った時点で、どちらもなくなります。

5. ログインキュー、許可リスト、スロット枯渇

DayZ は接続をすべて同時に処理するのではなく、キューを通して処理します。serverDZ.cfg の 5 つの値がそれを制御します。

maxPlayers = 60;
loginQueueConcurrentPlayers = 5;
loginQueueMaxPlayers = 100;
guaranteedSlots = 10;
maxPing = 200;

loginQueueConcurrentPlayers は同時に招き入れるプレイヤーの数を決め(初期値 5)、loginQueueMaxPlayers はキュー自体を制限します(一般的な値は 100 から 500)。スロット枯渇はまさにここを突きます。攻撃側に帯域幅は要らず、キューを埋めるだけの十分なアカウントか接続試行があれば足ります。サーバーが技術的に問題なく動いているのに、本物のプレイヤーが通れなくなります。guaranteedSlots はご自身のチーム向けに席を確保し、まさにこの状況でも自分はサーバーに入れるようにします。

これに対しては内蔵の許可リストが効きます。enableWhitelist = 1; で有効化され、そのあと 1 行に 1 つの Steam64 ID を書いたファイル profiles/whitelist.txt を読みます。一覧にない ID は接続時に拒否されます。このファイルはサーバー起動時に読み込まれるため、変更には再起動が必要です。serverDZ.cfg に password を追加しても似た働きをしますが、こちらは弱いです。パスワードは人に渡されますが、Steam64 ID は渡されないからです。

ここで 1 つはっきりさせておく必要があります。許可リストが守るのはプレイヤーの席であって、お使いの回線ではありません。サーバーをあふれさせる攻撃側は、そもそも参加する気がありません。そのパケットは拒否されますが、それでも届いてしまっており、まさにそれが問題なのです。

6. Mod、署名検証、再起動後の時間帯

DayZ では Mod は快適さの話にとどまらず、攻撃対象領域の一部です。serverDZ.cfg の 4 つの設定は必ず入れておいてください。

verifySignatures = 2;
forceSameBuild = 1;
allowFilePatching = 0;
BattlEye = 1;

verifySignatures = 2 はすべての PBO ファイルを対応する .bisign 署名と照合し、そのために keys フォルダーに適切な .bikey ファイルが必要です。forceSameBuild = 1 はサーバーとまったく同じゲームバージョンを要求します。allowFilePatching = 0 は変更されたゲームファイルで起動したクライアントを拒否します。これらの設定はどれもボリューム型攻撃を止めませんが、3 つとも、改造されたクライアントがお使いのサーバーの調子を崩す経路を閉じます。

2 つ目の点はより重要で、ほとんど常に見落とされます。起動の段階です。DayZ サーバーは起動時にまず起動コマンドから Mod リストを読み込み、そのあとすべてのルートテーブルを含む中央経済システムを読み込みます。強く改造されたサーバーでは、これは簡単に数分になり、その間サーバーは Steam の問い合わせに 1 件も応答しません。

./DayZServer -config=serverDZ.cfg -port=2302 -profiles=./profiles -BEpath=./battleye -mod=@CF;@YourMod;@AnotherMod -cpuCount=4 -dologs -adminlog -netlog -freezecheck

ほぼすべてのプロジェクトが 3 時間から 4 時間ごとに再起動し、しかもその予定を予告しているため、攻撃側にとってこの時間帯を当てるのは造作もありません。効果があり、しかも費用のかからない対策が 3 つあります。Mod リストをできるだけ短く保つこと。Mod が 1 つ増えるたびに、まさにこの時間帯が長くなります。再起動の時刻を毎時 0 分ではなく、切りの悪い値に置くこと。そして、推測せずに、ご自身の起動が実際にどれだけかかるかを一度測ること。timeStampFormat = "Full"; と設定済みの logFile があれば、所要時間はあとからログに残ります。

7. 接続追跡、受信バッファー、カーネルのパラメーター

見落とされがちな詰まりどころが、カーネルの接続追跡です。UDP に接続はありませんが、カーネルは送信元アドレスと宛先アドレスの組ごとにエントリーを作ります。テーブルが埋まると、サーバーは正規のパケットまで破棄し、ログには「nf_conntrack: table full」と出ます。現在値と上限は次のコマンドで分かります。

sysctl net.netfilter.nf_conntrack_count net.netfilter.nf_conntrack_max

ゲームサーバー専用の機体で筋のよい解決は、ゲームトラフィックをそもそも追跡させないこと、そしてあわせて受信バッファーとネットワークカードのキューを大きくすることです。

iptables -t raw -A PREROUTING -p udp --dport 2302 -j NOTRACK
iptables -t raw -A OUTPUT -p udp --sport 2302 -j NOTRACK
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.rmem_default=1048576
sysctl -w net.core.netdev_max_backlog=5000
sysctl -w net.netfilter.nf_conntrack_max=524288

注意してください。NOTRACK と状態を持つルールは互いに排他です。ゲームポートを追跡から外す人は、そのポートに対して -m conntrack --ctstate を使うルールをもう使えません。使うと開放が効かなくなります。sysctl の値を恒久化するには /etc/sysctl.d/ に書きます。そうしないと次の再起動で消えます。

8. お使いの IP アドレスはサーバーブラウザーに載っています

ここは願望ではなく正直さが役に立ちます。公開された DayZ サーバーの IP アドレスは秘密に保てません。一度でも接続したプレイヤーは全員それを知っており、サーバーブラウザーが公開し、DZSA ランチャーが保存して使い回します。アドレスの変更で稼げるのは数時間で、数日になることはまれです。

より効くのは 2 つの習慣です。生の IP アドレスをどこにも追加で公開しないこと。つまり Discord のピン留め投稿にも、プロジェクトのサイトにも書きません。そして DNS のレコードを整理すること。以前のアドレスを指す A レコードが 1 つ残っていると、どんな変更も無意味になり、まさにそこで大半の変更が失敗します。古いサーバーでステータスサービスを動かし続けている人は、新しいアドレスも一緒に漏らしています。

9. 攻撃中に推測しなくて済むようにログを取る

最も重要なのは、ほとんど誰も事前にやらない手順、つまりすべてが平常に動いているうちに基準値を作っておくことです。平常時の値がなければ、障害のあとで毎秒 4 万パケットが多かったのか、それとも単に土曜の夜だったのかを判断できません。サーバー側では、そのために内蔵のログを有効にします。

timeStampFormat = "Short";
logAverageFps = 300;
logPlayers = 300;
logFile = "server_console.log";

logAverageFps は DayZ が返す中で最も正直な値です。プレイヤー数が変わらないままサーバーのフレームレートが落ちるなら、Mod か経済システムの問題です。プレイヤーが落ちていくのにフレームレートが安定しているなら、原因はネットワークです。システム側では apt-get install -y vnstat sysstat で測定が常に走り続け、障害の最中は 4 つのコマンドで足ります。

sar -n DEV 1 10
ip -s link show eth0
dmesg -T | tail -50
tcpdump -ni eth0 udp port 2302 -c 200 -q

tcpdump では必ず -c で件数を区切ってください。全負荷の状態での取得は、すでに過負荷のサーバーにさらに負荷をかけます。測定値の読み方は サーバーで DDoS 攻撃を検知する にあります。

自力での防御が終わるところ:帯域幅とパケットレート

ここからは、どの設定ファイルでも解決できない部分です。これまでの対策はすべてお使いのサーバー上、つまり回線の末端で動きます。ファイアウォールのルールが判断するのは、すでにケーブルを通り終えたパケットです。破棄はできますが、送られなかったことにはできません。

指標 値 DayZ サーバーにとっての意味
一般的なゲームサーバーの回線 1 Gbit/s 毎秒 125 メガバイト。それを超えると回線は埋まる
64 バイトのパケットでのパケットレート 1 Gbit/s で毎秒約 149 万パケット 通常のサーバーのカーネルが処理できるのは、そのうち数十万にすぎない
ゲームサーバーのプロジェクトに対する一般的な攻撃規模 5 から 50 Gbit/s お使いの回線の 5 倍から 50 倍
KernelHost のサーバーで除去した最大値 毎秒 4150 万パケット超で 473.4 Gbit/s 超 この規模ではローカルの設定はどれも効かない
KernelHost でゲームサーバー向けに除去した UDP フラッド 112.2 Gbit/s 超 サーバーの手前のネットワークで終わらせる必要がある
serverDZ.cfg の maxPlayers の初期値 60 毎秒パケット数のご自身の平常値は自分で測る必要があり、プロジェクトごとに異なる

DayZ では帯域幅よりパケットレートのほうが先に効くことが多く、理由は単純です。ゲームトラフィックは少数の大きなパケットではなく、多数の小さな UDP パケットで構成されているからです。お使いの回線を 3 分の 1 も埋めない攻撃でも、破棄のための計算時間が食われるため、サーバーを止められます。運用者にはこれが「使用率はまったく高くなかったのに、それでも全員にラグスパイクが出て、次々に落ちていった」という形で見えます。

ボリューム型攻撃は、サーバーの手前のネットワークで終わらせる必要があります。これは製品の主張ではなく、物理です。

DayZ の DDoS 対策:KernelHost が用意しているもの

すべてのサーバーで動いている常時保護

KernelHost の DDoS 対策は 2 段階で構成されており、有効化も注文も設定もなしに常時動いています。

  • 第 1 段階:グローバルなスクラビングネットワークにおける 17 Tbps の緩和能力。 ボリューム型攻撃は、データセンターに届く前に、発生源の近くで除去されます。
  • 第 2 段階:フランクフルトにおける 3.2 Tbps の Arbor リアルタイムフィルタリング。 サーバーの直前で、プロトコル固有のパターンを検知し、パケット単位で破棄します。

決定的な性質が 2 つあります。保護は常時動いており、攻撃を受けてから反応する必要がありません。つまり、最初の数分だけサーバーが消えている、ということが起きません。そしてヌルルーティングは使いません。お使いの IP アドレスはネットワークに残り、破棄されるのは有害なパケットだけです。IP アドレスをネットワークから外す事業者は、ご自身にとって攻撃側と同じ結果をもたらします。どのゲームとプロトコルが対象かは ゲームサーバーの DDoS 対策をリアルタイムで にまとめています。

継続的に攻撃されるプロジェクト向けの Advanced DDoS Protection

プロジェクトによっては、たまたまではなく、狙って何週間も攻撃されます。そのために Advanced DDoS Protection があり、月額 50.00 EUR から、PrePaid、最低利用期間なしで利用できます。違いは容量の大きさではなく、制御できることにあります。

  • 専用の保護 IP をフランクフルトの中核から割り当て、お使いのサーバーを当社のネットワーク内で切り替えます。ご自身の側で作り直す作業はありません。
  • ポートとプロトコルごとに自分で管理できる保護ルールをカスタマーエリアで設定できます。2302/UDP で何を許可するか、クエリポートで何を許可するか、RCon ポートで何を許可するかを分けて指定できます。DayZ ではまさにこの切り分けが効きます。ゲームトラフィックと問い合わせのトラフィックは、見た目がまったく違うからです。
  • 変更はリアルタイムで反映されます。そのため、チケットの返答を待つのではなく、攻撃が進行している最中に調整できます。
  • ゲームに合わせた保護プロファイルを用意しており、強く改造されたサーバーや、任意の TCP または UDP ポートで動く独自のアプリケーションにも対応します。

2 つの段階の比較

項目 標準で含まれる DDoS 常時保護 Advanced DDoS Protection
料金 すべてのサーバープランに含まれ、追加料金なし 月額 50.00 EUR から、PrePaid
フィルタリング能力 17 Tbps のグローバルなスクラビングと、フランクフルトにおける 3.2 Tbps の Arbor リアルタイムフィルタリング 同じ 2 段階のフィルタリング
IP アドレス お使いのサーバーの IP アドレス 追加の専用保護 IP
ルールセット 自動プロファイル、設定は不要 カスタマーエリアでポートとプロトコルごとの独自ルール
変更 自動で追従する リアルタイムで反映され、攻撃の最中でも可能
ゲームプロファイル 主要なゲーム向けの最適化プロファイル。DayZ も含む ゲームに合わせたプロファイル。強く改造されたサーバーにも対応
ヌルルーティング なし なし
契約期間 サーバープランに連動 PrePaid、最低利用期間なし、解約予告期間なし、初期費用なし

ほとんどの DayZ プロジェクトでは、標準で含まれる常時保護と、きちんとしたサーバー設定を組み合わせれば十分です。Advanced DDoS Protection は、誰かが個人的な問題として攻撃してくる場合への答えです。DayZ サーバーを現在ほかの場所で動かしている場合、この保護を後から足すことはできません。保護はネットワークの一部であり、KernelHost に置かれたサーバーに適用されます。そこに至る道は移転であって、追加の商品ではありません。

よくある失敗とその対処

「サーバーが DZSA ランチャーとサーバーブラウザーから消えたが、直接接続では入れる」:ほとんどの場合これは攻撃ではなく、クエリポートの問題です。steamQueryPort の値がファイアウォールの値と違っているか、厳しすぎるレート制限がサーバーリストの問い合わせを破棄しているかのどちらかです。攻撃を疑う前に、2 つの値を突き合わせて確認してください。

「ポートをフィルタリングしてから RCon がつながらない」:BattlEye の RCon は UDP で動きます。同じポートに proto tcp で開放しても何も起きません。さらに RConPort と steamQueryPort が誤って同じ値になっていないかも確認してください。

「IP アドレスを変えたのに 2 時間後にまたオフラインになった」:攻撃側は新しいアドレスを、古いアドレスと同じ場所から手に入れています。たいていはサーバーブラウザー、Discord のステータスボット、あるいは古い DNS レコードです。アドレスの変更は時間稼ぎであって、解決ではありません。

「攻撃が毎日ちょうど再起動の時刻に来る」:これは偶然ではありません。再起動の予定は Discord に書かれ、ゲーム内でも予告され、Mod と経済システムを読み込んでいる間はサーバーがそもそも応答しません。Mod リストを短くすること、切りの悪い再起動時刻、そして攻撃を受けてから反応するのではなく常時動いているフィルタリングが、この手口の効果を奪います。

「全プレイヤーにラグスパイクが出るのに、ネットワークは静かだ」:それなら DDoS 攻撃ではありませんでした。まず logAverageFps でサーバーのフレームレートが落ちていないかを見て、そのあと中央経済システムと Mod リストを見てください。sar -n DEV 1 10 に異常がなければ、原因はネットワークではありません。

「iptables のルールが効かない」:よくある原因は 3 つです。ルールが UFW のチェーンの後ろにあって到達しない、前回の再起動で消えていた(この場合は netfilter-persistent save か /etc/ufw/before.rules への記述が助けになります)、あるいは攻撃がボリューム型で、ルールはすでに埋まった回線の上で正しく動いている、のいずれかです。iptables -L INPUT -n -v で一致カウンターが増えているか確認してください。0 のままなら、そのルールには届いていません。

「これまで使っていた事業者に IP アドレスを遮断された」:それがヌルルーティングです。事業者はそれで自分のネットワークを守りますが、ご自身にとっての結果は攻撃の成功と同じで、多くの場合そのあと数時間続きます。判断に迷うときは、フィルタリングなのかヌルルーティングなのかを尋ねてください。その答えは、どんなハードウェアの仕様よりも可用性を左右します。

「tcpdump で見ても、おかしなところがない」:手前のネットワークですでにトラフィックが除去されている場合、サーバーには何も届かないのが当然です。フィルタリングが機能しているときの通常の姿です。逆に回線が飽和していると、測定に使おうとした SSH セッションさえ届かないことがあります。その場合は、ゲストシステムのネットワークに依存せず動作する、カスタマーエリアの VNC コンソールを使ってください。

まとめ

  • DayZ サーバーが外に必要とするのはちょうど 2 つです。2302/UDP から始まるゲームポートのブロックと、ご自身の steamQueryPort の行にある Steam クエリポートです。それ以外は制限するか閉じてください。
  • BattlEye の RCon ポートには拘束力のある標準がなく、UDP で動き、BEServer_x64.cfg の RConPort で設定します。インターネットに開けてはならず、クエリポートと同じ値にしてもいけません。
  • クエリポートは閉じるのではなく制限してください。閉じると、直接接続は引き続き機能するのに、サーバーブラウザーと DZSA ランチャーから消えます。
  • 許可リスト、guaranteedSlots、ログインキューは、スロット枯渇からプレイヤーの席を守りますが、帯域幅から回線を守るわけではありません。
  • DayZ サーバーで最も危険な時間帯は、3 時間から 4 時間ごとの予定された再起動です。Mod と中央経済システムが数分にわたって読み込まれ、しかもその時刻が公開されているからです。
  • 攻撃規模がおよそ 1 Gbit/s を超えるか、毎秒数十万パケットに達した時点からは、決めるのはサーバーの手前のネットワークだけで、お使いのファイアウォールではありません。
  • KernelHost では、2 段階の常時保護がすべてのサーバープランに追加料金なしで、ヌルルーティングなしで含まれます。ポートごとのルールを自分で制御したい場合に、月額 50.00 EUR からの Advanced DDoS Protection が加わります。

プロジェクトをすでに KernelHost で動かしている場合、フィルタリングは何もしなくても有効です。それでも異常に気づいたときは サポートチケット を開いてください。お使いの IP アドレス向けにフィルタールールを調整します。攻撃が進行中の場合は、WhatsApp の緊急チャット +43 650 8209883 でもご連絡いただけます。

よくあるご質問

DayZ サーバーがいまオフラインです。DDoS 攻撃かどうかは、どこで見分けられますか?
CPU 負荷ではなく、インターフェースのパケットレートを見てください。sar -n DEV 1 10 で毎秒のパケット数とバイト数が、ip -s link show eth0 で破棄パケットのカウンターが分かります。サーバー自体はほとんど働いていないのに受信パケットが平常時の値を大きく超えているなら、それは攻撃です。ネットワークのカウンターに異常がないのに、それでも全体が引っかかるようなら logAverageFps を見てください。プレイヤー数が変わらないままサーバーのフレームレートが落ちているなら、原因は Mod か中央経済システムであり、ネットワークではありません。
DayZ サーバーが本当に必要とするポートはどれですか?
外に向けてはちょうど 2 つです。ゲームポート 2302/UDP と 2303 から 2305 までのブロック、そして serverDZ.cfg の steamQueryPort に書かれている Steam クエリポートです。DayZ は UDP だけを話し、TCP のゲームポートはありません。一方、BEServer_x64.cfg の BattlEye の RCon ポート、22/TCP の SSH、3389/TCP のリモートデスクトップ、ゲームパネルのポートはインターネットに開けるものではなく、管理者のアドレスだけに限定します。
DayZ の Steam クエリポートは 2305 ですか、それとも 27016 ですか?
どちらもあり得るため、推測せずに確認する必要があります。Bohemia Interactive が同梱する設定例は steamQueryPort = 2305 としていますが、ホスティング事業者の大部分は 27016/UDP を使っています。有効なのはご自身の serverDZ.cfg に書かれている値だけで、まさにそのポートをファイアウォールで開放する必要があります。遮断されていると、直接接続は引き続き機能するのに、お使いのサーバーはゲームのサーバーブラウザーと DZSA ランチャーから消えます。これは繰り返し攻撃と勘違いされますが、攻撃ではありません。
BattlEye の RCon ポートはどこで設定し、インターネットに開けるべきですか?
BattlEye の RCon ポートは、BattlEye ディレクトリにあるファイル BEServer_x64.cfg の RConPort の行で、RConPassword と RestrictRCon と一緒に設定します。拘束力のある初期値はありません。広く使われている目安はゲームポート +3、つまり 2305 で、別の事業者は 2310 を設定します。DayZ 1.13 以降、BattlEye はこのパラメーターを確実に読み取ります。このポートは TCP ではなく UDP で動き、管理者のアドレスだけに限定するべきものです。steamQueryPort と同じ値になっていないことも確認してください。
DayZ の許可リストは DDoS 攻撃に対して効きますか?
スロット枯渇には効きますが、ボリューム型攻撃には効きません。許可リストは serverDZ.cfg の enableWhitelist = 1 で有効化され、そのあと 1 行に 1 つの Steam64 ID を書いたファイル profiles/whitelist.txt を読み、変更は再起動後に初めて反映されます。guaranteedSlots と組み合わせれば、外部の者がログインキューを埋めて本物のプレイヤーが通れなくなる事態を防げます。しかし、お使いの回線をあふれさせる攻撃側は、そもそも参加する気がありません。そのパケットは拒否されますが、すでに届いてしまっています。これに効くのは、サーバーの手前のネットワークでのフィルタリングだけです。
DayZ サーバーへの攻撃が、ちょうど再起動の時刻に来ることが多いのはなぜですか?
再起動の予定が公開されており、その時間帯が技術的に都合よく開いているからです。ほぼすべての DayZ プロジェクトが 3 時間から 4 時間ごとに自動で再起動し、それをゲーム内で予告し、Discord に書き込みます。起動時にサーバーはまず起動コマンドの Mod リストを読み込み、そのあと中央経済システムを読み込み、その間は Steam の問い合わせに 1 件も応答しません。ちょうどそこで始まる攻撃は、すでに始まっている停止時間を延ばします。Mod リストを短くすること、切りの悪い再起動時刻、そして常時動いているフィルタリングが、この手口の効果を奪います。
iptables や UFW で DDoS 攻撃に対抗できますか?
小規模な攻撃や作りの粗いボットには対抗できますが、ボリューム型攻撃には対抗できません。サーバー上のファイアウォールルールが判断するのは、すでにお使いの回線を通り終えたパケットです。回線が飽和していれば、プレイヤーのパケットはその手前で通れなくなり、ルールセットの出来とは無関係です。それでも有効なのは、クエリポートへの送信元アドレスごとのレート制限、ゲームポートへの NOTRACK、そして大きめの受信バッファーです。ボリューム型攻撃は、サーバーの手前のネットワークで終わらせる必要があります。
どのくらいの規模から、DayZ サーバーは自力で耐えられなくなりますか?
一般的なゲームサーバーは 1 Gbit/s につながっており、これは毎秒 125 メガバイトです。ゲームサーバーのプロジェクトに対する攻撃は、通常 5 から 50 Gbit/s の範囲にあります。同じくらい重要なのがパケットレートです。64 バイトのパケットなら 1 Gbit/s に毎秒約 149 万パケットが入りますが、通常のサーバーのカーネルが処理できるのはそのうち数十万にすぎません。DayZ は小さな UDP パケットを大量に送るため、帯域幅よりパケットレートのほうが先に効くことが多く、回線が 3 分の 1 も埋まっていないのにサーバーが止まります。
KernelHost の DayZ サーバーは、攻撃を受けている間オフラインになりますか?
いいえ。ヌルルーティングは使いません。お使いの IP アドレスはネットワークに残り、破棄されるのは有害なパケットだけです。保護は 2 段階です。グローバルなスクラビングネットワークにおける 17 Tbps の緩和能力と、フランクフルトにおける 3.2 Tbps の Arbor リアルタイムフィルタリングです。常時動いており、攻撃を受けてから反応する必要はありません。つまり、最初の数分だけサーバーが消えている、ということが起きません。規模の目安として、KernelHost のサーバーでは毎秒 4150 万パケット超で 473.4 Gbit/s 超の攻撃をすでに除去しています。
KernelHost の DDoS 対策は別料金ですか。また、Advanced DDoS Protection が必要になるのはどんなときですか?
2 段階の常時保護はすべてのサーバープランに追加料金なしで含まれ、提供開始時点から有効なので、注文も有効化も必要ありません。Advanced DDoS Protection が必要になるのは、プロジェクトが狙って何週間も攻撃され、フィルタリングをご自身で制御したい場合です。専用の保護 IP を受け取り、保護ルールをポートとプロトコルごとに、つまり 2302/UDP、クエリポート、RCon ポートを分けて、カスタマーエリアで自分で管理できます。変更はリアルタイムで反映されます。料金は月額 50.00 EUR から、PrePaid、最低利用期間なし、初期費用なしです。

DayZ DayZ の DDoS 対策 ゲームサーバー保護 ポート 2302 Steam クエリポート BattlEye serverDZ.cfg Advanced DDoS Protection