さくらのVPS初期設定

redmineとかインストールしたくなったので、2年程誰もログインしないマインクラフトサーバとして利用していたさくらのVPSを再設定することにしました。

基本的にはさくらのVPSのサーバ初期設定ガイドに従っていくだけです。

[さくらのVPS　サーバの初期設定ガイド](https://help.sakura.ad.jp/app/answers/detail/a_id/2429)

### 環境

| | |
|:-:|:-:|
| OS | Mac OS X El Capitan 10.11.4 |
| VPSプラン | 1G 972円/月 |
| サーバOS | CentOS 6.7 |

### OS再インストール

コントロールパネルから「OSインストール」→「標準OSインストール」と選択し、rootのパスワードを入れるだけです。
標準OSを選択するとCentOS6.7がインストールされます。
CentOS7等別のOSをインストールしたい場合は「カスタムOSインストール」を選択するとインストールできますが、今回はCentOS6を使います。


### 日本語入力の設定

ファイルに日本語を入力すると文字化けしたので、rootで次の設定ファイルを書き換えて再起動します。

```shell-session
[root@www99999ue ~]# vi /etc/sysconfig/i18n
```

```text:変更前
LANG="C"
```

```text:変更後
LANG="ja_JP.utf8"
```

再起動します。

```shell-session
[root@www99999ue ~]# shutdown -r now
```

今思えば文字化けしたのはファイルを開いた時の文字コードがUTF-8になっていなかっただけだったような気もします。
`"C"`だとデフォルトなので英語が表示されるところも`jp_JP.UTF-8`なら日本語で表示されるのでまあやっておいても良い設定だと思います。

### 一般ユーザの追加とsudoの設定

普段からrootでログインするのは危険なので一般ユーザを作成します。

adminというユーザを作成し、パスワードを設定します。

```shell-session
[root@www99999ue ~]# useradd admin
[root@www99999ue ~]# passwd admin
```

作成したユーザをwheelグループに追加します。

```shell-session
[root@www99999ue ~]# usermod -G wheel admin
```

wheelグループのユーザはすべてのコマンドをsudoで実行できるように設定ファイルを`visudo`コマンドで書き換えます。`#`を一個外すだけ。

```shell-session
[root@www99999ue ~]# visudo
```

```text:変更前
## Allows people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
```

```text:変更後
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
```

これでadminがsudoを使えるようになりました。

### SSH接続をできるようにする

まずはMac側でSSH接続に必要な鍵を生成します。
初期設定ガイドではTeraTermで作成していますが、MacにTeraTermがあるかわからないので普通にコマンドで作成します。

```shell-session
# ssh-keygen
```
パスフレーズを入力します。パスフレーズは鍵を使う時に入力する事があるので忘れないようにしましょう。

ssh接続をするユーザ（今回はさっき作成したadmin）でサーバへログインします。

Macで作成した鍵のうち公開鍵をサーバに登録します。

```shell-session
[admin@www99999ue ~]$ mkdir .ssh
[admin@www99999ue ~]$ chmod 700 .ssh
[admin@www99999ue ~]$ vi .ssh/authorized_keys
```

ここで先ほどMacで作成した公開鍵（`ssh-keygen`で作成されたこれ`.ssh/id_rsa.pub`）の内容を貼り付けて保存します。保存したら権限の変更。

```shell-session
[admin@www99999ue ~]$ chmod 600 .ssh/authorized_keys
```

rootでログインしてsshデーモンの設定ファイルを書き換えます。

```shell-session
[root@www99999ue ~]# vi /etc/ssh/sshd_config
```

sshは普通22番ポートを使いますが、攻撃を回避するために私は50022番にします。49152番〜65535番が自由にできるポート番号なので、その中から選ぶのが良いのではないでしょうか。
sshでrootのログインは危険なので禁止します。rootは必ず存在するユーザなので狙われやすいからですね。
また、鍵を使うため、ログインパスワードでの認証は禁止します。

```text:変更前
(略)
#Port 22
(略)
#PermitRootLogin yes
(略)
PasswordAuthentication yes
(略)
```

```text:変更前
(略)
Port 50022
(略)
PermitRootLogin no
(略)
PasswordAuthentication no
(略)
```

このコマンドで設定ファイルがおかしくないかチェックできるらしいです。何も表示されなければオッケー。

```shell-session
[root@www99999ue ~]# sshd -t
```

変更した設定ファイルを読み込み直します。

```shell-session
[root@www99999ue ~]# service sshd restart
```

**（2016/12/14 追記）CentOS7系では`service`ではなく`systemctl`に変わっています。**

Macからログインを試します。ポート番号を22番から変更した場合は`-p`オプションでポート番号を指定する必要があります。`-i`オプションでは秘密鍵を指定します。

```shell-session
# ssh admin@www99999ue.sakura.ne.jp -p 50022 -i ./.ssh/id_rsa
```

ログインできました。

### OSのアップデート

インストールに用いたOSイメージが最新とも限らないため、OSのアップデートをします。

```shell-session
[root@www99999ue ~]# yum update
```

### iptablesの設定

最低限のセキュリティ設定をします。
初期設定ガイドではコマンドを用いてルールを設定する方法が記載されていますが、面倒なので設定ファイルを直接修正します。

```shell-session
[root@www99999ue ~]$ vi /etc/sysconfig/iptables
```

私の設定ファイルはこんな感じ。
インプットはホワイトリスト、FORWARDとOUTPUTはブラックリストにします。
とりあえずsshと使いそうなhttp,httpsを許可します。

```text:/etc/sysconfig/iptables
*filter
:INPUT DROP [3:564]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [24:2288]
##
## basic
##
# 確立済みの通信を許可
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
# ループバックを許可
-A INPUT -i lo -j ACCEPT 
# pingを許可
-A INPUT -p icmp -j ACCEPT 
# httpを許可
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
# httpsを許可
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT 
# sshを許可(50022をsshのポートにしている)
-A INPUT -p tcp -m tcp --dport 50022 -j ACCEPT 
##
## security
##
# データを持たないパケットの接続を破棄する
-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 

COMMIT
```

iptablesを再起動して変更を適用します。

```shell-session
[root@www99999ue ~]$ service iptables restart
```

これにて最低限の設定が完了！