vpsとはVirtual Private Serverの略で、一台のマシンを複数人で共有しながらも、仮想的には個人的なサーバとして利用できるようにしたものです。
僕らがサーバを契約する際には、その他に、共有サーバや専用サーバ等の選択肢がありますが、vpsは共用サーバよりは自由度の高い環境を、専用サーバより安い値段で利用できる、中間的な位置づけとなります。
例えば、共用サーバでは設定が他の人と共用になってしまうため、ひとつのWordPressで複数のサイトを運営する「マルチサイト」など、WordPressやMySqlの構成の変更を伴うような設定を行うことは、基本的に難しいですよね。
その点、vpsであれば、比較的自由に変更できます。
さくらvpsとはさくらインターネット株式会社が提供しているvpsサービスです。
vpsも、サービス内容は各社微妙に異なりますが、さくらvpsは、比較的シンプルな構成で自由度が高く、ハードウェアのスペックも良いと思います。
特に、SSDとHDDを選択できるプランをいち早く導入したため、SSDを利用して、レスポンスの良いサイト構築を試してみることも可能です。※SSDを使うと、DBへの書き込みやファイル読み込みなど、ディスクIOというところが早くなるので、ページを開いてから表示されるまでの時間が短くなり、その結果、レスポンスもよくなります。
2週間無料のお試し期間もあるようですので、使い勝手やレスポンスを確認してから使いたいという人にも親切ですね。
この一連の記事では、さくらのvpsサーバ契約後、初期設定としてやらなければならないことと、その後、Webサーバを立ち上げて、複数のドメインで複数のWordpressサイトを運営するまでの手順を記述したいと思います。
今回は、以下のことを行って行きますよー。
- VPSサーバの起動
- ターミナルソフトをインストールして、VPSサーバにログインできるようにする
- Teratermのインストールとrootパスワードの変更
- 一般ユーザの追加
- システムのアップデート
- 日本語化
- sshでのログインを公開鍵暗号方式に変更する
- sshの設定を変更する
- iptablesの設定
申し込みから最初の一歩 (VPSサーバの起動)
申し込みを行って、(仮)登録のメールをもらったら、最初に何をすればいいでしょうか。
初期状態では、VPSサーバがまだ動いていないので、最初にサーバの起動を行います。
(仮)登録のメールの中に、VPSコントロールパネルのURLとログイン情報が書いてありますので、VPSコントロールパネルにログインします。下記のように、サーバの状態が「停止中」となっているので、「起動」ボタンを押してください。
![image image]()
![image image]()
状態が「稼働中」になれば、VPSサーバが動き出しています。
ターミナルソフトをインストールして、VPSサーバにログインできるようにする。
次の段階ではサーバに「ssh」でログインして、各種設定を行い、サイト運営を行う準備をしていきましょう。
sshとは「Secure Shell/セキュアシェル」のことで、VPSサーバに暗号化技術で安全に接続し、サーバに対して「コマンド」を打ち込むことで、いろいろなことを行えます。
sshでのログインには、Teratermやputtyなどのターミナル・ソフトを使います。どのソフトにも長所がありますが、ここではTeratermを使って説明しますね。
Teratermのインストールとrootパスワードの変更
始めに、Teratermのサイトに行きます。
![image image]()
サイトに行ったら、ダウンロードリストからファイルをダウンロードします。
今回は「teraterm-4.8.9.exe」をダウンロードし、保存しました。
インストールは保存したファイルをダブルクリックし、「OK」ボタンを押していくだけです。インストールが終わったらさっそく起動してみましょう。
ログインに必要な情報
IPアドレス |
「[さくらのVPS] (仮)登録完了のお知らせ」のメールに記載されている[サーバ基本情報]のIPアドレス |
ユーザ名 |
root |
パスワード |
「[さくらのVPS] (仮)登録完了のお知らせ」のメールに記載されている[管理用ユーザ]の初期パスワード |
TCPポート |
22番 |
「新しい接続」を設定するダイアログが開きますので、「ホスト」の欄にメールで来ていた、 [サーバ基本情報]のIPアドレス(xxx.xxx.xxx.xxx形式)を入力します。
TCPポートは初期設定なので、「22」のままです。
![image image]()
初回ログイン時には、以下のようなエラーが出る場合がありますが、「続行」ボタンを押して次の画面に行ってOKです。
![image image]()
次に、SSH認証画面がでますので、ユーザ名「root」とパスフレーズを入力し、「OK」を押します。
パスフレーズ(パスワード)は、(仮)登録メールの中に、「管理用ユーザ」の「初期パスワード」として書いてあります。
その名の通り、rootユーザは管理ユーザとして特権を持っていますので、VPSサーバ内では「神」です。そのパスワードを悪い人に知られてしまうと、あなたのサーバを使って悪いことをされてしまう危険性がありますので、最初のログイン確認後、rootのパスワードは変更し、以後厳重に保管しておきましょう。
![image image]()
ログインに成功すると、以下のような画面になります。
![image image]()
rootのパスワードを変更するVPSサーバにログインできるようになって最初にするのはrootのパスワード変更です。
#passwd
![image image]()
「New password:」と表示後、希望のパスワードを入力します。入力するパスワードは、表示されません。
「Retype new password:」と表示後、再度、希望のパスワードを入力します。
![image image]()
変更したパスワードを使用して、ログインができるか、確認しておきましょう。
#exit
をタイプしてターミナルを抜け、rootで再度ログインしましょう。
ログインに必要な情報
IPアドレス |
「[さくらのVPS] (仮)登録完了のお知らせ」のメールに記載されている[サーバ基本情報]のIPアドレス |
ユーザ名 |
root |
パスワード |
新しいパスワード |
TCPポート |
22番 |
ログインができれば「rootのパスワード変更」は完了です。
![image image]()
一般ユーザの追加
rootは非常に権限の強いユーザですので、権限の制限された一般ユーザを作成し、通常の業務ではそちらを使うのが一般的です。それでは早速一般ユーザを作成しましょう。root権限を持つユーザで作業を行ってください。※下記は「myuser」という一般ユーザを作成した例です。ユーザ名はみなさんの環境に合わせて、適宜変更してください。
#ユーザを追加
$ useradd myuser
これでユーザが追加されましたが、まだパスワードが設定されていません。
下記コマンドでユーザ「myuser」にパスワードを設定しましょう。
#ユーザにパスワードを設定
$ passwd myuser
「New password:」と表示後、希望のパスワードを入力します。※入力するパスワードは、表示されません。
「Retype new password:」と表示後、再度、希望のパスワードを入力します。※入力するパスワードは、表示されません。
「all authentication tokens updated successfully.」と表示されればパスワードの変更は完了です。
sudoの設定一般ユーザで作業している最中、サーバの設定変更等でroot権限が必要な場合があります。
そんな時にroot権限でコマンドを実行できるsudoを設定しておきましょう。
さくらVPSのデフォルトOSであるCentOSでは通常「wheel」というグループに所属する一般ユーザに対して「sudo」を利用できるように設定します。
root権限を持つユーザで作業を行ってください。<先ほど作成した一般ユーザ「myuser」をグループ「wheel」に設定します。※下記は「myuser」という一般ユーザを作成した例です。ユーザ名はみなさんの環境に合わせて、適宜変更してください。
#wheelグループにユーザを追加
$ usermod -G wheel myuser
#追加されているか確認。グループに「wheel」があればOK。
$ id myuser
uid=502(myuser) gid=502(myuser) 所属グループ=502(myuser),10(wheel)
初期状態では、「wheel」グループのユーザはsudoできる設定ではありませんので、設定を変更しましょう。
sudo の設定ファイルは「/etc/sudoers」ですが、このファイルを直接編集してはいけません。visudo というファイル編集用のコマンドがあるので、それを使いましょう。
#sudo用ファイルを編集
$ visudo
上記コマンドを入力するとエディタが起動してsudoersファイルが編集状態になります。
キーボードの矢印ボタン(または「j」「k」ボタン)で上下移動できますので、ファイルの下の方に移動し、下記のように修正します。(「# %wheel ALL=(ALL) ALL 」の行まで移動し、「#」にカーソルを合わせて「x」を押すと文字が消えます。2回押して、「%」が先頭になるようにしましょう。)
## Allows people in group wheel to run all commands # %wheel ALL=(ALL) ALL ↓
## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL
sudoコマンドを利用できるか、確認してみましょう。一般ユーザでログインし、以下のコマンドを入力します。
#sudo情報を表示
$ sudo -l
「[sudo] passwrod for ~」と表示されますので、ログインしている一般ユーザのパスワードを入力します。
![image image]()
システムのアップデート
root権限を持つユーザで作業を行います。
$ yum update
![image image]()
日本語化
$ vi /etc/sysconfig/i18n
上記コマンド入力後、以下のように変更します。
LANG="C"
SYSFONT="latarcyrheb-sun16"
↓
LANG="ja_JP.UTF-8"
SYSFONT="latarcyrheb-sun16"
sshでのログインを公開鍵暗号方式に変更する
ターミナルソフトでのログインは当初、ユーザ名とパスワードを入力する方式ですが、パスワードが知られてしまうと誰でもログインできてしまいます。
「パスワードなんて人には教えないよ」と思う人もいるかもしれませが、近年は、VPSサーバに対するブルートフォース攻撃が増えています。これは、サーバのsshポートに対してパスワードの総当たりを行うことでログインできるパスワードを見つけ、サーバを乗っ取ってしまう攻撃です。
そこで、パスワードでログインするのではなく、公開鍵に対応した秘密鍵を使ってログインする方式に変更します。始めに、Teratermを使って、公開鍵と秘密鍵を作成しましょう。いったんTeratermを起動して、「キャンセル」ボタンを押します。
![image image]()
その後、「設定」→「SSH鍵生成」を選択します。
![image image]()
その後表示されるダイアログの「鍵の種類」で「RSA」を選択し、「生成」ボタンを押します。
![image image]()
鍵が生成されたら、パスフレーズを入力して、公開鍵と秘密鍵を自分のPCに保存します。デフォルトで以下の名前になります。
公開鍵 |
id_rsa.pub |
秘密鍵 |
id_rsa |
![image image]()
保存できたら、Teratermを一旦終了します。再度、Teratermを起動し、公開鍵暗号方式でログインさせたいユーザで、ログインします。ログインできたら、公開鍵(id_rsa.pub)を、Teratermにドラッグ&ドロップします。
![image image]()
ファイル転送を行いますか?というダイアログが表示されますので、「SCP」を押して転送を行います。これによりこのユーザのホームディレクトリに「id_rsa.pub」が配置されました。
![image image]()
これから、公開鍵認証の設定を行います。
#「.ssh」ディレクトリを作成する。
$ mkdir .ssh
#「.ssh」ディレクトリの権限を変更する。
$ chmod 700 .ssh
#id_rsa.pubの内容を.ssh/authorized_keysに書き込む。
$ cat id_rsa.pub > .ssh/authorized_keys
#.ssh/authorized_keysの権限を変更する。
$ chmod 600 .ssh/authorized_keys
#id_rsa.pubファイルを消す。
$ rm -f id_rsa.pub
sshの設定を変更する
上記のブルートフォース攻撃は、通常のsshポート22番に対してrootユーザで行われます。そのため、ポートの番号を変更し、rootでのログインを禁止します。また、パスワードでのログインも禁止し、公開鍵でのログインを行うようにします。
#sshの設定ファイルを編集する。
$ sudo vi /etc/ssh/sshd_config
「#Port 22」の行の「#」を削除し、設定を有効化します。また、「22」を1024~65535の間の数字に変更します。下記はポート番号「10022」を指定した例ですので、みなさんは、ご自分で決めた番号を設定してください。
#Port 22
↓
Port 10022
「#PermitRootLogin yes」の行の「#」を削除し、設定を有効化します。「yes」を「no」に変更します。
これにより、rootでのログインを禁止します。
#PermitRootLogin yes
↓
PermitRootLogin no
「yes」を「no」に変更します。
これにより、パスワードでのログインを禁止します。
PasswordAuthentication yes
↓
PasswordAuthentication no
変更が終わったら「:wq」を入力して保存します。
その後、下記コマンドでsshを再起動します。
#sshを再起動する。
$ sudo /etc/init.d/sshd restart
それでは、設定した結果が反映されているか、実際に公開鍵方式でログインしてみましょう。Teratermを起動し、
IPアドレス |
「[さくらのVPS] (仮)登録完了のお知らせ」のメールに記載されている[サーバ基本情報]のIPアドレス |
TCPポート |
sshの設定ファイルに設定したポート番号 |
![image image]()
OKボタンを押すと、下記のようなダイアログが表示されます。
ユーザ名とパスフレーズを入力します。
ユーザ名 |
公開鍵を設定した一般ユーザ |
パスフレーズ |
鍵保存時に設定したパスフレーズ |
また、保存している秘密鍵を使用しますので、「RSA/DSA/ECDSA/ED25519鍵を使う」をチェックし、秘密鍵(id_rsa)を設定します。
![image image]()
OKを押して、ログイン出来たら成功です。
iptablesの設定
この記事の最後の作業です。
iptablesの設定を変更します。iptablesは、サーバで受け付けるポート番号を指定したり、ルーティングを行ったりします。不要なサーバへの要求を受け付けなかったり、不審な要求を無視することで、サーバのセキュリティの強化につながります。最近、主に海外から、サーバをのっとるための不審なアタックが多くなっていますので、必ず対応しておきましょう。
#iptablesの設定ファイルを編集する。
$ sudo vi /etc/sysconfig/iptables
*filter
# 外からの通信(INPUT, FORWARD)をすべてDROPする
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
# 中から外へ出ていく通信はすべて通す
:OUTPUT ACCEPT [0:0]
# 確立済みの通信を許可
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# データを持たないパケットの接続を破棄
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
# SYNflood攻撃と思われる接続を破棄
-A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
# ステルススキャンと思われる接続を破棄
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
# localhostからの通信を許可
-A INPUT -i lo -j ACCEPT
# pingを許可
-A INPUT -p icmp -j ACCEPT
# これ以降は、通したいサービスのポートを書いていく
# SSH 10022は、変更したSSHのポート番号に変更してください
-A INPUT -p tcp -m tcp --dport 10022 -j ACCEPT
# Webサーバ
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
# Webサーバ(SSL)
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
# SMTP
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
# SMTP(SSL)
-A INPUT -p tcp -m tcp --dport 465 -j ACCEPT
# POP3
-A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
# POP3(SSL)
-A INPUT -p tcp -m tcp --dport 995 -j ACCEPT
# IMAP
-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
# IMAP(SSL)
-A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
# Tomcat
-A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
COMMIT
#iptablesを再起動する。
$ sudo /etc/rc.d/init.d/iptables restart