さくら VPS の初期設定まとめ

少し放置していたさくらの VPS の OS を再インストールして一から環境構築したので、
その手順をまとめました。

# 環境
OS：Cent OS 6.8
ローカル環境：Mac

# やること
セキュリティとログ監視の設定を行います。
Apache や MySQL などアプリケーションに関しては触れません。

- 作業用ユーザの作成
- SSH 鍵認証の設定
- ファイアウォールの設定
- logwatch の導入

# root ログイン
サーバ契約時に送られてきたメールから、サーバの IP アドレスと root のパスワードを確認しておきます。
Mac のターミナルから SSH で接続します。
"Are you sure you want to continue connecting (yes/no)?" と聞かれたら yes と入力します。

```text:terminal
ssh root@xx.xx.xx.xx
```

# root パスワードの変更
まず、root のパスワードを変更します。

```
passwd
```

# yum update
インストール済みのパッケージを更新します。

```
yum update
```

# 日本語化

```
vim /etc/sysconfig/i18n
```

```vim:i18n（変更前）
LANG="C"
```

```vim:i18n（変更後）
LANG="ja_JP.UTF-8"
```

# 作業用ユーザの追加
sudo できるよう wheel グループに追加してあげます。

```
useradd hoge
passwd hoge
usermod -G wheel hoge
visudo
```
```vim:visudo（変更前）
# %wheel ALL=(ALL) ALL
```

```vim:visudo（変更後）
%wheel ALL=(ALL) ALL
```

# 作業用ユーザでログイン
作業用ユーザでログインできることを確認します。

```:terminal
ssh hoge@xx.xx.xx.xx
```

# SSH 鍵認証の設定
公開鍵を入れるディレクトリを作成します。

```
mkdir ~/.ssh
chmod 700 ~/.ssh
```

次に、ローカルのターミナルを起動します。

```:terminal
ssh-keygen -t rsa -v
```

ファイル名を聞かれるので、デフォルトで良ければそのまま Enter します。
パスフレーズを入力します。

ファイルが作成されたらパーミッションを変更します。

```:terminal
cd .ssh
chmod 600 id_rsa.pub
```

サーバに公開鍵を転送します。

```:terminal
scp id_rsa.pub hoge@xx.xx.xx.xx:~/.ssh/authorized_keys
```

# SSH 鍵認証を使ったログイン
鍵認証でログインできることを確認します。

```:terminal
ssh hoge@xx.xx.xx.xx
```

# SSH のセキュリティ設定
鍵認証の設定ができたところで、以下を禁止してセキュリティを高めます。

- パスワードでのログイン禁止
- root でのログイン禁止
- ポート番号の変更

root 権限で作業します。

```
sudo -s
vim /etc/ssh/sshd_config
```

```vim:sshd_config（変更前）
#Port 22
```

```vim:sshd_config（変更後）
Port 10022
```

パスワードでのログインを禁止します。

```vim:sshd_config（変更前）
PasswordAuthentication yes
```

```vim:sshd_config（変更後）
PasswordAuthentication no
```

root でのログインを禁止します。

```text:sshd_config（変更前）
#PermitRootLogin yes
```

```text:sshd_config（変更後）
PermitRootLogin no
```

保存後、sshd を再起動します。

```
service sshd restart
```

sshd を再起動したら別のターミナルを開き、変更したポート番号でのログインを確認します。
root やパスワードでのログインができないことも確認しておきましょう。

```:terminal
ssh -p 10022 hoge@xx.xx.xx.xx
```

# ファイアウォールの設定
CentOS 6.x では iptables を使用します。
今回は SSH と HTTP のみ許可していますが、必要に応じてその他のポートも開けます。

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

```vim:iptables
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp --tcp-flags ALL NONE -j DROP
-A INPUT -p tcp --tcp-flags ALL ALL -j DROP
-A INPUT -p tcp ! --syn -m state --state NEW -j DROP
-A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 4 -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 10022 -j ACCEPT

COMMIT
```

IPv4 は iptables で設定しますが、IPv6 は ip6tables で設定します。
設定している内容は IPv4 と同じです。

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

```vim:ip6tables
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp --tcp-flags ALL NONE -j DROP
-A INPUT -p tcp --tcp-flags ALL ALL -j DROP
-A INPUT -p tcp ! --syn -m state --state NEW -j DROP
-A INPUT -p icmpv6 --icmpv6-type echo-request -m limit --limit 1/s --limit-burst 4 -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 10022 -j ACCEPT

COMMIT
```

# logwatch の導入
logwatch はサーバのログをきれいに整形して、毎日レポートをメールで送ってくれます。
/var/log から手作業でログを確認するという作業から解放されますので、サーバ監視にはかかせませんね。

```
yum install logwatch
```

インストールが終わったら設定を行います。

```
cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/logwatch.conf
vim /etc/logwatch/conf/logwatch.conf
```

レポートの送信先メールアドレスを設定します。
自分の環境ではデフォルトで postfix が動いていたので、メールアドレスを指定するだけで送信できました。

```vim:logwatch.conf（変更前）
MailTo=Root
```

```vim:logwatch.conf（変更後）
MailTo=hoge@example.com
```

次に、ログの詳細度を設定します。
Low、Med、High のいずれかを設定します。この辺はお好みで。

```vim:logwatch.conf（変更前）
Detail=Low
```

```vim:logwatch.conf（変更後）
Detail=Med
```

最後に、cron に設定されている conf ファイルのパスを変更します。

```vim:0logwatch（変更前）
DailyReport=`grep -e "^[[:space:]]*DailyReport[[:space:]]*=[[:space:]]*" /usr/share/logwatch/default.conf/logwatch.conf | head -n1 | sed -e "s|^\s*DailyReport\s*=\s*||"`
```

```vim:0logwatch（変更後）
DailyReport=`grep -e "^[[:space:]]*DailyReport[[:space:]]*=[[:space:]]*" /etc/logwatch/conf/logwatch.conf | head -n1 | sed -e "s|^\s*DailyReport\s*=\s*||"`
```

毎日レポートが送られてきますので、ちゃんと読みましょう！

# 参考リンク

- [さくらのVPS入門 (全21回) - プログラミングならドットインストール](http://dotinstall.com/lessons/basic_sakura_vps)
- [さくらのVPS　サーバの初期設定ガイド｜さくらインターネット公式サポートサイト](https://help.sakura.ad.jp/app/answers/detail/a_id/2429)