ConoHaでVPSを借りたので最初にやったこと

# はじめに

自宅にサーバを設置できないのでConoHaでVPSを借りました。
安さが決め手でした！
今回は安全に接続するため公開鍵でsshできるよう設定しました。

## できるようになること

下記のコマンドだけでVPSにセキュアに簡単に接続できる。

```shell: 
ssh ホスト名
```

## 対象読者

- 初めてVPS借りる人
- 初めてパブリックな環境にサーバを立てる人

## 環境

- VPS側ゲストOS：CentOS8
- sshクライアント側OS：Ubuntu18.04.4 LTS (Bionic Beaver) ※WSL

# やったこと

ざっくり下記の順番で進めていきます。

1. sudo権限のユーザをつくる
2. rootでsshできないようにする
3. 公開鍵認証のみでsshできるようにする
4. sshで利用するポート番号を変更する

## sudo権限のユーザをつくる

VPS側のコンソールで操作します。
まずsudoの際にパスワードを入れなくていいように設定します。

```shell:
visudo
#下記の部分がコメントアウトされているため外す
%wheel        ALL=(ALL)       NOPASSWD: ALL
```

任意のユーザを追加する。（例としてadminでやります）

```shell:
useradd -m admin
```

パスワード設定

```shell: 
passwd admin
```

sudoのグループに設定する。

```shell: 
usermod -aG wheel admin
```

adminからパスワードなしでユーザ変更（su）するため、/etc/pam.d/suを編集する。

```shell:
sudo vim /etc/pam.d/su
#下記の部分がコメントアウトされているため外す
auth            sufficient      pam_wheel.so trust use_uid
```

ユーザ変更できるか試す。

```shell: 
su - admin
su -
```

ユーザ変更できる。

## rootでsshできないようにする

一応本作業前にそもそもクライアント側からsshできるか確認する。

```shell: 
ssh -l admin IPアドレス
```

rootでログインできないように設定する。

```shell: 
sudo vim /etc/ssh/sshd_config
#yesをコメントアウトnoを追記
#PermitRootLogin yes
PermitRootLogin no
```

設定を反映する。

```shell: 
sudo systemctl restart sshd
```

これでrootでは接続できなくなった。これからは作成したユーザのadminで接続する。

## 公開鍵認証のみでsshできるようにする

sshクライアント側で鍵を生成する。

```shell: 
cd ~/.ssh #なければ作成する
ssh-keygen -t rsa -f ホスト名　#パスワード設定は任意
```

鍵がある場所にて鍵に対して権限設定する。

```shell: 
chmod 600 ホスト名
```

生成した鍵をVPS側に転送する。

```shell: 
ssh-copy-id -i ~/.ssh/ホスト名.pub admin@IPアドレス
```

sshの設定ファイルを記述する。

```shell: 
sudo vim ~/.ssh/config
#下記設定を追記
Host ホスト名
  Hostname IPアドレス
  User admin
  IdentityFile ~/.ssh/ホスト名
  Port 22
```

VPS側でパスワード認証を許可しないように設定する。

```shell: 
sudo vim /etc/ssh/sshd_config
#yesをコメントアウトnoを追記
#　PasswordAuthentication yes
PasswordAuthentication no
```

設定を反映する。

```shell: 
sudo systemctl restart sshd
```

sshで接続してみる。

```shell: 
ssh ホスト名
```

## sshで利用するポート番号を変更する

デフォルトの22のままにしておくと攻撃されやすいため、VPS側ゲストOSおよびsshクライアント側のssh設定ファイルを変更しPortを他で利用のない任意の値に変える。
まずはsshクライアント側のssh設定ファイルを変更する。

```shell: 
sudo vim ~/.ssh/config
Host ホスト名
  Hostname IPアドレス
  User admin
  IdentityFile ~/.ssh/ホスト名
  Port 52222
```

次にVPS側ゲストOSの設定を変更する。
firewalldサービスにてsshは22で受信するよう制御されている。

```shell: 
cat /usr/lib/firewalld/services/ssh.xml
<?xml version="1.0" encoding="utf-8"?>
  <service>
    <short>SSH</short>
    <description>Secure Shell (SSH) is a protocol ...</description>
    <port protocol="tcp" port="22"/>
</service>
```

よって52222で受信するよう変更する。
変更する際には下記のようなルールがあるそうです。

> CentOS 7 の firewalld では、/usr/lib/firewalld/ はシステムの初期設定を保存しておくディレクトリと位置付けており、ユーザーがカスタマイズした設定は /etc/firewalld/ 内に配置するようにデザインされています。 よって、設定を変更したssh.xml は /etc/firewalld/services/ に設置する必要があります。
> <a href="https://weblabo.oscasierra.net/openssh-sshd-centos7-change-port/">CentOS 7 で sshd のポート番号を変更する方法</a>

```shell: 
cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
vim /etc/firewalld/services/ssh.xml
<?xml version="1.0" encoding="utf-8"?>
  <service>
    <short>SSH</short>
    <description>Secure Shell (SSH) is a protocol ...</description>
    <port protocol="tcp" port="52222"/>
</service>
```

設定を反映する。

```shell: 
firewall-cmd --reload
```

ssh で接続してみる。

```shell: 
ssh ホスト名
```

つながった！！

# おわりに

お疲れさまでした！
sshポート変更時のfirewall設定が苦しみポイントでした・・・
自宅にサーバ置けない人、パブリッククラウドの従量課金制が怖い人にとっては月額低料金で気軽に使えるサービスなので、ぜひ利用してみてください！

# 参考サイト

- <a href="https://weblabo.oscasierra.net/openssh-sshd-centos7-change-port/">CentOS 7 で sshd のポート番号を変更する方法</a>