ConoHa VPS初期設定

# ConoHa VPSの初期設定
OSはUbuntu18.04

ここでは、公開鍵認証を用いたSSH接続、ファイアウォールの設定までを行う

## ユーザーを作成[1]
`useradd`で一般ユーザを作成し、 `passwd`でユーザのパスワード設定を行う。
`-m`オプションはユーザのホームディレクトリを作るためのもの。

例として`user1`を作成する。

```
[root]
$ useradd -m user1
$ passwd user1
```
`id`コマンドでユーザ情報を確認できる。

```
[root]
$ id user1
```

```
uid=1000(user1) gid=1000(user1) groups=1000(user1)
```
次に、`user1`にsudo権限を与える。
`usermod`は`-a`オプションがないと追加ではなく上書きになる。

```
[root]
$ usermod -aG sudo user1
```

再度、`id`コマンドで確認するとsudo権限が与えられていることがわかる。
sudo権限を持つユーザが作成できたので`su`コマンドでユーザを切り替える。

```
[root]
$ su - user1
```

## SSH接続
### 一般ユーザでパスワード認証のSSH接続が出来るか確認する

windowsの場合

```
$ ssh -l [ユーザー名] [IPアドレス]
```

UNIX系の場合

```
$ ssh username@ipアドレス
```

### rootユーザでSSH接続できないようにする
ConoHa側で`sshd_config`ファイルの`PermitRootLogin`をnoにする

```
$ sudo vim /etc/ssh/sshd_config
```

```
#PermitRootLogin yes
PermitRootLogin no 
```

以下のコマンドでリスタートすると反映される

```
$ sudo systemctl restart sshd
```

rootユーザでSSH接続できなければOK

### 公開鍵認証でSSH接続する[2]
セキュリティを高めるために公開鍵認証に変更する。
目標は**ローカル環境で鍵を作成し、サーバ側へ公開鍵を登録する**こと。

#### クライアント側
##### 公開鍵と秘密鍵を生成。
`~/.ssh`ディレクトリの中に公開鍵(hoge.pub)、秘密鍵が作られる。

```
ssh-keygen -t rsa -b 2048 -f <filename>
```

##### `scp`コマンドでファイルをサーバ側へコピー
サーバのルートディレクトリに公開鍵をコピー。

```
$ scp ~/.ssh/hoge.pub remote-username@server-address:~
```

コピーができたらサーバ側の作業に移る。

#### サーバ側
##### `~/.ssh/authorized_keys`ファイルにコピーした公開鍵の内容を追加[2]
```
# SSHログイン
$ ssh remote-username@server-address

# （以下処理はサーバ側）
# 公開鍵がコピーされていることを確認
$ cd ~ && cat hoge.pub

#「.ssh」ディレクトリを作成・パーミッションを変更
$ mkdir ~/.ssh
$ chmod 700 .ssh

#「~/.ssh/authorized_keys」を作成・パーミッションを変更
$ touch ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

# 公開鍵を「~/.ssh/authorized_keys」に追加
$ cat ~/hoge.pub >> .ssh/authorized_keys

$ exit
```

`/etc/ssh/sshd_config`を編集する。

```/etc/ssh/sshd_config
# 以下の行のコメントアウトを解除する
#PubKeyAuthentications yes
#AuthorizedKeysFile .ssh/authorized_keys
```

クライアント側からSSH認証でログインする。
（パスワード認証ではなく公開鍵認証でログイン出来ることを確認）

### `~/.ssh/config`でSSH接続するときに楽する
`config`に接続情報を書いておくことで指定したHost名で接続できる。

```~/.ssh/config
# Conohaサーバ
Host conoha
    HostName <ipアドレス>
    User <username> 
    Port 22
    IdentityFile ~/.ssh/hoge # 秘密鍵
    TCPKeepAlive yes
```
接続するときは以下のコマンドで行う。

```
$ ssh conoha
```

### SSH接続で使用するポート番号を任意の番号に変更[1]
ポート番号は49152番から65535番の間で設定する
ConoHa上の設定ファイルを変更する。また、ローカルのconfigファイルのポート番号も変更する。

```
$ sudo vim /etc/ssh/sshd_config
```

```/etc/ssh/sshd_config
# Port 22
Port [任意の番号]
```

リスタートして設定を反映させる。

```
$ sudo systemctl restart sshd
```

#### 余談（`scp`コマンドで`.ssh/config`に書いた情報を使う）

```
$ # scp <コピー元> <コピー先>
$ scp ~/home/hoge.txt <congigで設定したhost名>:~/home/
```

## ファイアウォールの設定
ssh, http, ftp, httpsの接続のみを許可するように変更する。

```
# ufwの状態確認
$ sudo ufw status
> Status: inactive

# ufwを有効化する
$ sudo ufw enable

# アクセスはデフォルトで拒否設定
$ sudo ufw default deny

# 必要なプロトコルの通信のみを許可する
$ sudo ufw allow https/tcp # port:443
$ sudo ufw allow http/tcp # port:80
$ sudo ufw allow ftp # port:21

# sshの許可はポート番号を指定する(ここでは50000にする)
$ sudo ufw allow 50000

# 上記で設定したものが反映されているかを確認
$ sudo ufw status verbose

# ファイアウォールを再読込して反映
$ sudo ufw reload
```



##### 出典

[1] [VPSを借りたらやるべき最低限のセキュリティ初期設定](https://nishinatoshiharu.com/initial-vps-security-settings/)
[2] [SSHなるものをよくわからずに使っている人のための手引書] (https://qiita.com/kenju/items/b09199c4b3e7203a2867)