ゲームサーバー用のLinux OSでは、ゲームを入れる前にOS更新・一般ユーザー作成・SSH鍵認証・ファイアウォール・自動更新の5つの初期設定をしておくとよいでしょう。本記事では、ゲームサーバー用のLinux OSとしてよく用いられるUbuntuを対象として設定手順を解説します。

全体像

順番設定目的
①セキュリティアップデート既知の脆弱性を塞ぐ
②一般ユーザー作成rootを日常運用から外す
③SSHの鍵認証化不正ログイン対策の本命
④ファイアウォール必要なポートだけ開ける
⑤自動更新セキュリティ更新を自動化

① セキュリティアップデート

VPSなどでサーバーを作成した直後は、まずセキュリティアップデートを実施し、再起動しておきましょう。 Ubuntuでは以下の手順で実施します。

sudo apt update
sudo apt upgrade
sudo reboot

② 一般ユーザーを作る

rootのような特権アカウントは攻撃されやすいため、一般ユーザーを作成してsudoを設定し、日常運用をrootで行わないことが推奨されています。 次のように作成します。

sudo adduser <ユーザー名>            # 対話に沿ってパスワードを設定(他の項目は空欄でよい)
sudo usermod -aG sudo <ユーザー名>   # sudoグループに追加

作成できたら切り替えて、sudoが使えることを確認します。

su - <ユーザー名>
sudo whoami                          # rootと表示されれば設定完了

以降の作業も、作成した一般ユーザーで行います。

③ SSHを公開鍵認証にする

パスワードによるSSHログインは不正ログインの危険性が高いため、公開鍵認証を設定した上でSSHログインを公開鍵認証に限定しましょう。

  1. 手元のPCで鍵を作る。Ubuntu公式はed25519を推奨: ssh-keygen -t ed25519
  2. 公開鍵をサーバーの~/.ssh/authorized_keysに追記する
  3. 鍵でログインできることを確認する

次に、以下の2項目を/etc/ssh/sshd_configに設定します。

PermitRootLogin no          # rootでのSSHログインを禁止
PasswordAuthentication no   # 公開鍵認証に限定

反映時は以下のように文法チェックを実施し、エラーがないことを確認した上で反映を実施しましょう。

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original  # 事前にバックアップを取得するようにしておくとよい
sudo sshd -t                                                # 文法チェック
sudo systemctl restart ssh.service                          # 反映

接続手段がSSHだけのサーバーで設定を誤ると、締め出されるおそれがあるため、反映後は今のSSH接続を切らず、別ウィンドウで新規接続を試すと安全です。VPSによってはブラウザなどのコンソールからのログインが可能なものもあるため、復旧手段を確認した上で設定すると安全です。

国内の代表的なVPS(ConoHaやXServer等)では、サーバーの作成時に鍵の作成及び、設定が行えるので、そのようなVPSでサーバーを作成する際は作成時に設定しておくようにしましょう。

④ ファイアウォール: 必要なポートだけ開ける

Ubuntu既定のファイアウォール設定ツールはufwです。以下の手順でSSHに対してルールを有効化しましょう。 なお、ufwでは基本的にルールを追加するとIPv4とIPv6の両方に設定が行われます。

sudo ufw allow 22            # SSHを許可(有効化の前に必ず)
sudo ufw enable              # 有効化
sudo ufw status numbered     # ルール確認

ゲーム用のポートは、遊ぶタイトルで必要になるものだけ追加で開けるようにしましょう。たとえばマイクラJava版の既定ポートは25565です。 タイトル別のポート番号とコマンドはポート開放ジェネレーターで確認できます。 なお、身内だけで遊ぶサーバーなら、Tailscaleを使ってポート開放をしない選択肢もあります。

sudo ufw allow 25565         # 指定するポート番号はゲームによって異なる
sudo ufw reload              # 設定の再読み込み

また、接続元のIPが固定可能である場合、SSHを特定の接続元だけに絞ってもよいでしょう。

sudo ufw allow proto tcp from xxx.xxx.xxx.xxx to any port 22   # xxx.xxx.xxx.xxxは自分の環境のIPに読み替えてください

なお、国内の主要VPS(ConoHaやXServer等)では、サーバーで設定するファイアウォール以外にパケットフィルター設定を備えているものが多いです。 そうしたVPSを使う場合は、パケットフィルターで設定しても効果は同等ですので、どちらで制御するかは決めて設定するとよいでしょう。

参加者からゲームサーバーまでの通信が、VPSのパケットフィルターとufwという2つの関門を通る構成図
図: ポート開放の2つの関門。両方の許可がそろって初めて接続できる

⑤ 自動更新を確認する

Ubuntu Serverのunattended-upgradesは、既定でインストール・有効です。自動適用されるのはセキュリティ更新のみです。 定期的にサーバーを再起動してセキュリティ更新を適用するようにしましょう。

  • 自動再起動(Automatic-Reboot)は既定で無効。プレイ中に勝手に再起動されることはない
  • 自動再起動を有効にする場合、Automatic-Reboot-Timeで時刻を指定できる。ゲームのプレイヤーが少ない深夜などに設定する
  • サードパーティのリポジトリはAllowed-Originsに追加しない限り対象外。ゲームサーバー本体の更新は各ゲームの仕組みで行う

よくある質問

SSHのポート番号は変えるべきですか

以前は定石とされていましたが、現在では必須とされていません。 攻撃の前には一般にポートスキャンが行われ、番号を変えても見つかるため、効果は限定的です。

設定を間違えて接続できなくなったら

予防が第一です。編集前のバックアップとsshd -tでの文法チェックを必ず行ってください。締め出された場合の復旧手段(ブラウザからのコンソール等)は事業者により異なるため、契約先のマニュアルを確認してください。

自動更新でゲームサーバーが勝手に再起動しませんか

既定ではされません。unattended-upgradesの自動再起動は既定で無効です。適用されるのもセキュリティ更新のみです。 SteamCMDやDockerで導入したゲームサーバー本体はapt管理外のため、この仕組みの対象になりません。

まとめ

  • セキュリティアップデート→一般ユーザー作成→SSH鍵認証→ファイアウォールの設定→自動更新の確認の順で進める
  • rootログインとパスワード認証は無効化
  • 開けるポートはSSHとゲームで利用するものだけに限定する

ここまで終えたら、発展編としてfail2banによる自動ブロックと攻撃ログの見方もどうぞ。実際に来ている攻撃の量をログで確認できます。

参考リンク