ニフティクラウド上の Ubuntu 16.04 でセキュリティ向上のために SSH のポートを変更

ニフティクラウド上の Ubuntu 16.04 でセキュリティ向上のために SSH のポートをデフォルトの 22 から別のもの (ここでは 3022) に変更する手順を説明します。

## 前提

ニフティクラウド上に下記のリソースが存在するものとします。

* SSH キー作成
  * 名前: portchangetest
  * パスフレーズ: (任意のもの、忘れないようにする)
* FW グループ作成
  * 名前: portchangetest
  * IN ルール:
    * TCP 22 CIDR/IP 0.0.0.0/0
* サーバー作成
  * イメージ: Ubuntu 16.04
  * 名前: portchangetest
  * SSH キー: portchangetest
  *   * 名前: portchangetest


## 現状の確認

サーバー portchangetest にログインして作業します。

sshd プロセスが立ち上がっており、

```
root@ubuntu:~# ps aux | grep sshd
root     12907  0.0  0.8  65520  4296 ?        Ss   09:44   0:00 /usr/sbin/sshd -D
root     23362  0.0  1.3  95368  6592 ?        Ss   18:31   0:00 sshd: root@pts/0
root     23442  0.0  0.2  14516  1084 pts/0    S+   18:31   0:00 grep --color=auto sshd
```

22 番ポートを LISTEN しています。

```
root@ubuntu:~# netstat -nltpe | grep 22
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      0          27710       12907/sshd      
tcp        0      0 0.0.0.0:24224           0.0.0.0:*               LISTEN      110        137042      21607/ruby      
tcp6       0      0 :::22                   :::*                    LISTEN      0          27719       12907/sshd
```

## 設定変更～設定反映

まず、念のため、設定ファイルのバックアップをとっておきます。

```
root@ubuntu:~# cp /etc/ssh/sshd_config  /etc/ssh/sshd_config.20170213
```

設定ファイルを編集します。

```
root@ubuntu:~# vi /etc/ssh/sshd_config                                                                                              
```

`Port 22` と書かれてある行を `Port 3022` に変更し、vi を終了します。

先ほど取得したバックアップとの差分を確認します。
下記のような差分が出れば OK です。

```
root@ubuntu:~# diff /etc/ssh/sshd_config.20170213 /etc/ssh/sshd_config
5c5
< Port 22
---
> Port 3022
```

ここまでできたら、変更した設定を反映するために、sshd を再起動しましょう。

```
root@ubuntu:~# service sshd restart
```

再起動が完了すると、sshd の LISTEN するポートが 22 から 3022 に変化していることが分かります。

```
root@ubuntu:~# netstat -nltpe | grep 22
tcp        0      0 0.0.0.0:24224           0.0.0.0:*               LISTEN      110        137042      21607/ruby      
tcp        0      0 0.0.0.0:3022            0.0.0.0:*               LISTEN      0          157186      23522/sshd      
tcp6       0      0 :::3022                 :::*                    LISTEN      0          157195      23522/sshd
```

## サーバー内の FW 設定変更

ニフティクラウド上の Ubuntu 16.04 イメージでは、サーバー内の FW がデフォルトで有効になっており、外部からのアクセスは 22 番ポートのみ許可する設定になっています。
なので、こちらの設定も 22 -> 3022 に変更しておきます。

現状では 22 番ポートのみ許可する設定になっていることを確認しておきます。

```
root@ubuntu:~# ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere                  
22 (v6)                    ALLOW       Anywhere (v6)
```

3022 を許可する設定を行います。

```
root@ubuntu:~# ufw allow 3022
Rule added
Rule added (v6)
```

3022 が許可されたことを確認します。

```
root@ubuntu:~# ufw status
Status: active
To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
3022                       ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)
3022 (v6)                  ALLOW       Anywhere (v6)         
```

不要なルールを削除しておきます。
(ufw delete の引数には ufw status で表示されるルール一覧の、上から 1,2,3... と数えた番号を指定します。)

```
root@ubuntu:~# ufw delete 1
Deleting:
 allow 22
Proceed with operation (y|n)? y
Rule deleted
root@ubuntu:~# ufw delete 2
Deleting:
 allow 22
Proceed with operation (y|n)? y
Rule deleted (v6)
```

最終的に下記のような設定になっていれば OK です。

```
root@ubuntu:~# ufw status
Status: active

To                         Action      From
--                         ------      ----
3022                       ALLOW       Anywhere                  
3022 (v6)                  ALLOW       Anywhere (v6)
```

## ニフティクラウド上の FW 設定変更

FW グループ portchangetest について下記の操作を行います。

* IN ルール `TCP 22 CIDR/IP 0.0.0.0/0` を削除
* IN ルール `TCP 3022 CIDR/IP 0.0.0.0/0` を追加

## 新しいポート (3022) で SSH 接続できるか確認

ターミナルからポートに 3022 を指定してログインできるようになっていれば変更作業は完了です。
ssh コマンドを利用する場合は、下記のようなコマンドでログインできるようになっていると思います。

```
$ ssh -p 3022 -i /path/to/portchangetest_private.pem root@${サーバーの IP アドレス}
```

## まとめ

ニフティクラウド上の Ubuntu 16.04 で、セキュリティ向上のために SSH のポートを変更することができました。グローバルに公開されたサーバーで SSH:22 を開放しておくのは危険なので、なるべくポートの変更を実施しておきましょう。