さくらVPSを借りる　初期設定編

家でも会社でも同じ環境で勉強したいのでVPSを借りてみる。
全くの初心者なので詰まりまくりです。おかしなところあればご指摘ください。

#環境
##VPS
借りたのはさくらインターネットのVPS2Gプラン、詳細は以下と[こちら。](http://vps.sakura.ad.jp/specification.html)

* メモリ:2G
* ディスク容量:200GB
* CPU:仮想3コア
* リージョン:石狩
* OS:CentOS6.5（最初から入っていたのでとりあえず）

##ツール

* Putty
* WinSCP

#やること
ドットインストールさんの[さくらVPS入門](http://dotinstall.com/lessons/basic_sakura_vps)にしたがって初期設定をすすめていきます。

* 初期設定
* 作業用ユーザーの作成 & 設定
* 鍵認証の設定
* SSHの設定
* Firewallの設定
* Webサーバーの設定

とりあえずここまで頑張ります。

#初期設定
インストールされているアプリケーションをまずは最新にします。

```
# yum update
```

(`yum`はアプリケーションを管理するコマンド。)

次に日本語化。
vimで該当ファイルを開き以下のように書き換える。

```:/etc/sysconfig/i18n
LANG="ja_JP.UTF-8"
...
```

一旦ログアウトして再度ログインし`date`コマンドを入力。

```
2014年  9月  4日 木曜日 12:17:34 JST
```

以下のように表示されていれば成功。

もし`date`の結果が文字化けをしていたらPuttyの設定より、
`ウィンドウ > 変換 > 文字コードの設定`の設定が`UTF-8`になっているかどうかチェック。

#作業用ユーザーの作成 & 設定
普段はrootではなく別のユーザーを使うのが一般的（セキュリティ目的？）のため作業用ユーザーを作成。

```
# useradd username
# passwd password
```

ユーザー名とパスワードを設定。
また、一般ユーザーでもroot権限で作業が出来るコマンド`sudo`を使えるように設定する。

まずは先ほど作成した作業用ユーザーをグループ(下記例では`wheel`)に登録する。

```
# usermod -G wheel username
```

登録した`wheel`グループが`sudo`コマンドを使えるように`visudo`コマンドを実行、
該当行を以下のように編集する。（先頭の#を取る）

```
# visudo
```
```:visudo
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
```

#鍵認証の設定
パスワード認証ではセキュリティが弱いため、鍵認証を設定する。
（鍵認証:公開鍵と秘密鍵と呼ばれる凄く長い文字列を使う認証方式。）

* 公開鍵 -> VPSに保管する
* 秘密鍵 -> 個人で保管する

##鍵の生成
作業用ユーザーでログイン後、公開鍵を保管するディレクトリを作成し、移動。

```
$ mkdir .ssh/
$ cd .ssh/
```

キーを生成する。

```
$ ssh-keygen -t rsa

Enter file in which to save the key (/home/username/.ssh/id_rsa): (何も入力しないでENTER押下)
Enter passphrase (empty for no passphrase): (何も入力しないでENTER押下)
Enter same passphrase again: (何も入力しないでENTER押下)
```

公開鍵`id_rsa.pub`のファイル名を`authorized_keys`へ変更する。

```
$ mv id_rsa.pub authorized_keys 
```

`.ssh`ディレクトリと`authorized_keys`の権限を変更する。

```
$ cd /home/username/
$ chmod 700 .ssh/
$ chmod 600 .ssh/authorized_keys
```

##秘密鍵をダウンロード
WinSCPなどを使いVPS上から`id_rsa`をダウンロード。

##Puttyで変換してログイン
ダウンロードした`id_rsa`はそのままではPuttyでは使用できないため、
PuTTYごった煮版で同梱されているPuTTYgenを使用し、Putty用の鍵に変更する。

1. PuTTYgenで既存の秘密鍵の`読込`
1. `鍵のパスフレーズ`及びその確認を入力
1. `秘密鍵の保存`
1. `接続` > `SSH` > `認証` > `認証のためのプライベートキーファイル`を読み込み
1. 保存し接続
1. 2.で入力した`鍵のパスフレーズ`を使用し認証、ログイン

#SSHの設定
さらにセキュリティを強固にするためにSSHの設定をする。
下記コマンドは一般ユーザーから管理者に変更するもの。よく使う（はず）ので覚えておく。

```
$ sudo -s
```

この項目では`/etc/ssh/sshd_config`のみ編集します。
まず編集するファイルはバックアップを取る、忘れがちなので癖をつける。

```
# cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.org
```

##sshd_configの設定
###ポート番号の変更
デフォルトのポート22番はあまりにも広く使われているポートのため変更。
1024～65535までの間で設定可能。

```:/etc/ssh/sshd_config
#Port 22
...
```

　　↓

```:/etc/ssh/sshd_config
Port 9117
...
```

###パスワードログインの禁止
鍵認証を実装したためパスワードではログインできないよう禁止する。

```:/etc/ssh/sshd_config
...
PasswordAuthentication yes
...
```

　　↓

```:/etc/ssh/sshd_config
...
PasswordAuthentication no
...
```

###rootログインの禁止
rootはpasswordが割れただけでマズいことになるのでrootへの直接ログインを禁止します。

```:/etc/ssh/sshd_config
...
#PermitRootLogin yes
...
```

　　↓

```:/etc/ssh/sshd_config
...
PermitRootLogin no
...
```

最後にsshdのrestart。これ忘れていて大変苦労しました。

```
$ sudo service sshd restart
```

#Firewallの設定
ここが一番よく分かっていないのでもうちょっと理解したい。
##ipv4の設定
[こちら](http://tweeeety.hateblo.jp/entry/20140210/1392063648)を参考に`iptables`を設定する。

```
# vim /etc/sysconfig/iptables
```

##ipv6の設定
[こちら](http://fnya.cocolog-nifty.com/blog/2014/01/vps-centos-ipv6.html)を参考に`ip6tables`を設定する。
ipv6の有効化や設定については最初から設定されていたようで、特にすること無し。

```
# vim /etc/sysconfig/ip6tables
```

#Webサーバーの設定
##Apacheのインストール

```
# yum install httpd
```

ついでにサービスの自動起動も設定しておく。

```
# chkconfig httpd on
```

編集するファイル`/etc/httpd/conf/httpd.conf`のバックアップを取っておきます。

```
# cp -a /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
```

##httpd.confの設定
###攻撃者に有利となる情報の表示を減らす
攻撃者に有利な情報を極力表示しないよう修正。
[こちら](http://web.just4fun.biz/?Apache%2FServerTokens%E3%81%A8ServerSignature%E3%81%AE%E9%96%A2%E4%BF%82)が参考になるかと思います。

```:/etc/httpd/conf/httpd.conf
...
ServerTokens OS

...
ServerSignature On
```

　　↓

```:/etc/httpd/conf/httpd.conf
...
ServerTokens Prod

...
ServerSignature Off
```

###ファイル一覧を表示させないようにする
[こちら](http://www.atmarkit.co.jp/flinux/rensai/linuxtips/705noindexes.html)が参考になるかと思います。

```:/etc/httpd/conf/httpd.conf
...
Options Indexes FollowSymLinks
```

　　↓

```:/etc/httpd/conf/httpd.conf
...
Options -Indexes FollowSymLinks
```

###ドキュメントルートの設定
URLとしてアクセスしたときに、ここで指定したフォルダ以下にアクセスが可能となります。
今回は特に編集はしませんが、よく使うので覚えておきます。

```:/etc/httpd/conf/httpd.conf
...
DocumentRoot "/var/www/html"
```

##Apacheの起動
まずは設定を変えたのでテスト。

```
# service httpd configtest
```

`Syntax OK`と表示されたら問題なし、Apacheを起動させる。

```
# service httpd start
```

VPSのIPに接続して、いつものApache Test Pageが表示されていればOK。

#最後に
DocumentRoot(`/var/www/html`)下にindex.htmlなどを置いてテスト。
それもOKならここまでは大丈夫。（なはず）

#引っかかった箇所

1. 初期設定にて`LANG="ja_JP.UTF-8"`と書くべきところを`LANG="ja_JP"`と書いてしまい文字化け。
 * Puttyの文字コード設定で`UTF-8/Auto-Detect Japanese`を選択することで文字化けは解消
 * 上記解決策は根本的解決ではないため非推奨。ちゃんと`LANG="ja_JP.UTF-8"`と記述しよう
1. 鍵認証の設定にて、最初からPuttyで公開・秘密鍵を作ろうとしたらエラー。
 * 最初に`ssh-keygen -t rsa`コマンドで鍵を作成し、それをPutty用に変換しよう