Arma 3 サーバーを DDoS 攻撃から守る
2302 から 2306 の 5 つの UDP ポートのうち Arma 3 サーバーが本当に必要とするものはどれか、Steam クエリ、BattlEye の RCon、ヘッドレスクライアントをどう守るか、そしてどのパケットレートから手前のネットワークでのフィルタリングしか効かなくなるかを解説します。
Arma 3 サーバーを DDoS 攻撃から守るとき、相手になるのはちょうど 5 つの UDP ポート、2302 から 2306 です。夜のミッションの最中に、全プレイヤーが同時に落ちてしまう専用サーバーは、ハードウェアに問題があることはまずありません。多くの場合、このポートブロックを狙った攻撃が走っています。しかも、サーバーリストのプレイヤー数が最も多い時間帯を選んでです。本記事ではまず、追加費用なしでご自身で固められる範囲を示し、次にその対策が技術的にどこで限界を迎えるかを示し、最後にサーバーの手前のネットワークで何が起きる必要があるかを説明します。
本記事の記述はすべて、Debian 12、Debian 13、Ubuntu 22.04 LTS、Ubuntu 24.04 LTS 上で動く専用の Arma 3 サーバー(SteamCMD のアプリケーション 233780)を前提としています。コマンドは root 向けに書かれているため、一般ユーザーの場合は先頭に sudo を付けてください。攻撃がいま進行中の場合は、設定を変更せず、サーバーも再起動しないでください。まずは「ログを取る」の節にある測定値を保存します。攻撃が終わってからでは、もう残っていません。
Arma 3 サーバーが狙われる理由と、DDoS 対策が必要になる時点
Arma 3 には、サーバーを都合のよい標的にしてしまう性質がいくつも重なっています。第一に、サーバーは自分の住所を自分で公開します。ポート 2304 UDP で Steam マスターサーバーに登録し、ポート 2303 UDP では名前、マップ、プレイヤー数、Mod リストを添えて問い合わせに応答します。この 2 つのポートがなければ誰にも見つけてもらえませんが、開けておけば、お使いの IP アドレスはあらゆるサーバーブラウザーと、サーバーブラウザーを参照するあらゆるステータスページに載ります。
第二に、プレイヤー層の活動時間が決まっています。Altis や Tanoa の Life 系ロールプレイ、Exile、Antistasi、King of the Hill は夜と週末に埋まるため、20 時の障害は最も目立ちます。第三に、プロジェクト間の競合、BAN されたプレイヤー、内部のもめ事があり、攻撃を仕掛ける側には技術も、まとまった金額も必要ありません。
技術面では、決定的な点がもう一つ加わります。Arma 3 の通信は完全に UDP で、ゲームの動作に TCP は必要ありません。UDP には要求できるような接続確立の手順がなく、送信元アドレスは偽装できます。つまり攻撃側は、お使いのサーバーに参加する必要も、正しく話しかける必要もなく、負荷をかけられます。さらに、Arma 3 サーバーのシミュレーションループは基本的に 1 つの演算コアで動きます。十分な数のパケットを送れば、その 1 つのコアの計算時間を奪えるわけで、マシンにほかにいくつコアがあっても関係ありません。DDoS 攻撃が具体的に何であるかは、記事 DDoS 攻撃とは何か で解説しています。
実際に問題になるポート
Arma 3 サーバーは、初期設定で 2302 から 2306 の UDP ブロックを占有します。起動パラメーター -port=2302 が決めるのは最初のポートだけで、残りの 4 つはそこから自動的に、ゲームポート +1 から +4 として決まります。同じマシンで複数のインスタンスを動かす場合は、ポートを 100 以上離してください(2302、2402、2502)。そうしないと、インスタンスが互いの後続ポートを奪い合います。
| ポート | プロトコル | 用途 | インターネットに開けるか |
|---|---|---|---|
| 2302(ゲームポート) | UDP | ゲームトラフィックと、内蔵のボイス通信 VON | はい |
| 2303(ゲームポート +1) | UDP | Steam クエリ:A2S クエリに名前、マップ、プレイヤー数、Mod と署名のリストで応答する | はい。開けなければサーバーブラウザーに表示されない |
| 2304(ゲームポート +2) | UDP | Steam マスター:Steam マスターサーバーへのサーバー登録 | はい |
| 2305(ゲームポート +3) | UDP | VON。Bohemia によれば予約済みで、現在は使われていない | いいえ |
| 2306(ゲームポート +4) | UDP | BattlEye の通信。RCon インターフェース(beserver_x64.cfg の RConPort)を含む |
いいえ。ご自身の管理アドレスだけに限定する |
| 2344 と 2345(送信) | TCP と UDP | サーバーから arma31.battleye.com への BattlEye 接続 | 送信は許可し、受信は何も開けない |
| 3306 | TCP | すべての Life 系フレームワークがデータベース接続に使う extDB3 向けの MySQL | いいえ。127.0.0.1 にバインドする |
| 22 | TCP | SSH アクセス | いいえ。ご自身のアドレスだけに限定する |
この 8 行のうち、インターネットに開けてよいのはちょうど 3 つ、2302、2303、2304 の UDP です。それ以外は管理用であり、管理ポートを開けたままにしておくことが、Arma 3 サーバーで最も多い、避けられるはずの失敗です。
費用をかける前に自分でできること
この節が最も長いのは意図的です。きちんと設定された Arma 3 サーバーは、どこに置かれていようと、小規模から中規模の攻撃を自力で耐えます。
1. 現状把握:サーバーで何が待ち受けているか
ルールを 1 つ書く前に、お使いのサーバーが外に何を提供しているかを確認します。推測せず、実際に見てください。
ss -lntup
注目するのはローカルアドレスの列です。0.0.0.0:2302 は「インターネット全体から到達できる」、127.0.0.1:3306 は「ローカルのみ」で、ファイアウォールルールは不要という意味です。Life 系のサーバーでは、ゲーム本体のほかに MariaDB、勢力紹介ページ用のウェブサーバー、TeamSpeak などのボイスサービス、そして忘れられた管理パネルが並んでいることがよくあります。攻撃側からの見え方は、外部からのポートスキャンで分かります。
nmap -Pn -sU -p 2300-2320 YOUR.SERVER.IP.ADDRESS
nmap -Pn -p- --min-rate 1000 YOUR.SERVER.IP.ADDRESS
1 つ目のコマンドはゲームの UDP ブロックを、2 つ目は TCP で開いているものすべてを表示します。Arma 3 サーバーは、ゲームの動作に開いた TCP ポートを 1 つも必要としません。
2. Arma 3 が本当に必要とするポートだけを開ける
外に向けるのは 3 つの UDP ポートで足り、それ以外は制限します。UFW では次のようになります。自分自身を締め出さないよう、この順番どおりに実行してください。
ufw allow from 203.0.113.10 to any port 22 proto tcp comment 'SSH'
ufw allow 2302:2304/udp comment 'Arma 3 ゲーム、Steam クエリ、Steam マスター'
ufw allow from 203.0.113.10 to any port 2306 proto udp comment 'BattlEye RCon'
ufw default deny incoming
ufw default allow outgoing
ufw --force enable
ufw status verbose
203.0.113.10 はご自身のアドレスに置き換えてください。ポート 2305 は、Bohemia が予約済みで現在は未使用としているため閉じたままにします。重要なのは ufw default allow outgoing の行です。BattlEye はサーバーから arma31.battleye.com への接続を確立し、そのために送信方向で TCP と UDP の 2344、および TCP の 2345 を使います。送信を一律で遮断すると、自分のアンチチートを締め出すことになります。設定を変えたら実際に参加してみて、BattlEye がプレイヤーを通し続けているか確認してください。復旧手段まで含む詳しい手順は 自分を締め出さずに UFW ファイアウォールを設定する にあります。
データベースは、どんな場合でもインターネットに出してはいけません。Altis Life やほかの Life 系フレームワークは、拡張機能 extDB3 を通じて MySQL データベースと通信し、その接続情報は @extDB3/extdb3-conf.ini に平文で置かれています。/etc/mysql/mariadb.conf.d/50-server.cnf に次の記述があるか確認してください。
bind-address = 127.0.0.1
3. サーバーブラウザーから消えずに Steam クエリポートの危険を下げる
ポート 2303 UDP は、公開された Arma 3 サーバーで最も弱い箇所です。ここは A2S クエリ、つまり Steam サーバーブラウザーの標準的な問い合わせに応答します。A2S_INFO は名前、マップ、プレイヤー数を、A2S_PLAYERS はプレイヤーリストを、A2S_RULES は Mod と署名のリストを返します。問い合わせは小さな UDP パケット 1 つですが、応答はその何倍にもなります。US-CERT はアラート TA14-017A で Steam プロトコルの帯域幅増幅率を 5.5 としており、Arma 3 では Mod リストが丸ごと含まれるため、応答がとくに大きくなります。
ここから 2 つのことが導かれます。第一に、攻撃側が送信元アドレスを偽装した問い合わせを送れば、お使いのサーバーが第三者への増幅器として悪用されます。第二に、そしてご自身にとってより重要なことに、問い合わせ 1 件ごとに、シミュレーションを担う 1 つのコアの計算時間が削られます。Bohemia は 2015 年からこの件のチケット(T83469)を公開しています。ゲームポートや Steam クエリポートに送られた偽装 UDP パケットが CPU を 100 パーセントまで押し上げてサーバーを停止させ、クエリポート経由の攻撃を成功させるには 4 Mbit/s あれば足りた、という内容です。Arma 3 では帯域幅よりパケットレートのほうが危険だという理由が、ここにあります。
1 つ目の手立ては応答サイズです。server.cfg のディレクティブ steamProtocolMaxDataSize は、サーバーがクエリ応答に詰め込めるバイト数を決めます。大きな Mod リストを運用する人は、ログに「Query data overflow, Mods/Signatures will not be correctly received by clients」という警告が出るため、この値を 2048 以上に上げます。しかし値を上げるたびに、攻撃側が増幅に使うまさにその応答が大きくなります。Mod リストが通る範囲でできるだけ小さく設定し、使っていない Mod は起動コマンドから外してください。
steamProtocolMaxDataSize = 2048;
2 つ目の手立ては、クエリポートだけに効かせる送信元アドレスごとのレート制限です。2303 UDP を一律で閉じてはいけません。クエリに応答しなくなると、お使いのサーバーはサーバーブラウザーとあらゆるステータスページから消え、新しいプレイヤーには見つけられなくなります。正規のサーバーブラウザーは 1 分に数回しか問い合わせません。毎秒数百回ではないのです。
4. BattlEye の RCon をインターネットから切り離す
BattlEye は Arma 3 のアンチチートで、server.cfg に BattlEye = 1; と書いて有効にします。付属のリモート操作機能である BattlEye RCon は独自の UDP プロトコルで、BattlEye/beserver_x64.cfg で設定します(_x64 が付くファイルは、現在一般的なサーバーである arma3server_x64 用です)。
RConPassword YourAlphanumericPassword
RConPort 2306
RConIP 127.0.0.1
MaxPing 350
RestrictRCon 0
重要な点は 3 つです。RCon のパスワードは英数字だけで構成してください。記号を入れると BattlEye のプロトコル解析が静かに狂い、静かに壊れた RCon は、いざというときに使えない RCon です。RConIP は RCon がどのアドレスで待ち受けるかを決めます。127.0.0.1 を指定すればインターフェースはローカルからのみ到達可能になり、RCon ツールは SSH ポートフォワーディング経由で接続します。そして RConPort はゲームのブロックより上に置く必要があり、通常はゲームポート +4、つまり 2306 です。RCon を外に開けなければならない場合は、管理チームの固定アドレスにだけポートを許可してください。
この点ははっきりさせておきます。BattlEye はアンチチートであり、DDoS 対策ではありません。BattlEye が調べるのは、接続済みのプレイヤーです。サーバーをあふれさせる攻撃側は、そもそも参加する気がありません。
5. ヘッドレスクライアントを固定したアドレスに縛る
ヘッドレスクライアントとは、グラフィックを持たない 2 つ目の Arma 3 インスタンスで、プレイヤーと同じようにサーバーへ接続し、AI の計算を引き受けます。大規模なミッションでは、これが最も大きな性能改善になります。そうしなければ、AI の処理がシミュレーションと同じコアに載るからです。有効にするのは server.cfg です。
headlessClients[] = {"127.0.0.1"};
localClient[] = {"127.0.0.1"};
この記述がなければ、サーバーはヘッドレスクライアントの接続を一切受け付けません。これは良い知らせです。悪い知らせは、localClient[] が、登録されたアドレスに無制限の帯域幅と、事実上の遅延チェック免除を与えることです。ここには 127.0.0.1 か、ご自身のヘッドレスクライアント用サーバーの固定アドレスだけを書いてください。アドレス範囲をまとめて書いてはいけません。クライアントの起動は -client -connect=127.0.0.1 -port=2302 -password=... で行い、maxPlayers のスロットを 1 つ消費します。これを見込んでおかないと、プレイヤーは満員のサーバーを前にすることになります。
6. 参加、署名、投票を固める
ここでの設定はお使いの回線を守るものではありませんが、通常の参加経路から来るものをすべて閉じます。改造されたクライアント、ゲーム内でのスクリプト実行、投票の悪用です。公開サーバーの server.cfg には、次の行が必要です。
verifySignatures = 2;
BattlEye = 1;
kickDuplicate = 1;
allowedFilePatching = 0;
maxPlayers = 64;
disconnectTimeout = 30;
maxPing = 200;
maxDesync = 150;
maxPacketLoss = 50;
kickClientsOnSlowNetwork[] = {1, 1, 1, 1};
voteThreshold = 1.5;
voteMissionPlayers = 100;
onUnsignedData = "kick (_this select 0)";
onHackedData = "kick (_this select 0)";
verifySignatures = 2 は、すべての Addon に対して署名検証のバージョン 2 を強制するもので、Mod を使う公開サーバーの最低要件です。allowedFilePatching = 0 は -filePatching 付きで起動したクライアントの参加を拒否します(値 1 はヘッドレスクライアントにのみ、値 2 はすべてのクライアントに許可します)。kickDuplicate = 1 は、同じ識別子による 2 つ目の接続を切断します。kickClientsOnSlowNetwork[] は、maxPing、maxPacketLoss、maxDesync、disconnectTimeout の 4 つのしきい値について、ログに記録するだけ(0)か、実際に適用する(1)かを項目ごとに決めます。disconnectTimeout は 5 から 90 秒の値を受け付けます。voteThreshold を 1 より大きくすると投票は成立しなくなり、攻撃パケットを 1 つも使わずにサーバーを妨害する最も人気の手口、つまり投票によるミッション変更を封じられます。
7. 送信元アドレスごとにパケットと接続のレートを制限する
小規模な攻撃や作りの粗いボットには、送信元アドレスごとの上限が効きます。Arma 3 は UDP だけを使うため hashlimit で処理し、クエリポートにはゲームポートよりはるかに厳しい上限を設定します。
iptables -I INPUT -p udp --dport 2303 -m hashlimit --hashlimit-name a3_query --hashlimit-mode srcip --hashlimit-above 10/sec --hashlimit-burst 20 -j DROP
iptables -I INPUT -p udp --dport 2302 -m hashlimit --hashlimit-name a3_game --hashlimit-mode srcip --hashlimit-above 900/sec --hashlimit-burst 1200 -j DROP
iptables -I INPUT -p udp --dport 2302:2306 -m length --length 0:27 -j DROP
1 つ目のルールは、同じ送信元から毎秒 10 件を継続して超えるクエリを破棄し、2 つ目は毎秒 900 件を継続して超えるゲームパケットを破棄し、3 つ目は意味のあるペイロードを持たない UDP パケットを破棄します。3 つの数値はいずれも出発点で、絶対の正解ではありません。80 人が入った Life サーバーは、6 人の Antistasi よりはるかに多くのパケットを生みますし、厳しすぎる設定は自分のプレイヤーを追い出します。まずは平常時を 1 週間測ってください。
注意点が 2 つあります。iptables のルールだけでは再起動で消えるため、Debian と Ubuntu では次のように保存します。
apt-get install -y iptables-persistent
netfilter-persistent save
UFW を使っている場合、こうしたルールは /etc/ufw/before.rules に書きます。そうしないと、次の ufw reload で消えてしまいます。さらに見落とされがちな詰まりどころが、カーネルの接続追跡です。UDP でもそこにエントリーが作られるため、多数の偽装アドレスからのクエリフラッドは数秒でテーブルを埋めます。あふれると、サーバーは正規のパケットまで破棄し、ログには「nf_conntrack: table full」と出ます。現在値と上限は次のコマンドで確認できます。
sysctl net.netfilter.nf_conntrack_count net.netfilter.nf_conntrack_max
8. basic.cfg:帯域幅、パケットサイズ、追加ファイル
Arma 3 サーバーの 2 つ目の設定ファイルは basic.cfg で、-cfg= で読み込みます(-config= が読み込むのは server.cfg です)。このファイルはネットワークの挙動を制御し、直接セキュリティに関わる値をちょうど 1 つ含みます。
MaxMsgSend = 1024;
MaxSizeGuaranteed = 512;
MaxSizeNonguaranteed = 256;
MinBandwidth = 15000000;
MaxBandwidth = 100000000;
MinErrorToSend = 0.001;
MinErrorToSendNear = 0.01;
MaxCustomFileSize = 0;
class sockets { maxPacketSize = 1400; };
MaxCustomFileSize は、プレイヤーが持ち込み、サーバーがほかの全員に配布する顔とサウンドのファイルの最大サイズ(バイト)です。値 0 はこの配布を無効にします。これで、攻撃の仕組みを何も用意せずに 1 人のクライアントがサーバーの帯域幅を占有する経路が 1 つなくなります。MinBandwidth は、サーバーが確保済みとみなす帯域幅で、目安はプレイヤー数 × 256 kbit/s、つまり 64 スロットで約 16 Mbit/s です。楽観的すぎる値は、サーバーが作ってから捨てるメッセージを増やすため、負荷と同期ずれを大きくします。MaxMsgSend はシミュレーションの 1 ステップあたりのパケット数を制限し、同期ずれ対策の第一の調整点です。初期値の 128 は、いまのサーバーには低すぎる設定です。
9. 攻撃中に推測しなくて済むようにログを取る
最も重要なのは、ほとんど誰も事前にやらない手順、つまりすべてが平常に動いているうちに基準値を作っておくことです。平常時の値がなければ、障害のあとで毎秒 4 万パケットが多かったのか、それとも単に土曜の夜だったのかを判断できません。apt-get install -y vnstat sysstat で測定は常に走り続け、server.cfg の logFile = "arma3server.log"; がサーバー側の記録を加えます。障害の最中は、4 つのコマンドで足ります。
sar -n DEV 1 10
ip -s link show eth0
dmesg -T | tail -50
tcpdump -ni eth0 udp portrange 2302-2306 -c 200 -q
手がかりになるのはポートごとの比較です。負荷がほぼ 2303 に集中しているならクエリフラッドで、削られるのは計算時間です。送信元アドレスが次々に変わりながら 2302 から 2306 に均等に分散しているなら偽装された UDP フラッドで、こちらは回線に当たります。tcpdump では必ず -c で件数を区切ってください。全負荷の状態での取得は、すでに過負荷のサーバーにさらに負荷をかけます。測定値の読み方は DDoS 攻撃を検知する で、サーバーそのものを正しくインストールして更新する方法は SteamCMD でゲームサーバーをインストールする で解説しています。
ここまでの対策が限界を迎える地点
ここからは、どの設定ファイルでも解決できない部分です。これまでの対策はすべてお使いのサーバー上、つまり回線の末端で動きます。ファイアウォールのルールが判断するのは、すでにケーブルを通り終えたパケットです。破棄はできますが、送られなかったことにはできません。
一度計算してみてください。一般的なゲームサーバーは 1 Gbit/s の回線につながっており、これは毎秒 125 メガバイトです。誰かがそれより多く送った時点で、回線は埋まります。2 つ目の指標はパケットレートで、Arma 3 ではほぼ常にこちらが先に限界に達します。64 バイトの小さなパケットなら、1 Gbit/s の回線には毎秒約 149 万パケットが入ります。通常のサーバーのカーネルが破棄を始める前に処理できるのは、CPU とネットワークカードによりますがそのうち数十万で、さらに Arma 3 のシミュレーションは 1 つのコアに縛られています。
| 項目 | 値 |
|---|---|
| 標準のポートブロック | 2302 から 2306 の UDP。ゲームの動作に TCP は不要 |
| クエリポート | ゲームポート +1、標準では 2303 UDP |
| RCon ポート(BattlEye) | RConPort で自由に指定可能。通常はゲームポート +4、つまり 2306 UDP |
| 複数インスタンスを動かす場合のポート間隔 | 100 以上(2302、2402、2502) |
| 平常時の帯域幅の目安 | プレイヤー数 × 256 kbit/s、つまり 64 スロットで約 16 Mbit/s |
| Steam プロトコルの増幅率 | US-CERT のアラート TA14-017A によると 5.5 |
| 効果のある攻撃として記録された下限 | クエリポートへの 4 Mbit/s で Arma 3 サーバーが停止した(Bohemia のチケット T83469) |
| 1 Gbit/s をパケット数に換算 | 64 バイトのパケットで毎秒約 149 万パケット |
| KernelHost で実際に除去した最大規模 | 毎秒 4150 万パケットで 473.4 Gbit/s、別件で 112.2 Gbit/s の UDP フラッド |
いちばん厄介なのは 4 Mbit/s の行です。Arma 3 では、攻撃は効かせるために大きくある必要がありません。正しいポートに十分な数のパケットを送るだけで足ります。運用者にはこれが「使用率はまったく高くなかったのに、それでも全部落ちた」という形で見えます。逆にボリューム型攻撃には単純な物理が働きます。473.4 Gbit/s ではローカルの設定はどれも無意味です。プレイヤーのパケットは、その手前で通れなくなっているからです。ボリューム型攻撃は、サーバーの手前のネットワークで終わらせる必要があります。
KernelHost が用意している対策
すべてのサーバーに標準で含まれる常時保護
KernelHost の DDoS 対策は 2 段階で構成されており、有効化も注文も設定もなしに常時動いています。
- 第 1 段階:グローバルなスクラビングネットワークにおける 17 Tbps の緩和能力。 ボリューム型攻撃は、データセンターに届く前に、発生源の近くで除去されます。
- 第 2 段階:フランクフルトにおける 3.2 Tbps の Arbor リアルタイムフィルタリング。 サーバーの直前で、プロトコル固有のパターンを検知し、パケット単位で破棄します。
決定的な性質が 2 つあります。保護は常時動いており、攻撃を受けてから反応する必要がありません。つまり、最初の数分だけサーバーが落ちている、ということが起きません。そしてヌルルーティングは使いません。お使いの IP アドレスはネットワークに残り、破棄されるのは有害なパケットだけです。IP アドレスをネットワークから外す事業者は、ご自身にとって攻撃側と同じ結果をもたらします。どのゲームとプロトコルが対象かは ゲームサーバーの DDoS 対策をリアルタイムで にまとめています。
継続的に攻撃されるプロジェクト向けの Advanced DDoS Protection
プロジェクトによっては、たまたまではなく、狙って何週間も攻撃されます。固定したプレイヤー層と競合するシーンを持つ Life サーバーでは、これは例外ではなく通常です。そのために Advanced DDoS Protection があり、月額 50.00 EUR から、PrePaid、最低利用期間なし、初期費用なしで利用できます。違いは容量の大きさではなく、制御できることにあります。
- 専用の保護 IP をフランクフルトの中核から割り当て、お使いのサーバーを当社のネットワーク内で切り替えます。ご自身の側で作り直す作業はありません。
- ポートとプロトコルごとに自分で管理できる保護ルールをカスタマーエリアで設定できます。2302 UDP で何を許可するか、2303 UDP で何を許可するかを分けて指定できるため、クエリポートをゲームポートよりはるかに厳しく運用できます。
- 変更はリアルタイムで反映されます。そのため、メンテナンス枠を待つのではなく、攻撃が進行している最中に調整できます。
- ゲームに合わせた保護プロファイルを用意しており、改造したアプリケーションや独自のアプリケーションを任意の TCP または UDP ポートで動かす場合にも対応します。
2 つの段階の比較
| 項目 | 標準で含まれる DDoS 常時保護 | Advanced DDoS Protection |
|---|---|---|
| 料金 | すべてのサーバープランに含まれ、追加料金なし | 月額 50.00 EUR から、PrePaid |
| フィルタリング能力 | 17 Tbps のグローバルなスクラビングと、フランクフルトにおける 3.2 Tbps の Arbor リアルタイムフィルタリング | 同じ 2 段階のフィルタリング |
| IP アドレス | お使いのサーバーの IP アドレス | 追加の専用保護 IP |
| ルールセット | 自動プロファイル、設定は不要 | カスタマーエリアでポートとプロトコルごとの独自ルール。たとえば 2302 と 2303 を分けて設定 |
| 変更 | 自動で追従する | リアルタイムで反映され、攻撃の最中でも可能 |
| ゲームプロファイル | 主要なタイトル向けの最適化プロファイル | ゲームに合わせたプロファイル。改造したアプリケーションにも対応 |
| ヌルルーティング | なし | なし |
| 契約期間 | サーバープランに連動 | PrePaid、最低利用期間なし、解約予告期間なし、初期費用なし |
ほとんどの Arma 3 プロジェクトでは、標準で含まれる常時保護と、きちんとしたサーバー設定を組み合わせれば十分です。Advanced DDoS Protection は、誰かが個人的な問題として攻撃してくる場合への答えです。
よくある失敗とその対処
「ポートを 2302 から 2402 に変えたのに、攻撃は続いた」:予想どおりです。サーバーは新しいポートを自分で Steam マスターサーバーに登録し、サーバーリストはそれをすぐに公開し直します。ポート変更が効くのは、古いスクリーンショットの古い情報を使っている相手に対してだけです。
「2303 を完全に閉じたら、誰にも見つけてもらえなくなった」:まさにそうなります。Steam クエリポートが応答しないと、サーバーブラウザーの一覧から消え、あらゆるステータスページと Discord ボットがサーバーをオフラインと表示します。正しいのは遮断ではなく、送信元アドレスごとのレート制限です。
「ログに NetServer::SendMsg: cannot find channel と出る」:このメッセージは、サーバーがもう存在しない接続に書き込もうとしたときに出ます。通常はプレイヤーの接続切れや性能低下に伴うもので(Bohemia は T83936 として扱っています)、必ずしも攻撃を意味しません。まずは、インターフェースのパケットレートがそもそも異常なのかを確認してください。
「iptables のルールが効かない」:よくある原因は 3 つです。ルールが UFW のチェーンの後ろにあって到達しない、前回の再起動で消えていた(この場合は netfilter-persistent save か /etc/ufw/before.rules への記述が助けになります)、あるいは攻撃がボリューム型で、ルールはすでに埋まった回線の上で正しく動いている、のいずれかです。iptables -L INPUT -n -v で一致カウンターが増えているか確認してください。0 のままなら、そのルールには届いていません。
「新しいファイアウォールを入れてから BattlEye が全員をキックする」:サーバーが arma31.battleye.com に到達できていません。送信方向の TCP と UDP の 2344、および TCP の 2345 は開けたままにする必要があります。そうしないと、サーバーのアンチチート接続が切れます。
「これまで使っていた事業者に IP アドレスを遮断された」:それがヌルルーティングです。事業者はそれで自分のネットワークを守りますが、ご自身にとっての結果は攻撃の成功と同じで、多くの場合そのあと数時間続きます。判断に迷うときは、フィルタリングなのかヌルルーティングなのかを尋ねてください。その答えは、どんなハードウェアの仕様よりも可用性を左右します。
「tcpdump で見ても、おかしなところがない」:手前のネットワークですでにトラフィックが除去されている場合、サーバーには何も届かないのが当然です。フィルタリングが機能しているときの通常の姿です。逆に回線が飽和していると、測定に使おうとした SSH セッションさえ届かないことがあります。その場合は、ゲスト側のネットワークに依存せず動作する、カスタマーエリアの VNC コンソールを使ってください。
まとめ
- Arma 3 サーバーが外に必要とする UDP ポートはちょうど 3 つです。ゲームとボイス用の 2302、Steam クエリ用の 2303、Steam マスターサーバーへの登録用の 2304 です。TCP は必要ありません。
- ポート 2306 UDP は BattlEye と RCon インターフェースを運びます。
beserver_x64.cfgのRConPortとRConIPで設定し、ご自身の管理アドレスだけに限定してください。 - Steam クエリポートの 2303 が最も弱い箇所です。Steam プロトコルの増幅率は US-CERT TA14-017A によると 5.5 で、問い合わせ 1 件ごとにシミュレーションを担うコアの計算時間が削られます。遮断ではなく制限してください。
steamProtocolMaxDataSizeは Mod リストが許す範囲で小さく保ち、basic.cfgにはMaxCustomFileSize = 0;を設定します。どちらも、サーバーが求められてもいないのに送り出すデータ量を減らします。- Arma 3 で効くのはパケットレートで、帯域幅ではありません。Bohemia は 2015 年から T83469 として、クエリポートへの 4 Mbit/s だけでサーバーが停止したことを記録しています。
- ローカルの対策は回線で終わります。攻撃の規模が 1 Gbit/s を超えるか、毎秒数十万パケットに達した時点からは、サーバーの手前のネットワークでのフィルタリングだけが効きます。
- KernelHost では、2 段階の常時保護がすべてのサーバープランに追加料金なしで含まれ、提供開始時点から有効で、ヌルルーティングは行いません。Advanced DDoS Protection は月額 50.00 EUR から、専用の保護 IP とポートごとに自分で管理できるルールを追加します。
プロジェクトをすでに KernelHost で動かしている場合、フィルタリングは何もしなくても有効です。それでも異常に気づいたときは サポートチケット を開いてください。お使いの IP アドレス向けにフィルタールールを調整します。攻撃が進行中の場合は、WhatsApp の緊急チャット +43 650 8209883 でもご連絡いただけます。
よくあるご質問
Arma 3 サーバーがいまオフラインです。DDoS 攻撃かどうかは、どこで見分けられますか?
Arma 3 サーバーが本当に必要とするポートはどれですか?
Steam クエリポートの 2303 は、単純に閉じてしまえばよいのでしょうか?
Steam クエリのリフレクションとは何で、なぜ Arma 3 サーバーが巻き込まれるのですか?
BattlEye は Arma 3 サーバーを DDoS 攻撃から守ってくれますか?
いますぐ IP アドレスかポートを変えれば効果がありますか?
iptables や UFW で DDoS 攻撃に対抗できますか?
どのくらいの規模から、Arma 3 サーバーは自力で耐えられなくなりますか?
ヘッドレスクライアントは、どう守るのが正しいのですか?
KernelHost のサーバーは、攻撃を受けている間オフラインになりますか?
KernelHost の DDoS 対策は別料金ですか。また、Advanced DDoS Protection が必要になるのはどんなときですか?
2026 KernelHost GmbH。無断複写・転載を禁じます。本ガイドは著作権により保護されております。他のウェブサイトへの掲載は、一部のみの場合や編集を加えた場合であっても、当社の書面による同意なしには認められません。出典の明記とリンクを添えた引用は歓迎いたします。

