この汎用ガイドは、LinuxマシンまたはWindows Serverを任意のゲームサーバー向けに準備します:ホスト選び、非rootユーザー、SSH鍵、ファイアウォール、fail2ban、SteamCMD、Docker、systemdサービス、監視、バックアップ。所要時間は1〜2時間です。その後、各ゲームのインストールガイドに進んでください。
手順ごとのインストール
ホストとプランを選び(「ホストの選び方」参照)、Ubuntu LTSまたはDebian stableのVPS/専用サーバーを契約します。
提供されたrootアカウントでSSH接続し、システムを更新します。
sudo付きの非rootユーザーを作成します。ゲームサーバーをrootで動かしてはいけません。
公開SSH鍵を登録し、rootログインとパスワードログインを無効にします。
ufwを有効にします:受信は全拒否、SSHとゲームのポートのみ許可。
fail2banを導入し、繰り返されるSSHログイン試行をブロックします。
ゲームに応じてSteamCMD(Steamゲーム)またはDocker(コミュニティイメージ)を導入します。
各ゲームのガイドでサーバーをインストールし、ポートを開放します(「ポート確認ツール」参照)。
サーバーを自動で起動・再起動するsystemdサービス(またはtmuxセッション)を作成します。
監視(ログ、リソース)と、テスト済みの定期バックアップを設定します。
ホストとプランの選び方
- VPS(月数ユーロから):小規模サーバーなら十分です。多くのゲームは高速な1コアに依存するため、CPUが過度に共有されていないか確認します。
- 専用サーバー:複数サーバーや多スロット向け。SSD/NVMeと高いCPUクロックを選びます。
- 選定基準:プレイヤーに近い所在地(遅延)、DDoS対策の有無、無制限または十分なトラフィック枠、ネットワークファイアウォール(セキュリティグループ)、スナップショット、サポート。リソースは「サーバーリソース計算機」で見積もります。
初回ログインと非rootユーザー
203.0.113.10をサーバーのIP、gameadminを好きな名前に置き換えます:
ssh [email protected]
apt update && apt upgrade -y
adduser gameadmin
usermod -aG sudo gameadminSSH鍵とsshdの強化
手元のPCで ssh-keygen -t ed25519 のあと ssh-copy-id [email protected] を実行します。パスワード無効化の前に、別ターミナルで鍵ログインを必ずテストし、/etc/ssh/sshd_config.d/99-hardening.conf(Ubuntu 22.04以降、Debian 12)を作成します:
# /etc/ssh/sshd_config.d/99-hardening.conf
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
# Apply: sudo sshd -t && sudo systemctl reload sshufwファイアウォール
ufwを有効にする前にSSHを許可して、締め出しを防ぎます。次にゲームのポートを追加します(FiveMの例:30120のTCPとUDP。各ゲームのポートは「ポート確認ツール」にあり、「ファイアウォールルール」ツールがコマンドを生成します)。ホストのネットワークファイアウォール(OVH、Hetzner、Scalewayなど:セキュリティグループ)にも同じ設定をします。
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 30120/tcp
sudo ufw allow 30120/udp
sudo ufw enable
sudo ufw status verbosefail2ban
fail2banは、ログインに繰り返し失敗したアドレスを一時的にBANします。/etc/fail2ban/jail.localを作成します(jail.confは編集しない):
# sudo apt install fail2ban
# /etc/fail2ban/jail.local
[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1h
# sudo systemctl enable --now fail2ban
# sudo fail2ban-client status sshdSteamCMD(Steamゲーム)
Valve公式アーカイブからの手動インストールです(rootではなくgameadminで実行)。APPIDをゲームの専用サーバーIDに置き換えます(SteamDBまたはゲームのガイド参照)。一部のサーバーは「anonymous」ではなくSteamアカウントが必要なので、ゲームのドキュメントを確認してください。
sudo apt install -y lib32gcc-s1 curl ca-certificates
mkdir -p ~/steamcmd && cd ~/steamcmd
curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -
./steamcmd.sh +force_install_dir ~/server +login anonymous +app_update APPID validate +quitDocker(コミュニティイメージ)
Dockerの便利スクリプトはテスト向けで、本番ではdocs.docker.comのaptリポジトリ経由のインストール手順に従ってください。dockerグループへの追加後は再ログインが必要です。-pで公開したコンテナはufwを迂回するため、ホストのファイアウォールでも制限してください。
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker gameadmin
# log out, log back in, then:
docker run --rm hello-worldsystemdサービス
/etc/systemd/system/gameserver.serviceを作成し(User、WorkingDirectory、ExecStartをゲームの起動スクリプトに合わせる)、sudo systemctl daemon-reload && sudo systemctl enable --now gameserver を実行します。ログ:journalctl -u gameserver -f。
[Unit]
Description=Game server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=gameadmin
WorkingDirectory=/home/gameadmin/server
ExecStart=/home/gameadmin/server/start.sh
Restart=on-failure
RestartSec=10
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target代替案:tmux
tmuxはSSH切断後もサーバーを動かし続け、コンソールにも入れます(コマンド入力に便利)。Ctrl+B、続けてDでデタッチします。クラッシュや再起動後の自動再起動はしないため、本番ではsystemdを推奨します。
sudo apt install -y tmux
tmux new -s game
# inside tmux: run ./start.sh, then press Ctrl+B then D
tmux attach -t gameWindows Serverの場合
リモートデスクトップで接続し(3389番ポートは自分のIPに限定するかVPNを使用)、C:\gameserverにSteamCMDまたはゲームサーバーをインストール、管理者のPowerShellでポートを開放し、タスクスケジューラで起動時に自動実行します。想定外の停止を防ぐため、Windows Updateの再起動時刻は計画してください。
New-NetFirewallRule -DisplayName "Game UDP 27015" -Direction Inbound -Protocol UDP -LocalPort 27015 -Action Allow
New-NetFirewallRule -DisplayName "Game TCP 27015" -Direction Inbound -Protocol TCP -LocalPort 27015 -Action Allow
schtasks /Create /TN "GameServer" /TR "C:\gameserver\start.bat" /SC ONSTART /RU SYSTEM /RL HIGHEST /F自宅ホスティング:ポート転送
- マシンに固定のローカルIPを割り当てます(ルーターのDHCP予約)。
- ルーターで、ゲームの各ポートを正しいプロトコルでそのローカルIPへ転送(NAT)します。
- マシンのファイアウォールも開放します。ローカルネットワークではなく外部(4G/5G)からテストします。
- 回線事業者がCGNAT(専用のグローバルIPなし)を使っている場合、ポート転送はできません。グローバルIPを依頼するか、VPSやトンネルを使います。
- 個人のIPを公開すると標的型DDoSなどのリスクがあります。公開サーバーには保護付きVPSのほうが安全です。
DDoS攻撃に関する注意
- マシンのファイアウォールだけでは大量トラフィック型の攻撃は防げません。上流のホスト側で防御する必要があります。
- プランのDDoS対策が何をカバーするか(UDP/ゲームプロトコル、ゲーミングモード)を確認してください。ホストによって異なります。
- プロキシやトンネルを使う場合は元のIPを公開しないでください。RCONやWebコンソールも公開しないこと。
監視
便利なコマンド:サービスのログ、実際にリッスンしているポート(ファイアウォールと照合)、CPU/RAM負荷、ディスク容量。継続的な監視にはNetdataやPrometheusなどを追加し、RAMとディスクのアラートを設定します。
journalctl -u gameserver -f
sudo ss -lntup
htop
free -h
df -hバックアップ
ワールドと設定を毎日バックアップし、複数世代を保持してサーバー外にコピーします。「バックアップスクリプト生成」ツールは保持設定付きの完全なスクリプトを作成します。最小例(crontab):
30 4 * * * tar -czf /backups/gameserver-$(date +\%Y\%m\%d).tar.gz -C /home/gameadmin server && find /backups -name 'gameserver-*.tar.gz' -mtime +7 -deleteトラブルシューティング
- プレイヤーが接続できない:プロトコル(UDPかTCPか)、ufw、ホストのファイアウォール、サーバーが実際にリッスンしているか(sudo ss -lntup)を確認します。
- 「Permission denied (publickey)」:鍵がユーザーの~/.ssh/authorized_keysにないか、パーミッションが緩すぎます(chmod 700 ~/.ssh、chmod 600 ~/.ssh/authorized_keys)。
- サーバーが強制終了される(「Killed」、OOM):メモリ不足です。「dmesg | grep -i oom」を確認し、RAMを増やすかスロットやMODを減らします。スワップファイルはクラッシュを抑えますが速度は落ちます。
- サービスが再起動を繰り返す:「journalctl -u gameserver -n 100」を確認し、パス、権限(サーバーがgameadmin所有であること)、SteamCMDに必要な32ビットライブラリの不足を調べます。
- サーバーが一覧に出ない:クエリポートが塞がれているか、サーバーが未登録です。game-rank.com/jeuxに登録して掲載されましょう。
よくある質問
- ゲームサーバーにはVPSと専用サーバーのどちらが良いですか?
- 小規模サーバーやテストならVPSで十分です。複数サーバー、多数のスロット、安定した性能(他の利用者の影響なし)が必要なら専用サーバーに移行します。
- UbuntuとDebianのどちら?
- どちらも使え、コマンドはほぼ同じです。サポート中のバージョン(Ubuntu LTSまたはDebian stable)を選び、ゲームのパブリッシャーが示す互換性を確認してください。
- rootログインとパスワードログインは本当に無効にすべきですか?
- 強く推奨します。公開サーバーには1日数千回の試行があります。SSH鍵と非rootユーザーでリスクの大半をなくせます。ホストのレスキューコンソールも確保しておきましょう。
- Dockerと直接インストールのどちら?
- SteamCMDとsystemdによる直接インストールが最も簡単で、パブリッシャーの文書も充実しています。Dockerは分離でき、1台で複数サーバーを動かしやすい反面、ネットワーク、ボリューム、ファイアウォールという理解すべき層が増えます。
