お名前.comのレンタルサーバ(KVM)上へwordpress3.9.xをインストールする


1ページのロードに3秒以上かかるようになってしまったBLOGをお名前.com上に引っ越そうと考えています。選択基準は他のサイトの運用で2年強利用しており、満足度が高い為です。まずは、この投稿ではVPSを借りてwordpressをインストールするところまで進めます。セキュリティについても配慮して設定します。

対象としているインストール方法

  • WordPressの新規インストール
  • WordPress運用サーバの移転(この投稿では、インストールまでしか実施していません)

申し込み

単純に、お名前.comレンタルサーバーから申し込みを行います。迷う所は特にありません。メモリ1Gのプランだと、少々性能に不安が残るので、今回は何時も借りている2Gのプランにしました。支払方法は、毎月、6か月、1年とありますが、GMOインターネットの株主優待を使うつもりなので、6か月で申し込んでいます。

Ubuntu14.04 LTSのセットアップ

デフォルトですとCentOS 6.2と言う古いディストリビューションが使われているため、wordpress以外の用途で使おうとした場合に、古いパッケージしかパッケージ管理ソフトのyumでダウンロードできない事も考えられます。今回は折角なので、2019年4月までの長期サポート版であるUbuntu 14.04 LTSに入れ替えてセットアップします。

お名前.comのVPS上への手順は下記の通り

  1. デフォルトでインストール可能なCentOSをセットアップする(お名前.comのシステム上、必ずセットアップしなくてはいけないらしい)
  2. VPSにマウントするディスクイメージをUbuntu14.04にする
  3. VPS再起動
  4. Ubuntu14.04のセットアップディスクからブートされる
  5. Ubuntu14.04を普通にインストールする

VPSの契約完了後に、サーバーNAVIへのログインURLが送られてくるので、ログインします。
kvm_onamae10

契約したVPSのプランを選んで、コントロールパネルにログインします。

kvm_onamae11

ログインしたら、サーバーリストより、対象サーバを選びます。

kvm_onamae12

OS再インストールのタブから、OSイメージとして、Ubuntu14.04 LTSを選びます。

kvm_onamae13

ディスク構成はそのままでOK。

kvm_onamae14

実行を押す。

kvm_onamae15

再インストールの準備が出来たと表示されたら、サーバーリストに戻ります。

kvm_onamae16

おそらく、お名前.com契約時のデフォルトのCentOSが起動しているので、再起動します。再起動すれば、先ほどマウントしたCDイメージからインストーラが立ち上がるので。

kvm_onamae17

インストーラが立ち上がったら、普通にインストールを始めます。

kvm_onamae18

言語は日本語で。

kvm_onamae19

多少、英語表記の箇所が残っているだけです。はいを選びます。

kvm_onamae20

地域。日本ですよね。

kvm_onamae21

キーボードの設定をします。

kvm_onamae22

普通は日本語を選んでください。当方は英語版キーボードなので、USを選びました。

kvm_onamae23

ホスト名を設定します。好きな名前を入れてください。『.(ドット)』区切り等はやめて普通に入れた方が良いです。後でドット表記を直すのが面倒なので・・・

kvm_onamae24

アーカイブミラー。日本です。

kvm_onamae25

jp.archive.ubuntu.comを選択。

kvm_onamae26

HTTPプロキシは必要ありません。そのままenterで。

kvm_onamae27

一般ユーザーをセットアップします。好きなアカウント名を入力してください。

kvm_onamae28

パスワード。

kvm_onamae29

パスワード再入力。

kvm_onamae30

ホームディレクトリの暗号化。いいえで。

kvm_onamae32

ディスク全体を使うを選択。

kvm_onamae33

仮想ディスク1を選択します。仮想ディスク2は、今度、DBが肥大化するならDBへ。画像や動画置き場が肥大化するようならそれらの格納先に割り当てられるように、取りあえずは使わずにおいておきます。(これ、多分お名前.comでのディスク使用効率の問題から、このまま進めた方が運営側といてはうれしいんだと思います。)

kvm_onamae34

削除します。どうせ何もデータは入っていないので。

kvm_onamae35

書き込み。はいを選択。

kvm_onamae36

そのまま、enterキーで。

kvm_onamae37

はいを選択。

kvm_onamae38

自動的にアップデートでも良いですが、自動的にアップデートさせずに、必要に応じて手動でアップデートした方が良いです。

アップデートは、apt-get updateと、apt-get upgradeコマンドを叩くだけなので。

kvm_onamae39

openSSHのみインストールしておきます。

kvm_onamae40

GRUBをインストールします。

kvm_onamae41

そのままはいで。

kvm_onamae42

続けるを押します。ただ、お名前.comのCD、勝手に取り出してくれないようで、再起動後にまたインストーラが実行されます。なので、下記の順番で捜査してください。ボタンは下図の赤枠の所です。

  1. シャットダウン
  2. 『取り出す』
  3. 起動(起動が押せない場合には、30秒ほど待ってから、他の画面に移動してから、再度画面を読み込み直せばいいと思います。)

kvm_onamae44

以上でインストール完了です。

kvm_onamae52

ブラウザ上から、VPSにVNCでアクセスして操作できるようになっています。マウスクリックすれば利用できます。

kvm_onamae53

こんな感じにログイン画面が表示されます。

ファイアウォールの設定と、ウェブサーバ、DBサーバの用意

VPSにOSをインストールした後は、下記のような設定をします。

  1. IPアドレスを設定する(DHCPで契約しているサーバにIPをふってくれているので、何もしなくてOK)
  2. IPv6の無効化
  3. SSHの設定
  4. ファイアウォールの設定
  5. パッケージの更新

IPv6の無効化

IPv6を意識していなかったために、IPv4の方はファイアウォールをきっちり設定したにも関わらず、IPv6を忘れていて、そちらが全通信を許可していた等の悲しいことにならないように無効化しておきます。

※ まだIPv6の移行期で、対応するメリットは無く、逆に対応時の設定ミスによるセキュリティ上のデメリットの方が大きいと判断しています。

sudo su -
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
reboot

SSHの設定

SSHの設定も早めに実施しておきます。

sudo vi /etc/ssh/sshd_config

デフォルトの設定値から、最低限変更すべき設定。

# 0.0.0.0とする事で、IPv4のみを待ち受けるようになる
ListenAddress 0.0.0.0

# rootログインと空パスワードの禁止
PermitRootLogin no
PermitEmptyPasswords no

# X11転送はしないのでnoにしておく
X11Forwarding no

ファイアウォール(iptables)の設定

ファイアウォールの設定にはポリシーがあります。

  • 原則許可・・・有害な通信をはじく設定をし、最後まではじかれなかったパケットを許可する設計です。このポリシーは選んではいけません。理由は有害な通信パターンを完全に把握する事は出来ない為、必ず抜け・漏れが出てしまうからです。
  • 原則拒否・・・通信を許可していいルールを明示し、それ以外を全部拒否する設計です。

原則拒否のルールで設定します。SSH(22番ポート)については、少し悩みどころで、wordpressの入ったサーバがクラックされるリスクを極小にしつつ、SSHも使いたい場合には、固定IPを使えるプロバイダを契約し、その固定IPからしか接続を受け付けないようにするのが良いと思います。そうでない場合には、SSHのポート番号を2012等の適当な番号に変更し、SSHでのログインには公開鍵を使う事で、ある程度のセキュリティを確保できます。また、セットアップ完了後、お名前.comのコントロールパネルからのみコンソールにアクセスできるようにし、SSHを無効化してしまうのも手です。

# local(127.0.0.1)通信は通す。
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# SSHでログインする場合、<管理用PCのIP>に自分のIPを入れてコメントアウトを外して実行してください。
# 管理用PCが動的IPの場合は苦肉の策で、コントロールパネルからのアクセスしか使わないようにするか、
# SSHの待ち受けポート番号をずらし、公開鍵認証にするかの何れかでセキュリティを高めます。
# iptables -A INPUT -i eth0  -s <管理用クライアントのIP> -p tcp -m multiport --dport 22 -j ACCEPT
# iptables -A OUTPUT -o eth0 -d <管理用クライアントのIP> -p tcp -m multiport --sport 22 -j ACCEPT

# 下記、<管理用クライアントのIP>のSSH設定を使えない場合に使います。
# ただし、どこからでもSSHを許可してしまっているので、セットアップが完了したら削除してください。
# 削除するときは、/etc/iptables.rulesの該当行を消して、再起動すればOKです。
iptables -A INPUT -i eth0  -p tcp -m multiport --dport 22 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sport 22 -j ACCEPT

# サーバから外側へのTCP通信を許可する。DNS、HTTP、HTTPSを許可しています。
iptables -A INPUT -i eth0 -p tcp -m multiport --sport 53,80,443 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --dport 53,80,443 -j ACCEPT

# サーバから外側へのDNS通信を許可する。
iptables -A INPUT -i eth0 -p udp -m multiport --sport 53,67,68,123 -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp -m multiport --dport 53,67,68,123 -j ACCEPT

# 外からサーバへのHTTP、HTTPS通信を許可する。wordpressを公開する為に必要です。
# multiportを使う場合、エフェメラルポートが異なるOS同士での仕様差なのか、
# 通信がブロックされるケースがあったので、全部のポートを指定して通信を許可した。
# iptables -A INPUT -i eth0 -p tcp -m multiport --dport 80,443 -j ACCEPT
# iptables -A OUTPUT -o eth0 -p tcp -m multiport --sport 80,443 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 1024:65535 --dport 80 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 1024:65535 --sport 80 -j ACCEPT

# SSLは必要なら通す。
iptables -A INPUT -i eth0 -p tcp --sport 1024:65535 --dport 443 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 1024:65535 --sport 443 -j ACCEPT

# ICMPは0と8だけでPINGは通るのですが、その他関係ありそうなものを通す。
# -N ICMPとしているのは、新しいICMPと言うテーブルを定義しています。
# その下で、icmpパケットのみ -j ICMPとして、そのテーブルに処理を渡しています。
# こうすることで、処理負荷を軽減しています。
iptables -N ICMP
iptables -A ICMP -p icmp --icmp-type 0 -j ACCEPT
iptables -A ICMP -p icmp --icmp-type 3 -j ACCEPT
iptables -A ICMP -p icmp --icmp-type 4 -j ACCEPT
iptables -A ICMP -p icmp --icmp-type 5 -j ACCEPT
iptables -A ICMP -p icmp --icmp-type 8 -j ACCEPT
iptables -A ICMP -p icmp --icmp-type 11 -j ACCEPT
iptables -A ICMP -p icmp --icmp-type 13 -j ACCEPT
iptables -A ICMP -p icmp --icmp-type 14 -j ACCEPT
iptables -A INPUT -p icmp  -j ICMP
iptables -A OUTPUT -p icmp -j ICMP

# 上記の全部のルールに該当しなかった場合には拒否する。
# こうする事で、iptablesの設定を短く出来る。
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# iptablesのルールを/etc/iptables.rulesにセーブします。
sudo sh -c "iptables-save > /etc/iptables.rules"

# インターフェースの起動時にファイアウォールのルールを自動的に適用するように設定します。
echo "pre-up iptables-restore < /etc/iptables.rules" >> /etc/network/interfaces

nginx、mysql、php5-fpmのインストール

今回は、Apacheの代わりにnginxを使います。nginxとwordpressで検索してもらうと、『爆速』や『○倍の速度になった』等がヒットすると思います。つまり、速いんです。

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nginx php5-fpm  php5-cli
mysql-server mysql-client php5-mysql vim ntp
sudo apt-get clean

# php.iniのすべてに対して、disable_functionsのコメントアウトと、date.timezoneの設定を行う。
# findでphp.iniを検索して、他にも該当ファイルがあればそれらも修正してください。
sudo find /etc/php5 -name php.ini

sudo cp /etc/php5/fpm/php.ini /etc/php5/fpm/php.ini.bak
sudo sed -i 's/;date.timezone =/date.timezone = "Asia/Tokyo"/g' /etc/php5/fpm/php.ini

sudo cp /etc/php5/cli/php.ini /etc/php5/cli/php.ini.bak
sudo sed -i 's/;date.timezone =/date.timezone = "Asia/Tokyo"/g' /etc/php5/cli/php.ini

# MySQLのデフォルトのロケールをUTF-8にしておく
sudo cp /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
sudo sed -i 's/[client]/[client]ndefault-character-set=utf8/g' /etc/mysql/my.cnf
sudo sed -i 's/[mysqld]/[mysqld]ncharacter-set-server=utf8/g' /etc/mysql/my.cnf
sudo service mysql restart

# MySQL上にデータベースを作成して、ユーザー登録しておく。'yourpassword'は
# WordPressがMySQLに接続する為のパスワードです。適度に変更してください。
mysql -uroot -p
create database wp;
grant all on wp.* to wp@localhost identified by 'yourpassword';
flush privileges;

nginxの設定

/etc/nginx/sites-available/defaultの内容を下記のように修正してください。これは最小限の構成です。サーバ全体の動作確認が終わった後に、WordPress用のnginxの設定を『WordPress用nginxの設定 with SSL』を参照して詰めます。

server {
  listen 80 default_server;
  # IPv6は使わない。
  #listen [::]:80 default_server ipv6only=on;

  root /usr/share/nginx/wordpress;
  index index.html index.htm index.php;

  # 適宜、名前を変えてください。defaultでも良いです。
  server_name eco.senritu.net;

  location / {
    try_files $uri $uri/ =404;
  }

  error_page 404 /404.html;

  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
    root /usr/share/nginx/html;
  }

  location ~ .php$ {
    fastcgi_split_path_info ^(.+.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
  }
}

nginxを再起動させる。

sudo service nginx restart

WordPressのセットアップ

ここから、WordPressのセットアップです。WordPressは頻繁にバージョンアップする為、オフィシャルサイトから、最新版のURLをコピペしてwgetのファイル名は適宜置き換えてください。

sudo apt-get install unzip
cd /usr/share/nginx
sudo wget http://ja.wordpress.org/wordpress-3.9.1-ja.zip
sudo unzip wordpress-*.zip

sudo chown -R www-data wordpress
cd /usr/share/nginx/wordpress
sudo mv wp-config-sample.php wp-config.php
sudo vi wp-config.php

wp-config.phpの中身は下記のように修正する。

.....
define('DB_NAME', 'wp');
define('DB_USER', 'wp');
define('DB_PASSWORD', 'yourpassword');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
......

# キーは、openssl rand -hex 10を実行するとランダムな値が取得できるので、
# それを設定すれば良いでしょう。キーボードをガチャガチャやるだけでも良いです。
define('AUTH_KEY',         'e8e1c133ff9728788497');
define('SECURE_AUTH_KEY',  '87c43c2781797f7555b0');
define('LOGGED_IN_KEY',    '19898bd1aa54b6f2f412');
define('NONCE_KEY',        'f25a15103e446a5e4ea4');
define('AUTH_SALT',        '8374c586b622fc141fcb');
define('SECURE_AUTH_SALT', '1c1af97d58f455b4590c');
define('LOGGED_IN_SALT',   '74361cf1e0c1c3006885');
define('NONCE_SALT',       'dcbd7eb3c5cd8de056f7');
......

IPアドレスを確認して、ブラウザでアクセスする。

ifconfig

ウェブブラウザでWordPressの初期設定を行う

http://IPアドレス/

にアクセスすれば、WordPressの初期設定画面が出てくるはずです。下記のような画面が出たら、設定を済ませましょう。

kvm_onamae60

画像をアップロードしてみる。

適当なブログを投稿して、画像のアップロードをしてみてください。

ファイアウォールの設定やSSH、MySQLで許可している通信を確認する

これは大事です。再起動し、設定内容が再起動後も適切である事を確認し、余計なポートが空いていないかなども確認します。

# まずは再起動します。
sudo reboot

再起動後、iptables の設定内容を確認します。本投稿の通りに実施していれば、SSHの設定以外は下記のようになっているはずです。

sudo iptables -L -n
# Chain INPUT (policy DROP)
# target     prot opt source               destination
# ACCEPT     all  --  管理用PC             0.0.0.0/0            multiport sports 22
# ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport sports 53,80,443
# ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            multiport sports 53,67,68,123
# ICMP       icmp --  0.0.0.0/0            0.0.0.0/0
#
# Chain FORWARD (policy DROP)
# target     prot opt source               destination
#
# Chain OUTPUT (policy DROP)
# target     prot opt source               destination
# ACCEPT     all  --  0.0.0.0/0            管理用PC            multiport dports 22
# ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 53,80,443
# ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 53,67,68,123
# ICMP       icmp --  0.0.0.0/0            0.0.0.0/0
#
# Chain ICMP (2 references)
# target     prot opt source               destination
# ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 0
# ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 3
# ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 4
# ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 5
# ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 8
# ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 11
# ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 13
# ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 14

次に、iptablesのルールが格納されているファイルを見ます。

sudo vi /etc/iptables.rules

/etc/iptables.rulesの中身

管理用PCとなっている個所(もしくは、sports/dportsが22となっている個所)は、SSHの通信の許可ルールです。お名前.comのコントロールパネルからウェブブラウザでコンソールにアクセスする場合には、削除して再起動してください。そうでなければそのままでOKです。

*filter
:INPUT DROP [273:14174]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:ICMP - [0:0]
-A INPUT -s 管理用PC/32 -p tcp -m multiport --sports 22 -j ACCEPT
-A INPUT -i eth0 -p tcp -m multiport --sports 53,80,443 -j ACCEPT
-A INPUT -i eth0 -p udp -m multiport --sports 53,67,68,123 -j ACCEPT
-A INPUT -p icmp -j ICMP
-A OUTPUT -d 管理用PC/32 -p tcp -m multiport --dports 22 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m multiport --dports 53,80,443 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m multiport --dports 53,67,68,123 -j ACCEPT
-A OUTPUT -p icmp -j ICMP
-A ICMP -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A ICMP -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A ICMP -p icmp -m icmp --icmp-type 4 -j ACCEPT
-A ICMP -p icmp -m icmp --icmp-type 5 -j ACCEPT
-A ICMP -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A ICMP -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A ICMP -p icmp -m icmp --icmp-type 13 -j ACCEPT
-A ICMP -p icmp -m icmp --icmp-type 14 -j ACCEPT
COMMIT

netstatコマンドで待ち受けているアドレス、ポート番号を確認します。

netstat -an
# 稼働中のインターネット接続 (サーバと確立)
# Proto 受信-Q 送信-Q 内部アドレス            外部アドレス            状態

# SSHを受け付けています。ただし、iptablesでフィルタしてれば問題ありません。
# tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN

# ローカルホスト経由のみ、3306番ポートでMySQLにアクセス可能。問題なし。
# tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN

# nginxによるHTTPサービスの提供。問題なし。
# tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN

# ESTABLISHEDは接続中と言う意味です。これは、SSHでログインしているので表示されています。
# tcp        0    サーバIP:22         管理用PC:62720     ESTABLISHED

# 下記の2つはDHCPCで利用しています。35752となっている方は、環境によって違います。
# lsof
# udp        0      0 0.0.0.0:35752           0.0.0.0:*
# udp        0      0 0.0.0.0:68              0.0.0.0:*

次の投稿に続きます。

本投稿ではお名前.comレンタルサーバーに申し込んでUbuntu14.04 LTSをインストールし、その上にnginx、MySQL、WordPressをインストールするところまでを解説しました。あまりにも投稿が長くなってしまうので、続きは『WordPress用nginxの設定 with SSL』でご紹介しています。

タグ付けされた , , . ブックマークする へのパーマリンク.

コメントを残す

メールアドレスが公開されることはありません。