さくらのVPSでminecraftマルチプレイヤサーバを構築 OS設定編

メニュー

インストール関連
運用関連

コンソールからログイン

CentOS7のインストールが完了したら、今度はOSの設定を行っていきます。
まずは、コンソールで作業してきますので、rootユーザでログインします。

アップデート実行

さくらのVPSをカスタムインストールでOSをインストールした場合は、OSはネットインストールなので最新状態でインストールされていると思うのですが、念のために「yum」でアップデートを行っておきます。

# yum -y update

SSH設定変更

初期状態のSSHはセキュリティ上甘い設定なので、セキュリティを高めるために設定変更を行っていきます。

rootユーザのログイン禁止

初期状態のSSHは「root」ユーザの直接ログインが許可されています。
これは、rootのパスワードが破られてしまうと一発でサーバの管理者権限が奪われてしまい非常に危険ですので、rootユーザは直接SSHでログインできない設定を行っていきます。

まずは、sshの設定ファイルをバックアップしてから編集を行っていきます。

# cd /etc/ssh/
# cp -p sshd_config sshd_config_20150323
# vi sshd_config

設定変更部分


「PermitRootLogin」という箇所を変更することで、SSHでrootユーザが直接ログイン出来なくなります。

設定変更前

#PermitRootLogin yes

設定変更後

PermitRootLogin no

SSH接続ポート変更

通常SSHは22番ポートで接続しますが、この番号のままだとインターネット上からブルートフォースアタック(ユーザー名・パスワード総当り攻撃)等、非常に多くの攻撃を受けてしまいます。

そこで、SSH接続用のポート番号をデフォルトの22番ポートから、別のポート番号に変更しておきます。

このポート番号の変更も、SSHの設定ファイルである「/etc/sshd_config」で行います。

設定変更部分

「Port」の部分を変更することで、SSHのポート番号を変更することが出来ます。
今回はポート番号を20022に設定していきます。

変更前

#Port 22

変更後

Port 20022

設定反映

設定が完了したら、SSHサービスを再起動して設定を反映させます。

# systemctl restart sshd

鍵認証方式への変更について

本当であれば、SSHは鍵認証方式にしたほうがよりセキュリティが向上するのですが、運用上デメリット等もあります。
そのあたりを考慮して設定を行うか判断してください。

設定方法こちらのページにまとめていますので、設定を行う場合は参照願います。

firewalld設定

CentOS7の初期インストール状態では、ファイアウォール機能(firewalld)が有効となっていて、このままでは先ほどポート番号を変更した「SSH」も、これからインストールしていく「minecraft」サーバも通信出来ません。

そこで、これらのサービスに接続できるように設定を行っていきます。

ゾーンの変更

初期状態のfirewalldのゾーンは「public」となっているので、これを「dmz」に変更していきます。

ゾーンの確認

「firewall-cmd --list-all」コマンドを使用して、現在のdefaultゾーンを確認すると、「public」がデフォルトのゾーンであることが確認できます。

# firewall-cmd --list-all
public (default, active)
interfaces: eth0
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

デフォルトゾーンの変更

「firewall-cmd」コマンドを使用して、デフォルトのゾーンを変更していきます。

# firewall-cmd --set-default-zone=dmz
success

dmzゾーンにインターフェイス接続

初期状態で「public」ゾーンに設定されている、eth0のNICインターフェイスを、「dmz」ゾーンに設定変更します。

設定の変更は、NICインターフェイスの設定ファイルである、「/etc/sysconfig/network-scripts/ifcfg-eth0」に設定を追加することで行えます。

※さくらのVPSではeth0となるはずですが、別環境の場合はファイル名が異なることがあるので、適宜読み替えてください。

設定変更

# cd /etc/sysconfig/network-scripts/
# cp -p ifcfg-eth0 20150323_ifcfg-eth0
# vi ifcfg-eth0

追加設定

ZONEの項目が無い場合は下記の設定を追加します。すでに別の値が設定されている場合は、「dmz」に変更して下さい。

ZONE=dmz

ポート開放設定

SSHの設定で変更したポートと、minecraftサーバで使用するポートで通信が出来るように、設定を行っていきます。

SSHポートの開放

SSHの設定変更でポート番号を初期設定の22番ポートから20022番ポートに変更しているので、このポートで通信できるように設定します。

20022番ポートで通信を許可する方法ですが、今回は何番ポートが通信許可されているかすぐに分かるように、独自サービスを追加する方法ではなく、ポートを追加する形でいきます。正常に設定が完了すると、「success」と表示されます。

firewall-cmd --permanent --add-port=20022/tcp
success

ssh(22番)ポートの削除

20022番ポートが追加されたら、dmzゾーンの初期設定で通信許可されているsshは必要ないので設定を削除します。

# firewall-cmd --permanent --remove-service=ssh
success

minecraft用ポートの開放

minecraftサーバは初期設定では25565番ポートで通信を行うので、このポートの通信を許可する設定を行っていきます。

# firewall-cmd --permanent --add-port=25565/tcp
success

firewall設定の反映

ポートの設定が完了しましたら、設定を反映させます。

# firewall-cmd --reload
success

SELinux設定無効化

CentOS7の初期設定はSELinuxが有効となっていますので、その設定を無効化していきます。

設定変更

SELinuxの有効・無効の設定は「/etc/sysconfig/selinux」ファイルで設定しますので、設定を行っていきます。

# cp -p /etc/sysconfig/selinux /etc/sysconfig/selinux_yyyymmdd
# vi /etc/sysconfig/selinux

変更内容

現状、有効化されているSELinuxの機能を無効化するには、下記の項目を変更することで無効化することが出来ます。設定変更後サーバを再起動することでSELinuxの機能が停止した状態でサーバが起動します。

変更前

SELINUX=enforcing

変更後

SELINUX=disabled

※SELinuxについて、もうちょっとだけ詳しい説明をこちらのページでまとめています。

サーバ再起動

SSH、firewalld、SELinuxの無効化設定が完了しましたら、サーバを再起動しこれまで行った設定の動作確認を実施します。

# reboot

動作確認作業

サーバの再起動が完了後、これまで設定を変更してきた「SSH」、「firewalld」、「SELinux」の動作確認を行っていきます。

動作確認する項目はSSH、firewalld、SELinuxの無効化設定となります。

SSHの動作確認

sshの接続確認ですが、Windows端末からならば「TeraTerm」等のSSHクライアントを使用して下記の動作試験を行っていきます。忘れがちなのですが、SSHのポート番号を初期値の22番から変更しているので、変更したポート(この手順では20022番ポート)で接続するようにしてください。

  • SSHでOSインストール時に作成したユーザでサーバに接続できること
  • rootユーザでログイン出来ないこと

※SSHを鍵認証方式に変更している場合は、通常のユーザ・パスワード認証でログインできないことも確認します。

firewalldの設定確認

「firewall-cmd」コマンドを使用して、以下の内容がfirewalldに設定されているかの確認をします。

  • defaultのゾーンが「dmz」になっていること
  • interfacesにeth0が割り当てられていること
  • portsにSSH用ポート20022とminecraft用ポート25565が設定されていること

ここからの作業はSSHでログインしての作業となります。
ログイン直後は一般ユーザですので、「su -」でrootユーザなってから確認をしていきます。

$ su -
# firewall-cmd --list-all
dmz (default, active)
  interfaces: eth0
  sources:
  services:
  ports: 20022/tcp 25565/tcp
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

SELinux無効化確認

getneforce getenforceコマンドを実行し、SELinuxが無効化されている状態である「Disabled」と表示されることを確認します。

※2015.07.06 getenforceのタイプミスを修正しました。ご指摘ありがとうございました。

# getenforce
Disabled

動作確認は以上です。
次にサーバの時刻同期の設定を行っていきます。

時刻同期設定

OSインストール時は時間がずれているとことが多いので、手動で時刻同期を行います。

ntpdateインストール

手動での時刻同期に必要な「ntpdate」を「yum」でインストールします。

# yum -y install ntpdate

ntpdate実行

インストールが完了しましたら、「ntpdate」コマンドを実行し手動でサーバの時刻を合わせます。

# ntpdate ntp1.jst.mfeed.ad.jp

chronyd設定

サーバの時間はほっとくと少しずつズレていってしまうため、chronydで定期的に時刻を同期させていきます。

※chronydはCentOS7からntpdの替わりにインストールされている、時刻同期のサービスです。

chronydの設定ファイルは「/etc/chrony.conf」となりますので、バックアップしてから設定を行っていきます。

# cp -p /etc/chrony.conf /etc/chrony.conf_20150323
# vi /etc/chrony.conf

編集内容

時刻同期を行うサーバの設定を変更していきます。初期設定のままでも、動作はするのですがネットワーク的に遠いので、日本にあるサーバに同期先を変更しています。

さくらのVPSを使用しているのであれば、「さくらインターネット」様が用意している「ntp1.sakura.ad.jp」に同期しても良いのですが、一台だけだと不安なので3台ある「インターネットマルチフィード」様のサーバに同期をさせています。

変更前
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
変更後
server ntp1.jst.mfeed.ad.jp iburst
server ntp2.jst.mfeed.ad.jp iburst
server ntp3.jst.mfeed.ad.jp iburst

設定反映

chronydを再起動し設定を反映させます。

# systemctl restart chronyd

時刻同期確認

時刻同期が動作しているかの確認には、「chronyc sources」コマンドを使用します。

サーバ名の前に「^+」「^* 」が表示されていれば、正常に同期しています。

# chronyc sources
210 Number of sources = 3
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^+ ntp1.jst.mfeed.ad.jp 2 6 17 19 -14us[ +15us] +/- 36ms
^+ ntp2.jst.mfeed.ad.jp 2 6 17 19 +53us[ +82us] +/- 37ms
^* ntp3.jst.mfeed.ad.jp 2 6 17 19 +31us[ +60us] +/- 13ms

以上で、OS周りの設定はとりあえず完了となります。

次はいよいよminecraft_serverのインストールを行っていきます。

コメント

  1. しろ より:

    初歩的な質問で申し訳ないです。
    # vi sshd_config のあとの設定を保存するにはどうすればよいのでしょうか?

    • tamohiko より:

      しろさん

      ご質問ありがとうございます。

      ># vi sshd_config のあとの設定を保存するにはどうすればよいのでしょうか?

      これは、viで編集後の保存方法ということでしょうか?
      であれば、Escキーを押下してコマンドモードに移行させてから :wq! と入力すると保存して終了することが出来ます。

      viの使い方は下記のページが参考になります。
      http://net-newbie.com/linux/commands/vi.html

      質問の内容を私がとらえ違いしているようであれば、お手数をおかけしますが再度コメントいただけますでしょうか。

      • しろ より:

        こんばんわ。tamohikoさんの通りで無事にサーバーが作れました。
        ありがとうございます。

        追加でご質問があるのですが、
        ① Rootでのログインができてしまいます。configも見直しましたが間違っている部分は特にありませんでした。

        ② ワールドのデータをサーバー側に移す方法が分からないんですが、できれば詳しく教えていただけないでしょうか。

        こういった知識が全くないので度々初歩的な質問申し訳ないです。

      • tamohiko より:

        しろさん

        サーバが無事作れてよかったですね!
        お役に立ててうれしいです。

        追加で質問をいただいた件について回答させていただきます。

        > ① Rootでのログインができてしまいます。configも見直しましたが間違っている部分は特にありませんでした。

        SSHの再起動を行ってもrootでログイン出来てしまうということでしょうか。

        であれば、configを実際に見てみないとちょっとわからないかもしれません。

        ここにconfigを張ると非常に見づらいので、メールで直接configを送ってもらっても良いでしょうか?

        良ければ、こちらにその旨のコメントをお願いします。
        その後、私の方からメールを送らさせていただきます。

        > ② ワールドのデータをサーバー側に移す方法が分からないんですが、できれば詳しく教えていただけないでしょうか。

        今までローカルPC上で遊んでいたマイクラのワールドデータを、今回作成したサーバに持っていきたいという事で良いでしょうか?

        そう想定して、手順をざっくりとまとめました。

        ■前提
        ・作業前にはバックアップを取得しておいてください
        ・マルチサーバの「minecraft_server.jar」は「/opt/minecraft」にインストールされていることを想定しています
        ・ロカールPC上のワールドデータは「C:ユーザー\[ユーザ名]\AppData\Roaming\.minecraft\saves」にあると想定しています
         ※AppDataフォルダが見つからない時は、こちらのページを参考にしてみてください。
          http://www.jaskun.com/windows7/appdata-dasu/
        ・作業は、minecraft実行ユーザでおこなってください

        1.両方のマイクラを停止します

        2.ローカルPC上のワールドデータが格納されているフォルダを適当な場所にコピーします

        3.コピーしたフォルダの名前を world に変更します

        4.今回作成したサーバ上のminecraft_server.jarをインストールしたフォルダ内の「world」フォルダの名前を変更します
        $ cd /opt/minecraft/
        $ mv world world_old

        5.PC上のワールドデータが入ったフォルダを今回作成したサーバの「minecraft_server.jar」インストールフォルダにコピーします
        ※フォルダのコピーにはWinSCPとかFileZillaのSFTP機能を使うのが簡単だと思います

        6.コピーしたフォルダの所有者とパーミッションを「world_old」フォルダにあわせます

        7.minecraft_server.jarを起動させます

        これで、ワールドデータをコピーできているはずです。

        ざっくりと手順をまとめていますので、分からない点があれば、またコメントいただけますでしょうか?

  2. boomerang より:

    tamohikoさま
    初めまして。非常に参考になるHPありがとうございます。
    大変初歩的なことなのですが伺いたいことがあります。
    上記設定をすべて完了したのですが、未だにrootでログインできてしまいます。
    一応、それ以外はすべて順調にできたのですが……。
    どうしてでしょうか?

    • tamohiko より:

      boomerangさん

      ご質問ありがとうございます。

      >上記設定をすべて完了したのですが、未だにrootでログインできてしまいます。

      SSHでrootユーザログインができてしまうということですが、まず確認してい頂きたいのは「/etc/ssh/sshd_config」の「#PermitRootLogin yes」を「PermitRootLogin no」に正しく変更されているかどうかご確認願います。
      それと、「#」がついたままで、コメント化されていないかの確認もお願いします。

      あとは、SSHの設定後、サービスの再起動かサーバの再起動を行っていますでしょうか。されていないようでしたら、再起動を行ってからrootユーザでログインできるか確認してみてください。

      これでもrootユーザでログインできるようでしたら、お手数をおかけしますが再度ご連絡いただけますでしょうか。

      • boomerang より:

        こんばんは、boomerangです。
        rootに関しては「#」も消し、rebootもかけましたがそれでも入れてしまいます。
        現在はとりあえず放置しています。

        また別件で新しい質問なのですが、さくらのVPS1GBを利用しておりましたが、
        容量不足やカクツキが厳しいので、2GBに変更しようと思っています(幸い、まだお試し期間中)
        そこで、途中まで頑張ったデータをどうにか新しく借りたものに移行したいのですが、
        何か良い方策はありますでしょうか?
        バックアップやこのページの主旨から外れますが、お応え下さると幸いです。

      • tamohiko より:

        boomerangさん

        ご連絡ありがとうございます。

        1.SSHの件
        sshの件改善しないのですね。
        あとは、config等をを見てみるしかないのですが、ここにconfigを張り付けると非常に見づらくなってしまいます。
        ですので、よろしければこの件はメールでやり取りさせてもらっても良いでしょうか?
        その旨コメントしていただければ、こちらからコメントの際に入力していただいているメールアドレスにご連絡させて頂きます。

        2.データ移行の件
        ワールドデータの移行は簡単にできます。

        (1)minecraft_serverインストールまで完了している場合

        ワールドのデータはminecraft_serverインストールディレクトリの「world」ディレクトリに保存されているので、旧サーバより「world」ディレクトリのデータをコピーして、新サーバに移すだけで問題ありません。「server.properties」等を変更している場合はそちらも併せてコピーしてください。

        ※「world」ディレクトリのデータをコピーする際は、新旧両サーバのminecraft_serverを停止してから作業を行ってください。

        (2)OSの設定のみ完了していてminecraft_serverのインストールが完了していない場合

        旧サーバのminecraft_severがインストールされているフォルダを丸ごと新サーバにコピーするという方法もあります。
        この場合は、自動起動用のスクリプトも忘れずにコピーして、自動起動設定を行う必要があります。

        最後に、作業の前は念のためデータのバックアップをしておいたほうが良いですよ。
        作業内容で分からない点がありましたら、再度ご質問お願いいたします。

  3. ゆぅさくら より:

    初めまして、唐突な質問すみません、とても初歩的な事なのですが。
    SSHの設定(ポート番号変更したり)した後の
    再起動の仕方がわかりません。
    画面が戻れたりするんでしょうか?
    設定画面で記載されている文字打っても何の反応もないのですが・・・!
    本当に初歩的な質問すみませんお手数ですがお時間空いた時に返信お願いしますっ

    • ゆぅさくら より:

      自己解決しました!次に質問なんですけど。
      ファイアーウォール設定で
      リストオール打つと
      FirewallD is not running
      とでて何も表示されませんどうすればいいでしょうか

      • tamohiko より:

        ゆぅさくら さん

        ご質問ありがとうございます。
        そしてお返事が遅くなってすいません。

        > FirewallD is not running
        > とでて何も表示されませんどうすればいいでしょうか

        これは、firewalldが動作していないというメッセージです。
        rootユーザで以下のコマンドを実行することでfirewalldを起動させることができます。

        systemctl start firewalld

        あわせてfirewalldが自動起動するかどうかの確認は、下記のコマンドで確認できますので、自動起動設定されているかどうかの確認もお願いします。

        systemctl is-enabled firewalld.service

        「enabled」と表示されれば自動起動する設定となっています。
        「disabled」と表示されれば自動起動しない設定となっています。

        自動起動設定については、こちらのページで解説していますので、お手数をおかけしますが、設定の方法等を参照願います。

        http://www.server-memo.net/centos-settings/centos7/systemctl-enable.html

        他に分からない点がありましたら、ご連絡おねがいいたします。

  4. もらのら より:

    初歩的な質問で非常に申し訳ないのですが、上記設定をすべて完了した後、Tera Termなどで接続を試みたのですが、「接続が拒否されました」というメッセージが表示されてしまいました。IPとポート番号も正しいものなのです。原因が一切わからないのです。

    • tamohiko より:

      もらのら さん

      ご質問ありがとうございます。
      また、返信が遅くなりすいません。

      最初に確認させてほしいのですが、SSHは鍵認証方式にしていますか?

      鍵認証方式に変更していないのであれば、まずはsshdの問題かそれ以外の問題かを切り分けるために、さくらのサーバコンソール上で自分のサーバにsshで接続できるか確認してみてください。

      ssh -p ポート番号 ユーザ名@サーバのIPアドレス

      これで、接続できるのであればSSHのサーバ設定は問題ありませんので、ファイアウォールの設定を確認し、SSHの接続ポートが開いているか確認してみてください。

      ※rootユーザで「firewall-cmd –list-all」コマンドでファイアウォールの設定状況が確認できます。

      鍵認証方式に変更している場合は、ユーザ・パスワード認証に戻してから確認してみてください。

      ・変更方法
      sshd_configの「PasswordAuthentication no」を「PasswordAuthentication yes」に変更して、sshdを再起動してください。

      ユーザ・パスワード認証に戻して接続できる場合は、鍵認証の設定に間違いがあることがわかります。

      そのほかの問題部分の切り分け方法として、rootユーザで「journalctl -u sshd.service」でsshdのログを確認することが出来ますので、確認してみてください。

タイトルとURLをコピーしました