OXY NOTES

GMO VPSを契約してWordPressを安定動作させるまでのサーバ設定方法

GMO VPSの契約からセキュアな通信に関する設定まで

GMO VPSを利用して半年が経過したのでレビューも兼ねて、「GMOクラウドのVPS」を借りてからWordPressを運用するまでの流れをざっくりと解説をしようと思います。

全くのLinux初心者で基礎から勉強したいという方は「初心者でも安全なLAMP環境を構築する方法を解説」を参照してください。


全体の流れ

1ページにまとめるには長くなりすぎたので数ページに分けて解説します。

こんな感じで全6回に分けて解説します。

今回の解説通りに設定すれば、同価格帯のレンタルサーバでは500エラーになる状況もなんなく乗り切れます。

また共用レンタルサーバではどれだけ対策しても混雑時に1秒を切ることが難しかった読み込み速度も、平均して500ms秒を切るようになります。

追記:契約して1年以上経ちましたが、目立った障害も無く安定しています。このサイトの平均ページダウンロード時間は260msと動作も高速です。適切に設定すれば国内のVPSの中でもトップクラスの速度です。


目次

このページでは以下の流れで契約からセキュアな通信を確立するまでを解説します。


GMO VPSの契約とスペック選択

まずは何はさておき契約を済ませます。
今回の解説で利用したVPSはこちら。
GMOクラウドのVPS

今回は最安値の月々934円(税抜き)からの「マイクロプラン」に申し込みました。
スペックはディスク容量100GBCPU仮想3コアメモリ2GBです。

LAMPPパックも用意されていますが、何が入っているか分からないと後々面倒なので最小構成で契約しました。


IPとパスワードの取得

VPSのコントロールパネルなんてどこも分かりにくいものです。
さっさとrootパスワードを取得して、コンソールでの作業に移行しましょう。

ログイン

契約が完了して数営業日すると「VPSポータルログイン」のIDとパスワードが送られてくるのでログインします。

VPSコンソールへの移動とサーバON

上のメニューから「VPSコンソール」をクリックします。
ちなみにこの時点でサーバがOFFになっていたら「ONボタン」をクリックして有効にしておいてください。

IPアドレスとパスワードの取得

契約一覧」にあるサービス名をクリックした後に、「その他のサーバー管理メニュー」にある「サーバ情報」をクリックします。

IPアドレスrootユーザーのパスワードが書かれているのでコピーします。

この解説では便宜上割り当てられたIPアドレスを192.168.0.1と仮定してします。


アップデートと必要なパッケージのインストール

Tera Term等でコピーしたIPとパスワードでログインします。
ちなみにデフォルトのSSHはポート22で、ユーザー名はrootです。

アップデート

まずは作法としてアップデートを行います。

# yum update
(省略)

開発者ツールのインストール

とりあえず何をするにもこれだけは必要になるのでインストール。

# yum groupinstall "Development tools"
(省略)
================================================================================
 Package                Arch   Version                            Repository
                                                                           Size
================================================================================
Installing:
 autoconf               noarch 2.63-5.1.el6                       base    781 k
 automake               noarch 1.11.1-4.el6                       base    550 k
 bison                  x86_64 2.4.1-5.el6                        base    637 k
 byacc                  x86_64 1.9.20070509-7.el6                 base     48 k
 cscope                 x86_64 15.6-6.el6                         base    136 k
 ctags                  x86_64 5.8-2.el6                          base    147 k
 cvs                    x86_64 1.11.23-16.el6                     base    712 k
 diffstat               x86_64 1.51-2.el6                         base     29 k
 doxygen                x86_64 1:1.6.1-6.el6                      base    2.4 M
 elfutils               x86_64 0.152-1.el6                        base    201 k
 flex                   x86_64 2.5.35-8.el6                       base    286 k
 gcc                    x86_64 4.4.7-4.el6                        base     10 M
 gcc-c++                x86_64 4.4.7-4.el6                        base    4.7 M
 gcc-gfortran           x86_64 4.4.7-4.el6                        base    4.7 M
 gettext                x86_64 0.17-16.el6                        base    1.8 M
 git                    x86_64 1.7.1-3.el6_4.1                    base    4.6 M
 indent                 x86_64 2.2.10-7.el6                       base    115 k
 intltool               noarch 0.41.0-1.1.el6                     base     58 k
 libtool                x86_64 2.2.6-15.5.el6                     base    564 k
 patch                  x86_64 2.6-6.el6                          base     90 k
 patchutils             x86_64 0.3.1-3.1.el6                      base     95 k
 rcs                    x86_64 5.7-37.el6                         base    173 k
 redhat-rpm-config      noarch 9.0.3-42.el6.centos                base     59 k
 rpm-build              x86_64 4.8.0-37.el6                       base    127 k
 subversion             x86_64 1.6.11-10.el6_5                    updates 2.3 M
 swig                   x86_64 1.3.40-6.el6                       base    1.1 M
 systemtap              x86_64 2.3-4.el6_5                        updates  26 k
Installing for dependencies:
 alsa-lib               x86_64 1.0.22-3.el6                       base    370 k
 apr                    x86_64 1.3.9-5.el6_2                      base    123 k
 apr-util               x86_64 1.3.9-3.el6_0.1                    base     87 k
 atk                    x86_64 1.30.0-1.el6                       base    195 k
 avahi-libs             x86_64 0.6.25-12.el6                      base     54 k
 cairo                  x86_64 1.8.8-3.1.el6                      base    309 k
 cloog-ppl              x86_64 0.15.7-1.2.el6                     base     93 k
 cpp                    x86_64 4.4.7-4.el6                        base    3.7 M
 cups-libs              x86_64 1:1.4.2-50.el6_4.5                 base    317 k
 elfutils-libs          x86_64 0.152-1.el6                        base    181 k
 fontconfig             x86_64 2.8.0-3.el6                        base    186 k
 freetype               x86_64 2.3.11-14.el6_3.1                  base    359 k
 gdb                    x86_64 7.2-60.el6_4.1                     base    2.3 M
 gettext-devel          x86_64 0.17-16.el6                        base    155 k
 gettext-libs           x86_64 0.17-16.el6                        base    112 k
 glibc-devel            x86_64 2.12-1.132.el6_5.2                 updates 978 k
 glibc-headers          x86_64 2.12-1.132.el6_5.2                 updates 608 k
 gnutls                 x86_64 2.8.5-13.el6_5                     updates 346 k
 gtk2                   x86_64 2.20.1-4.el6                       base    3.3 M
 hicolor-icon-theme     noarch 0.11-1.1.el6                       base     40 k
 jasper-libs            x86_64 1.900.1-15.el6_1.1                 base    136 k
 kernel-devel           x86_64 2.6.32-431.17.1.el6                updates 8.8 M
 kernel-headers         x86_64 2.6.32-431.17.1.el6                updates 2.9 M
 libICE                 x86_64 1.0.6-1.el6                        base     53 k
 libSM                  x86_64 1.2.1-2.el6                        base     37 k
 libX11                 x86_64 1.5.0-4.el6                        base    584 k
 libX11-common          noarch 1.5.0-4.el6                        base    192 k
 libXau                 x86_64 1.0.6-4.el6                        base     24 k
 libXcomposite          x86_64 0.4.3-4.el6                        base     20 k
 libXcursor             x86_64 1.1.13-6.20130524git8f677eaea.el6  base     28 k
 libXdamage             x86_64 1.1.3-4.el6                        base     18 k
 libXext                x86_64 1.3.1-2.el6                        base     35 k
 libXfixes              x86_64 5.0-3.el6                          base     23 k
 libXft                 x86_64 2.3.1-2.el6                        base     55 k
 libXi                  x86_64 1.6.1-3.el6                        base     35 k
 libXinerama            x86_64 1.1.2-2.el6                        base     20 k
 libXrandr              x86_64 1.4.0-1.el6                        base     36 k
 libXrender             x86_64 0.9.7-2.el6                        base     30 k
 libXtst                x86_64 1.2.1-2.el6                        base     29 k
 libart_lgpl            x86_64 2.3.20-5.1.el6                     base     65 k
 libgcj                 x86_64 4.4.7-4.el6                        base     19 M
 libgfortran            x86_64 4.4.7-4.el6                        base    265 k
 libgomp                x86_64 4.4.7-4.el6                        base    118 k
 libjpeg-turbo          x86_64 1.2.1-3.el6_5                      updates 174 k
 libpng                 x86_64 2:1.2.49-1.el6_2                   base    182 k
 libproxy               x86_64 0.3.0-4.el6_3                      base     39 k
 libproxy-bin           x86_64 0.3.0-4.el6_3                      base    8.2 k
 libproxy-python        x86_64 0.3.0-4.el6_3                      base    8.4 k
 libstdc++-devel        x86_64 4.4.7-4.el6                        base    1.6 M
 libthai                x86_64 0.1.12-3.el6                       base    183 k
 libtiff                x86_64 3.9.4-10.el6_5                     updates 343 k
 libxcb                 x86_64 1.8.1-1.el6                        base    110 k
 mailcap                noarch 2.1.31-2.el6                       base     27 k
 mpfr                   x86_64 2.4.1-6.el6                        base    157 k
 neon                   x86_64 0.29.3-3.el6_4                     base    119 k
 pakchois               x86_64 0.4-3.2.el6                        base     21 k
 pango                  x86_64 1.28.1-7.el6_3                     base    350 k
 perl-Compress-Raw-Zlib x86_64 1:2.021-136.el6                    base     69 k
 perl-Compress-Zlib     x86_64 2.021-136.el6                      base     45 k
 perl-Error             noarch 1:0.17015-4.el6                    base     29 k
 perl-Git               noarch 1.7.1-3.el6_4.1                    base     28 k
 perl-HTML-Parser       x86_64 3.64-2.el6                         base    109 k
 perl-HTML-Tagset       noarch 3.20-4.el6                         base     17 k
 perl-IO-Compress-Base  x86_64 2.021-136.el6                      base     69 k
 perl-IO-Compress-Zlib  x86_64 2.021-136.el6                      base    135 k
 perl-URI               noarch 1.40-2.el6                         base    117 k
 perl-XML-Parser        x86_64 2.36-7.el6                         base    224 k
 perl-libwww-perl       noarch 5.833-2.el6                        base    387 k
 pixman                 x86_64 0.26.2-5.1.el6_5                   updates 200 k
 ppl                    x86_64 0.10.2-11.el6                      base    1.3 M
 rsync                  x86_64 3.0.6-9.el6_4.1                    base    334 k
 systemtap-client       x86_64 2.3-4.el6_5                        updates 3.4 M
 systemtap-devel        x86_64 2.3-4.el6_5                        updates 1.4 M
 systemtap-runtime      x86_64 2.3-4.el6_5                        updates 189 k
 unzip                  x86_64 6.0-1.el6                          base    149 k
 xz                     x86_64 4.999.9-0.3.beta.20091007git.el6   base    137 k
 xz-lzma-compat         x86_64 4.999.9-0.3.beta.20091007git.el6   base     16 k
 zip                    x86_64 3.0-1.el6                          base    260 k

Transaction Summary
================================================================================
(省略)

PHPサポートのインストール

必要なライブラリの依存関係がややこしいのでパックでインストール。

# yum groupinstall "PHP Support"
(省略)
================================================================================
 Package            Arch        Version                      Repository    Size
================================================================================
Installing:
 php                x86_64      5.3.3-27.el6_5               updates      1.1 M
 php-gd             x86_64      5.3.3-27.el6_5               updates      107 k
 php-pdo            x86_64      5.3.3-27.el6_5               updates       75 k
 php-pear           noarch      1:1.9.4-4.el6                base         393 k
 php-xml            x86_64      5.3.3-27.el6_5               updates      103 k
Installing for dependencies:
 apr-util-ldap      x86_64      1.3.9-3.el6_0.1              base          15 k
 httpd              x86_64      2.2.15-30.el6.centos         updates      821 k
 httpd-tools        x86_64      2.2.15-30.el6.centos         updates       73 k
 libXpm             x86_64      3.5.10-2.el6                 base          51 k
 libxslt            x86_64      1.1.26-2.el6_3.1             base         452 k
 php-cli            x86_64      5.3.3-27.el6_5               updates      2.2 M
 php-common         x86_64      5.3.3-27.el6_5               updates      525 k

Transaction Summary
================================================================================
(省略)

Apache関連インストール

Apache関連だけど、Apacheは既に入っているみたいです。

この時点ではApacheでもいいかと考えていたんですが、Webサーバは後にnginxに切り替えます。そのため必要なかったかもしれませんが、行った作業手順という意味で残しておきます。

この先もインストールしたものを気が変わって削除したりしてますが、大して容量も食わないので同じように実行しといてくださいw
# yum groupinstall "Web Server"
(省略)
Dependencies Resolved

================================================================================
 Package                   Arch     Version                     Repository
                                                                           Size
================================================================================
Installing:
 crypto-utils              x86_64   2.4.1-24.2.el6              base       76 k
 httpd-manual              noarch   2.2.15-30.el6.centos        updates   784 k
 mod_perl                  x86_64   2.0.4-11.el6_5              updates   3.2 M
 mod_ssl                   x86_64   1:2.2.15-30.el6.centos      updates    91 k
 mod_wsgi                  x86_64   3.2-3.el6                   base       66 k
 webalizer                 x86_64   2.21_02-3.3.el6             base      128 k
Installing for dependencies:
 db4-cxx                   x86_64   4.7.25-18.el6_4             base      588 k
 db4-devel                 x86_64   4.7.25-18.el6_4             base      6.6 M
 gd                        x86_64   2.0.35-11.el6               base      142 k
 gdbm-devel                x86_64   1.8.0-36.el6                base       25 k
 perl-BSD-Resource         x86_64   1.29.03-3.el6               base       35 k
 perl-ExtUtils-MakeMaker   x86_64   6.55-136.el6                base      293 k
 perl-ExtUtils-ParseXS     x86_64   1:2.2003.0-136.el6          base       45 k
 perl-Newt                 x86_64   1.08-26.el6                 base       72 k
 perl-Test-Harness         x86_64   3.17-136.el6                base      231 k
 perl-devel                x86_64   4:5.10.1-136.el6            base      423 k

Transaction Summary
================================================================================
(省略)

MySQL関連をインストール

WordPressを動作させるには、これがないと始まらないMySQLクライアントとサーバ。

# yum groupinstall "MySQL Database client"
(省略)
Dependencies Resolved

================================================================================
 Package                  Arch       Version                  Repository   Size
================================================================================
Installing:
 MySQL-python             x86_64     1.2.3-0.3.c1.1.el6       base         86 k
 mysql                    x86_64     5.1.73-3.el6_5           updates     894 k
 mysql-connector-odbc     x86_64     5.1.5r1144-7.el6         base        114 k
Installing for dependencies:
 libtool-ltdl             x86_64     2.2.6-15.5.el6           base         44 k
 unixODBC                 x86_64     2.2.14-12.el6_3          base        378 k

Transaction Summary
================================================================================
(省略)
# yum groupinstall "MySQL Database server"
(省略)
Dependencies Resolved

================================================================================
 Package               Arch          Version               Repository      Size
================================================================================
Installing:
 mysql-server          x86_64        5.1.73-3.el6_5        updates        8.6 M
Installing for dependencies:
 perl-DBD-MySQL        x86_64        4.013-3.el6           base           134 k
 perl-DBI              x86_64        1.609-4.el6           base           705 k

Transaction Summary
================================================================================
(省略)

インストール作業に必要なリポジトリの追加

まずは「yum-priorities」をインストールして非公式リポジトリからおかしなソフトをインストールされないように調整します。

# yum install yum-priorities
(省略)
Dependencies Resolved

================================================================================
 Package                    Arch        Version              Repository    Size
================================================================================
Installing:
 yum-plugin-priorities      noarch      1.1.30-17.el6_5      updates       23 k

Transaction Summary
================================================================================
(省略)

yum-prioritiesの設定ファイルを編集

# vi /etc/yum.repos.d/CentOS-Base.repo

[base][updates][extras]の後にそれぞれ「priority=1」を追加します。

[base]
priority=1
(省略)

[updates]
priority=1
(省略)

[extras]
priority=1
(省略)

EPELリポジトリの追加

まずはwgetが無いと怒られるかもしれないのでインストールしておいてください。

# yum install wget
(省略)
Dependencies Resolved

================================================================================
 Package       Arch            Version                   Repository        Size
================================================================================
Installing:
 wget          x86_64          1.12-1.11.el6_5           updates          483 k

Transaction Summary
================================================================================
(省略)

今回はCentOS6.264bitなので対応したファイルをダウンロードします。

# wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/6/x86_64/epel-release-6-5.noarch.rpm
# rpm -Uvh epel-release-6-5.noarch.rpm ←「U」はアップデートだが、インストールもできる便利コマンド。
# rm epel-release-6-5.noarch.rpm ←削除

EPELリポジトリ用の設定ファイルを編集

公式リポジトリのものより優先順位を下げます。

# vi /etc/yum.repos.d/epel.repo

[epel]の後に「priority=2」を追加。

[epel]
priority=2

続いてデフォルトのインストール・アップデート作業では無効にする。
enabled=1を「0」に変更

enabled=1
↓
enabled=0

これで普通にyumを利用する際にはEPELリポジトリが無効になる。
使いたいときは「--enablerepo=remi,epel,ius」などとオプションを付けることで有効にする。

詳しく仕組みを知りたい方は「インストールだけじゃない!yumの設定から便利な使い方まで徹底的に解説」でまとめたので参照してください。

IUSリポジトリの追加

# wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/6/x86_64/ius-release-1.0-11.ius.el6.noarch.rpm
# rpm -Uvh ius-release-1.0-11.ius.el6.noarch.rpm
# rm ius-release-1.0-11.ius.el6.noarch.rpm

IUSリポジトリの設定ファイルを編集

# vi /etc/yum.repos.d/ius.repo
[ius]
↓
[ius]
priority=2

enabled=0」を確認。

REMIリポジトリの追加

5、6、7はそれぞれCentOSのバージョンなので注意。

# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# rpm -Uvh remi-release-6.rpm
# rm remi-release-6.rpm

REMIリポジトリの設定ファイルを編集

# vi /etc/yum.repos.d/remi.repo
[remi]
↓
[remi]
priority=2

enabled=0」を確認。

rpmforgeリポジトリの追加

# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
# rpm -Uvh rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
# rm rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

rpmforgeリポジトリの設定ファイルを編集

# vi /etc/yum.repos.d/rpmforge.repo
[rpmforge]
↓
[rpmforge]
priority=2

リポジトリの初期化とアップデート

以上で外部リポジトリの設定は終わったので初期化しておきます。

# yum clean all
# yum update

セキュアな通信に関する設定

まずは何をさておきセキュリティの設定をします。

rootユーザーでのログイン禁止

# vi /etc/ssh/sshd_config
#PermitRootLogin yes
↓
#PermitRootLogin yes
PermitRootLogin no
# /etc/init.d/sshd restart

これでrootユーザーでログインできなくなりました。
まだログイン可能なユーザーに関する設定をしていないので接続を切らないように注意してください。

Tera Termで鍵認証を利用してログインする

Tera Termでログイン用の鍵を作成します。作成方法は「過去の投稿」でまとめたので参照してください。

今回は以下のようにしました。
公開鍵は「C:\Program Files\teraterm」へ「id_rsa.pub
秘密鍵は「C:\Program Files\teraterm」へ「id_rsa

とりあえず解説のために、ログインユーザーは「www」にします。

# useradd www
# passwd www

解説のページにありますが、公開鍵「id_rsa.pub」をTera Termの画面にドラックしてアップロードします。

Tera Termの場合はドラッグするとログインユーザーのディレクトリにアップロードされる仕様です。
今回はrootユーザーでログインしたので「/root/id_rsa2.pub」になります。
# mv /root/id_rsa2.pub /home/www/ ←rootユーザーで公開鍵の移動
$ mkdir .ssh ←「.SSH」ディレクトリの作成
$ chmod 700 .ssh ←パーミッションの変更
$ cat id_rsa2.pub > .ssh/authorized_keys ←「id_rsa2.pub」の内容を「.ssh」ディレクトリの「authorized_keys」に登録
$ chmod 600 .ssh/authorized_keys ←「authorized_keys」のパーミッションを変更
$ rm id_rsa2.pub ←公開鍵の削除

sshd_configの編集

$ su - ←rootユーザーに変更
# cd /etc/ssh ←ディレクトリを移動
# cp sshd_config sshd_config.org ←設定ファイルのオリジナルをバックアップ
# vi /etc/ssh/sshd_config

以下を追加。44行目当たり。

#RSA認証を許可(ssh1のみ)
RSAAuthentication yes
 
#公開鍵認証を許可(ssh2のみ)
PubkeyAuthentication yes
 
#認証に利用するファイルのパスを指定
AuthorizedKeysFile .ssh/authorized_keys

設定を読み込んで有効にする。

# /etc/rc.d/init.d/sshd reload

SSH用ポートの変更

ブルートフォース攻撃の的となるポート22。
鍵認証にしたので破られることはありませんが、別のポートに変更します。

# vi /etc/ssh/sshd_config

13行目あたりにある「Port 22」を「23456」変更。23456は好きな番号に変更してください。

Port 22
↓
Port 23456

有効にする

# /etc/rc.d/init.d/sshd reload

ファイアーウォールの設定

iptablesでポート22を閉じて、有効にしたSSH用のポートを開放します。

# vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
↓
#-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 23456 -j ACCEPT

ファイアーウォールの再起動

# /etc/init.d/iptables restart

ここまで設定できたら、1度ログアウトして鍵認証でログインしてみてください。

ポート:23456
ユーザー名:www
パスワード:鍵作るときに入力したパス
RSA/DSA鍵を使う」にチェックを入れて「秘密鍵(id_rsa)」を選択してログイン。

無事にログインできたらパスワードでのログインを無効にします。

# vi /etc/ssh/sshd_config
PasswordAuthentication yes
↓
#PasswordAuthentication yes
PasswordAuthentication no

これでrootユーザーでログインができなくなり、SSHのポートが22から23456に変更になり、ログインは鍵認証限定になりました。

ここまでできたらrootユーザーのパスワードはご自身の覚えやすいものに変えても問題ありません。

上の手順で作業すれば無事にログインできるはずですが、もしログインできないようなら、ポートを22で試したり、鍵認証ではなくwwwユーザーのパスワードでログインしたりと試してみてください。もしそれでもログインできない場合は…OSの再インストールしかないです。

WinSCPでもログインできるようにする

WinSCP付属の「PuTTYgen」でTera Term用の秘密鍵「id_rsa」を読み込んで「save privatekey」ボタンで「id_rsa_winscp.ppk」を作成。(鍵のパスを聞かれるので入力)
今回は「C:\Program Files\WinSCP\id_rsa_winscp.ppk」に作成。

あとはTera Termと同じようにユーザーでwww、鍵で「id_rsa_winscp.ppk」、パスワードで鍵を作成した時のパスワードを入力すればログインできます。

詳しくは「過去の投稿」でまとめたので参照してください。


以上で必要なソフトの下準備と、SSHでセキュアな接続ができるようになりました。
次は「BIND DNSで行う名前解決と、各種ネットワークの設定」です。