ConoHa VPSで行ったセキュリティ設定 (rootログイン禁止・ポート変更)

#あらすじ
ConoHa VPSに登録
SSH接続できたことを確認

ConoHaVPS過去記事
https://qiita.com/kkabosu386/items/94e560d9c68f3f4b35c8

##作業用ユーザ作成
rootでログインできてしまうとセキュリティ的に問題があります。
そのため、rootに変わる作業用ユーザを作成していきます。

まずは前回同様ssh接続していきます。

```terminal:Terminal
$ ssh root@ipアドレス
```

vpsにログインできたら、作業用ユーザを追加していきます。
「kabosu」という部分は、お好きな名前に変更してください。
なお今回もパスワード入力時に、画面上に入力した文字は表示されないので注意が必要です。

```
# useradd kabosu
# passwd kabosu
ユーザー kabosu のパスワードを変更。
新しいパスワード: #任意のパスワードを入力
新しいパスワードを再入力してください: #任意のパスワード入力
```

これで、ユーザkabosuというユーザが作成できました。
しかし、このままではkabosuでログインした際、sudo(管理者権限で実行)がつかえません。

そのため、以下のコマンドを実行します。

```
# usermod -G wheel kabosu
```
usermod:ユーザの情報を変更するコマンド
-G: ユーザが所属するセカンダリーグループを変更
wheel: グループの一つ。このグループに属すると管理者権限で実行できる。つまり、sudoが使えるようになる。

上記のコマンドにより、kabosuがsudoを実行できるようになりました。

ここで、作成したユーザでログインできるか確認してみましょう。

```
$ ssh kabosu@ipアドレス
```
設定したパスワードを入力し、下記のようにログインできていればOKです。

```
[kabosu@ipアドレス ~]$
```

これまではrootでログインしてきましたが、kabosuが管理者(root)権限でコマンドを実行するには、先頭に```sudo```をつける必要があります。基本的に、

```
$ 一般の権限で実行できるコマンド
# root権限で実行するコマンド
```

といった感じで記載しておりますので、以降の作業を作業ユーザ(私の場合kabosu)で行う場合は、

```
sudo [root権限(#)で実行したいコマンド]
```

という形で実行してください。

##rootユーザのログイン禁止

続いて、rootでのログインを禁止していきます。
大切なConfigファイルをいじるので、一度バックアップをとります。

```
# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.20201125
```
```# cp コピー元パス コピー先パス```
で、 コピーが可能です。
ファイル名の末尾に編集日の日付をつけておくと、いつのバックアップかわかりますね。

ここで、コピー元の /etc/ssh/sshd_configを編集していきます。
vimの使い方は下記URLをご参照ください。
https://qiita.com/JpnLavender/items/fabcc79b4ab0d52e1f6d

```
# vim /etc/ssh/sshd_config
```

下記を追加していきます。

```vim:/etc/ssh/sshd_config
PermitRootLogin no
```
場所はどこでもいいのですが、自分の場合47行目あたりに
```#PermitRootLogin yes```
があったので、その下に追加しました。
行数は、vimの```:set number```で確認可能です。

vimを抜けたら、ちゃんと編集ができたか確認します。

```
# diff /etc/ssh/sshd_config /etc/ssh/sshd_config.20201125
< PermitRootLogin no
```
diff:二つのファイルを比較して、差分を出力してくれます。

この時点では、設定が反映されていないので、sshdを再起動します。

*※root以外の作業ユーザ(私の場合kabosu)でログインできることを確認してからにしましょう！！誰もログインできなくなったらかなり厄介です…
(もしそうなった場合は、VPSの管理画面からログインして設定し直す必要がありますが、今回は割愛します。)*

```
# systemctl restart sshd 
```

改めて、別ウィンドウからTerminalを開き、rootでログインを試みましょう。

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

ログインできなくなっていたら、成功です。

##ポート番号の変更
デフォルトのsshdは22番ポートを使用する設定になっています。
しかし、デフォルトのままだと22番ポートからの侵入を目的とした攻撃を受けやすくなってしまいます。

他のセキュリティ対策を行っていれば、そこまで重要度が高いわけではありません。
しかし、攻撃への対処(認証)でCPUに負荷をかかるのを防ぐ点でもメリットがあります。

今回は、22番の代わりに22222番ポートを使用する設定にしていきます。

###firewall(ポート開放)
まず、ファイアウォールの状態を確認します。

```
# systemctl status firewalld
firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor p>
   Active: active (running) since Sat 2020-10-31 21:39:44 JST; 3 weeks 3 days a>
     Docs: man:firewalld(1)
 Main PID: 15088 (firewalld)
    Tasks: 3 (limit: 5048)
   Memory: 20.7M
   CGroup: /system.slice/firewalld.service
           └─15088 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork>
# firewall-cmd --list-port
22/tcp
```
1つ目のコマンドでは、緑の字で`Active: active (running)`みたいに書いてあれば起動してい流ことが確認できます。起動していない場合は下記コマンドを実行しましょう。

```
# systemctl start firewalld
```
2つ目のコマンドで、`ports: 22/tcp`と書いてありますが、firewall上で22番ポートが開放されているという意味です。
つまり、22番ポート以外を使って通信しようとすると、ブロックされてしまいます。

まずは、下記コマンドで、22222番ポートを開放します。さらにfirewallの設定を反映させます。最後に、開放されたか確認します。

```
# firewall-cmd --add-port=22222/tcp --zone=public --permanent
# firewall-cmd --reload
# firewall-cmd --list-port
```

`ports: 22/tcp 22222/tcp`のように表示されていればOKです。

22222番ポートでも通信が可能になったので、ssh接続を22番から、22222番ポートに変更する設定をしていきます。

ファイル編集時は、バックアップを忘れずに。

```
# cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.20201125
# vim /etc/ssh/sshd_config
```

```vim:/etc/ssh/sshd_config
#Port22    #ポート22をコメントアウトしつつ
Port22222 #ポート22222で接続するよう設定します。
```

もう一つ、ssh.xmlファイルを編集するのですが、今回は代わりに、
ssh-22222.xmlを作って、そちらを読み込ませるようにします。

```
# cp -p /usr/lib/firewalld/services/ssh.xml /usr/lib/firewalld/services/ssh-22222.xml
# vim /usr/lib/firewalld/services/ssh-22222.xml
```

`<port protocol="tcp" port="22"/>`部分を以下に書き換えます。

```vim:/usr/lib/firewalld/services/ssh-22222.xml
<port protocol="tcp" port="22222"/>
```

firewallにssh-22222.xmlを読み込ませます。

```
# firewall-cmd --add-service=ssh-22222 --zone=public --permanent
# firewall-cmd --reload
# firewall-cmd --list-services
ssh ssh-22222
```

###SELinux(ポート開放)
最後に、SELinuxの設定をします。
SELinuxも、セキュリティとして機能しているので、firewall同様ポート開放してあげる必要があります。

```
# dnf install -y policycoreutils-python-utils
# semanage port -a -t ssh_port_t -p tcp 22222
# semanage port --list | grep ssh
ssh_port_t                    tcp      22222, 22
```

最後に、sshdを再起動します。

```
# systemctl restart sshd
```

###接続テスト

22222番ポートから接続できるかテストしたいのですが、これまで作業してきたターミナルは閉じず、新しいものを開いて、そちらから接続確認をしてください。

```terminal:Terminal
$ ssh -p 22222 kabosu@ipアドレス
```

これで通常通り接続ができれば、問題ありません。
最後に、firewallの22番ポートを閉じていきます。

###後片付け(ポート22を閉じる)
無事ポートの変更ができたので、使用しない22番ポートは閉じておきます。

```
# firewall-cmd --permanent --remove-service=ssh
```

なお、SELinuxはデフォルトの22番ポートを閉じることはできないようです。
とりあえず、ここまででセキュリティ対策は完了です。

##まとめ
アプリを公開と謳っておきながら、全然辿り着けてませんね。
しかし、グローバルに公開する以上、これだけでもまだ足りないぐらいなのではないでしょうか。

##次回：Dockerインストール
CentOS8にDockerをインストールしていきます。
実は、CentOS8へのインストールは推奨されていないようです。
そのため、まだOSが選べる段階の方は、CentOS7系を選択することをお勧めします。
私は愚かなことに、よくみないで8系を選んでしまいました。そのため、説明はCentOS8で引き続き行います。

次回：準備中
前回:https://qiita.com/kkabosu386/items/94e560d9c68f3f4b35c8



#参考・引用
http://blog.azumakuniyuki.org/2011/05/sshd-port-number-should-be-changed-to.html
https://qiita.com/picor/items/8823ecef51bf2aff327c
https://www.atmarkit.co.jp/ait/articles/1612/14/news022.html
https://qiita.com/picor/items/8823ecef51bf2aff327c
https://chibashi.me/development/centos8-ssh-2004/
https://blog.potproject.net/2020/03/25/centos8-docker-ce