server-memo.net

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

      2016/06/27

メニュー

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

コンソールからログイン

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のインストールを行っていきます。

 - インストール