GMO VPSの契約からセキュアな通信に関する設定まで
GMO VPSを利用して半年が経過したのでレビューも兼ねて、「GMOクラウドのVPS」を借りてからWordPressを運用するまでの流れをざっくりと解説をしようと思います。
全くのLinux初心者で基礎から勉強したいという方は「初心者でも安全なLAMP環境を構築する方法を解説」を参照してください。
全体の流れ
1ページにまとめるには長くなりすぎたので数ページに分けて解説します。
- GMO VPSの契約からセキュアな通信に関する設定まで ←今ここ
- BIND DNSで行う名前解決と、各種ネットワークの設定
- iptablesの設定とログファイルのローテーション
- Nginxとリバースプロキシ、php-fpmとOPcacheのインストールと設定
- MySQLのインストールと各種設定、phpMyAdminのインストールと設定
- メールサーバ構築のためOpenSSL、Postfix、Dovecotのインストールと設定
こんな感じで全6回に分けて解説します。
今回の解説通りに設定すれば、同価格帯のレンタルサーバでは500エラーになる状況もなんなく乗り切れます。
また共用レンタルサーバではどれだけ対策しても混雑時に1秒を切ることが難しかった読み込み速度も、平均して500ms秒を切るようになります。
追記:契約して1年以上経ちましたが、目立った障害も無く安定しています。このサイトの平均ページダウンロード時間は260msと動作も高速です。適切に設定すれば国内のVPSの中でもトップクラスの速度です。
目次
このページでは以下の流れで契約からセキュアな通信を確立するまでを解説します。
GMO VPSの契約とスペック選択
まずは何はさておき契約を済ませます。
今回の解説で利用したVPSはこちら。
「GMOクラウドのVPS」
今回は最安値の月々934円(税抜き)からの「マイクロプラン」に申し込みました。
スペックはディスク容量100GB、CPU仮想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.2の64bitなので対応したファイルをダウンロードします。
# 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で行う名前解決と、各種ネットワークの設定」です。
大変参考になっております。
rpmforgeリポジトリの追加ですが、ダウンロードしようとしたのですが、rpmforgeのページがダウンしているのか、ダウンロードができない状態なのですが、こいう場合はどうすればよろしいのでしょうか?
rpmforgeは2016年7月20日頃からサーバが停止したようです。
目的となるソフトさえ手に入ればどこでもいいので、代替となるリポジトリを利用してください。