さくらVPSのサーバ移行

さくらインターネットのVPSが3月29日リニューアルされまして、たとえば980円/月のプランだと今まで、

  • メモリ:512MB
  • ディスク:20GB

という内容だったのに、リニューアル後は同じ料金で

  • メモリ:1GB
  • ディスク:100GB

となりました。リニューアル前の契約でもメモリは512MBから1GBに増加してもらえたんだけど、ディスクについては据え置きの20GBのまま。同じ料金なのに。
そんなわけで、新しくVPSを契約しなおしてサーバ移行をしてリニューアル前のサーバについては解約することにしました。

ってことで、ここでは移行の手順についてメモっときます。

さくらインターネットでVPSの申し込み

さくらインターネットでVPSの申し込みを行います。

VPS(仮想専用サーバ)のさくらインターネット

申し込みをしてしばらくすると「[さくらのVPS] 仮登録完了のお知らせ」というタイトルのメールが届きます。このメールに管理用ユーザのユーザ名と初期パスワードが載っています。このメールが届くまでちょっと待ちます。

VPSコントロールパネルから仮想サーバを起動

さくらインターネットのVPSコントロールパネルから仮想サーバの起動をします。「起動」ボタンを押します。
ステータスが「起動中」になったことを確認します。

rootパスワードの変更

まずrootのパスワードを設定します。
さくらVPSのリモートコンソールでコマンド実行しました。なぜかこの時点でSSH接続ができなかったので。。

# passwd
Changing password for user root.
New password:(パスワード)
Retype new password:(パスワードの再入力)
passwd: all authentication tokens updated successfully.

ユーザ追加

続いてユーザを登録します。

# useradd  (ユーザ名)
# passwd (ユーザ名)
Changing password for user (ユーザ名).
New password:(パスワード)
Retype new password:(パスワードの再入力)
passwd: all authentication tokens updated successfully.

SSHのポートを変更する

SSHのポートを変えておきます。SSHのポートは22がデフォルトなんですが、あらゆるIPアドレスの22番ポートへのアタックをかけるフトドキbotとかいるんで、変えておくことで回避できます。
/etc/ssh/sshd_configの下記の内容をコメント外して22番を変更します。ここでは10022に変更しています。

#Port 22
 ↓
Port 10022

SSH公開鍵を設定する

次に認証の鍵を生成します。
とりあえずココではLinux上でRSA暗号方式の鍵を作成する方法です。具体的にはMacのターミナルから作ってます。

$ ssh-keygen -t rsa ←RSA方式を指定
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(ユーザ)/.ssh/id_rsa):  ←[Enter]キーを押下
Enter passphrase (empty for no passphrase): ←パスフレーズを入力
Enter same passphrase again: ←再度パスフレーズを入力
Your identification has been saved in /Users/(ユーザ)/.ssh/id_rsa.
Your public key has been saved in /Users/(ユーザ)/.ssh/id_rsa.pub.
The key fingerprint is:
4e:7d:93:1e:14:eb:e8:ab:67:55:91:82:1f:b1:9f:c1 user@local-pc

これで$HOME/.ssh/ディレクトリに秘密鍵(id_rsa)と公開鍵(id_rsa.pub)が作成されます。
公開鍵を「authorized_keys」のファイル名にしてサーバーの$HOME/.ssh/ディレクトリに置きます。

すでに「$HOME/.ssh/ディレクトリ」ファイルが存在している場合は、以下のコマンドでauthorized_keysファイルに公開鍵を追加します。公開鍵は複数設置できるんです。

$ cat id_rsa.pub >> $HOME/.ssh/authorized_keys

サーバーの.sshディレクトリのパーミッションを700、authorized_keysファイルのパーミッションを600に設定します。

$ chmod 700 $HOME/.ssh
$ chmod 600 $HOME/.ssh/authorized_keys

続いてsshd_configを編集して、RSA公開鍵認証の有効化とパスワード認証の無効化の設定を行います。
編集するのは/etc/ssh/sshd_configファイルです。

まず、RSA公開鍵認証の設定を有効にします。ま、デフォルトでも有効なんですが明示するためにコメント外しておきました。

#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeyFile   .ssh/authorized_keys

のコメントを外して、下記のようにします。

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeyFile   .ssh/authorized_keys

次にrootでログインできないように設定します。

#PermitRootLogin yes

のコメントを外して、「yes」を「no」に変更します。

PermitRootLogin no

続いてrhostでの接続とパスワード認証の無効化です。

#RhostsRSAAuthentication no
#PasswordAuthentication yes
#PermitEmptyPasswords no

各コメントを外して、PasswordAuthenticationの「yes」を「no」に変更します。

RhostsRSAAuthentication no
PasswordAuthentication no
PermitEmptyPasswords no

あとはsshdを再起動すれば、sshd_configの変更が読み込まれます。

# /etc/init.d/sshd restart

これで以下の条件を満たさない限りログインできなくなります。

  • サーバ上の公開鍵とペアの秘密鍵を持っていること
  • 鍵のパスフレーズを知っていること

ターミナルソフトで接続してみる(iTerm)

SSHの設定が完了したので、ターミナルから接続してみます。 僕はMacの「iTerm」というソフトを使っていますんで、これを例に。

Commandで「Command」を選択し、コマンドとして以下を設定します。

ssh -p (SSHのポート番号) (サーバのIPアドレス) -l (ログインするユーザ名)

先ほど作成した秘密鍵(id_rsa)が$HOME/.sshに設置されていれば鍵のパスコードを聞いきます。パスコードを入力するとアクセスできます。

アクセスに成功すると、以下のメッセージが出てくることがあります。

Are you sure you want to continue connecting (yes/no)?

このメッセージは、リモートホストの SSH v2 用 RSA 公開鍵(/etc/ssh/ssh_host_rsa_key.pub)をクライアントの ~/.ssh/known_host ファイルへ登録するかを確認するものです。yes を入力すると、リモートホストの SSH v2 用 RSA 公開鍵が、クライアントの ~/.ssh/known_host ファイルに登録されます。
ので、「yes」と入力しておけば大丈夫です。

sudoの設定

まず「sudo」がインストールされていることを確認します。

# yum list installed | grep sudo
sudo.x86_64        1.7.2p1-8.el5_5     installed

つづいて、ユーザーをwheelグループに追加します。
んで、wheelグループのユーザーを確認しといます。

# /usr/sbin/usermod -G wheel "ユーザー名"
# id "ユーザー名" 
# cat /etc/group | grep wheel 

wheelグループ以外はsuできないようにします。

# vi /etc/login.defs
SU_WHEEL_ONLY yes

# vi /etc/pam.d/su
#auth required pam_wheel.so use_uid
↓ コメントを外す
auth required pam_wheel.so use_uid

# /usr/sbin/visudo
# %wheel ALL=(ALL) ALL
↓ コメントを外す
%wheel ALL=(ALL) ALL

sbinディレクトリにパスを通します。

# vi /home/(ユーザ)/.bash_profile
PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin

一旦、サーバをリブートします。

/sbin/shutdown -r now

これで「sudo」コマンドが使えるようになりました。

Apacheのインストール

yumでApacheをインストールします。

# yum install httpd* -y

Apacheの自動起動設定もしておきます。

# /sbin/chkconfig --level 345 httpd on

MySQLのインストール

次にMySQLをインストールします。

# yum install mysql* -y

MySQLも自動起動の設定をします。

# /sbin/chkconfig --level 345 mysqld on

Apacheの起動

Apacheを起動します。

# /etc/init.d/httpd start

mySQLのユーザーを作成

MySQLのユーザを登録します。
まずはMySQLにrootでログインします。

$ mysql -u root -p(パスワード)

追記(2015.10.19)
もし、ここで「ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'」というエラーがでたら、コチラを参照。 ⇒ mysqlソケットエラー解決法

続いてユーザの登録とその反映です。

mysql> GRANT ALL ON *.* TO (ユーザ)@"localhost" IDENTIFIED BY "(パスワード)";
mysql> FLUSH PRIVILEGES;

これでユーザが登録できました。ここでは権限を「ALL」にしています。用途を限定したユーザでしたら細かく指定してください。

一応、ユーザが登録されたか確認してみます。

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select host, user from user;

これで登録したユーザがリストに出てこれば大丈夫。

MySQLの起動と設定

MySQLも起動っと。

# /etc/init.d/mysqld start

次はMySQLのrootパスワードを設定します。
まずはMySQLに接続して

$ mysql -u root

SQLでrootパスワードを設定します。'*****'の部分にパスワードを記載します。

mysql> UPDATE mysql.user SET Password = PASSWORD('*****') WHERE User = 'root';

グラントテーブルを再読み込みして・・・

mysql> FLUSH PRIVILEGES;

MySQLとの接続を切断します。

mysql> quit

MySQLの再起動すればOKです。

# /etc/init.d/mysqld restart

PHPのインストール

CentOS 5のPHPのバージョンは現時点で5.1.6なので、リポジトリを指定して5.3を入れることにします。

$ wget http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
$ wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
$ sudo rpm -Uvh remi-release-5.rpm
$ sudo yum --enablerepo=remi install php

pearのHTTP_Request2をインストールするには以下のコマンドです。

$ sudo pear install HTTP_Request2

iptablesを設定

iptablesの設定をして、SSHとHTTPとSMTPのポートだけを開けるように設定をします。
ちなみにSSHは通常22番ポートなんですが10022番に変更しているんで、ここでは10022番(SSH)と80番(HTTP)と25番(SMTP)を開ける設定をします。

ます、現在の設定を確認します。

$ sudo /sbin/iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

iptables 初期化用のスクリプトを作ります。ここではファイル名を「iptables-init.sh」にします。

#!/bin/sh

/sbin/iptables -F
/sbin/iptables -X

/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD DROP

/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT

/sbin/iptables -A INPUT -s 10.0.0.0/8 -j DROP
/sbin/iptables -A INPUT -s 172.16.0.0/12 -j DROP
/sbin/iptables -A INPUT -s 192.168.0.0/16 -j DROP

# iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

/sbin/iptables -A INPUT -p tcp --dport 10022 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 25 -j ACCEPT

/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

このスクリプトを実行します。

$ sudo sh iptables-init.sh

これでパケットフィルタの状態を確認すると、

$ sudo /sbin/iptables -L
Chain INPUT (policy DROP)target     prot opt source               destination        
ACCEPT     all  --  anywhere             anywhere           
DROP       all  --  10.0.0.0/8           anywhere           
DROP       all  --  172.16.0.0/12        anywhere           
DROP       all  --  192.168.0.0/16       anywhere           
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:10022
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:smtp
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED

Chain FORWARD (policy DROP)
target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        
ACCEPT     all  --  anywhere             anywhere           

となるはずです。
この設定がシステムリブート時でも有効になるように/etc/sysconfig/iptables に保存します。
下記のコマンドはsudoで実行できないので、suでrootになって実行します。

# /sbin/iptables-save > /etc/sysconfig/iptables

そしてiptablesをリスタートして設定を有効にします。

$ sudo /etc/rc.d/init.d/iptables restart
Flushing firewall rules:                                   [  OK  ]
Setting chains to policy ACCEPT: filter                    [  OK  ]
Unloading iptables modules:                                [  OK  ]
Applying iptables firewall rules:                          [  OK  ]

Smartyのインストール

まずSmartのモジュールをダウンロードします。以下のサイトから最新版のSmartyがダウンロードできます。

Smarty Download

ダウンロードした圧縮ファイルを解凍します。解凍したフォルダの中から「libs」フォルダをサーバにアップします。
僕は「/usr/local/lib/Smarty-v.e.r/」の下に入れています。

ひと通り終了

以上でひと通りの設定が完了です。

移行したメールフォームからメールの送信ができなくて焦ったんですが、さくらVPSは試用期間中はメール送信ができない設定になっているのでした。
本契約したらメール送信も問題なくできましたよ。