Ubuntu Server 20.04.3 LTS 構築#17 セキュリティ設定9(SSH接続設定)

実施日:2022/02/20～02/23
更新日:2022/04/29～05/03
< 今回の内容 >
･SSH接続設定

# SSH接続設定

セキュリティ設定もウイルス対策、マルウェア対策とファイヤーウォール設定と進めてきました。
まだまだセキュリティを高めるためにやることはありますが、せまい机の上でモニターやPCを色々置いておくと
作業スペースが狭いのでリモートアクセスで作業できるようにSSH接続を設定します。

･用意するもの
0.サーバーのIPアドレスを固定IPアドレスに変更
1.ファイヤーウォールのポートを開ける(22番ポートの解放)
2.リモート接続するPC(tera term導入済み)
3.ssh接続後のsshの設定ファイルの変更(接続ポート番号の変更)

#0.サーバーのIPアドレスを固定IPアドレスに変更

```
ubuntuのIPアドレスを管理しているの下記のファイル
/etc/netplan/00-installer-config.yaml

このファイルをコピーして、コピーしたファイルの中を編集します。
sudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/99-installer-config.yaml

sudo nano /etc/netplan/99-installer-config.yaml
network:○○
    version: 2
    renderer: networkd
    ethernets:
        enp2s0:
            addresses: [192.168.1.XX/24]
            gateway4: 192.168.1.XX
            nameservers:
                search: []
                addresses: [192.168.1.XX]
※network:の○○は半角スペース2つ分を表しています。
上記の設定値を設定し、反映させようとすると、エラーが表示されました。
調べてみると、半角スペース2つ含める必要があるそうです。

設定した固定IPアドレスを反映させます。
sudo netplan apply

固定IPアドレスになったことを確認します。
ip a

固定IPアドレスの行の下に下記の文言があれば、固定IPアドレスに変更されています。
valid_lft forever preferred_lft forever
```
固定IPアドレスの設定が完了です。

#1.ファイヤーウォールのポートを開ける(22番ポートの解放)
[セキュリティ設定8(ファイヤーウォール設定)](https://qiita.com/art22/items/f18d2a725bb2d0db8d9b)をご参照ください。

#2リモート接続するPC(tera term導入済み)
ポートを開放したので、リモートPCからtera termを立ち上げて接続をします。
宛先をubuntuのIPアドレスを入力し、接続をしますが【アクセスが拒否されました】と表示されます。
サーバー側で状態を確認しました。

```
systemctl status ssh
反応がありません。sshがサーバーに導入されていなかったようです。
```

```
sshを導入する必要があります。
sudo apt install openssh-server
```

```
sshが動作しているか確認します
systemctl status ssh
active(running)と表示がされていますので、動作しています。
```

リモートPCからssh接続をしてみます。ユーザー名とパスワードを入力しブラインパスワードを選択し、OKをクリック。
リモートで接続が出来き、メモリ使用率やCPU温度が表示されていました。

#3.ssh接続後のsshの設定ファイルの変更(接続ポート番号の変更)
22番ポートでssh接続が出来ましたので、セキュリティ面を考慮して、ポートを変更します。

変更するには/etc/ssh/sshd_config内のPortの部分を変更したいポート番号を記述します。

:::note
変更前　\#Port 22
変更後　Port 変更したポート番号
※変更したいポート番号は22番ポート番号を開放したときのコマンドのポート番号部分を書き換えてください。
:::

```
変更後にsshdのサービスを再起動します。
systemctl restart sshd
```

最後にリモートPCから接続が出来れば完了です。

参考にさせて頂きましたサイト様
[Neo's World様](https://neos21.net/blog/2020/09/16-01.html)

# SSH接続出来るクライアントを制限する(2022/04/29追記)
これまではサーバー側のssh接続ポートを任意のものに変更して接続を許可していましたが
これでは接続先のポートを知っていればどのクライアントからも接続が出来てしまいます。
接続できるクライアントを制限してセキュリティを高めます。

< 設定内容 >
･バージョンを「2」のみにする。
･rootログインを許可しない。
･公開鍵認証の有効化

```
/etc/ssh/sshd_config内に下記の設定をします。
･バージョンを「2」のみにする。
Protocol 2
･rootログインを許可しない。
PermitRootLogin no
･公開鍵の作成(クライアント側)
ssh-keygen -t rsa
【id_rsa】と【id_rsa.pub】が作成されます。
【id_rsa.pub】をサーバー側に登録します。
<クライアント側の操作>
cd \鍵の保管先\id_rsa.pubクライアント側の操作
scp -P id_rsa.pub ユーザー名@IPアドレス:/home/ユーザー名/.ssh
<サーバー側の操作>
cat id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

･公開鍵認証の有効化
sudo nano /etc/ssh/sshd_config
#PubkeyAuthentication yes
コメントアウトされているので#を外します。
```

# 認証機能を有効にした状態でSSH接続
上記、設定後にSSH接続をしてみると、エラーになります。
< SSH2秘密鍵の読み込みに失敗しました >と表示されます。

:::note warn
< 原因 >
teraterm上でSSH2秘密鍵の読み込みに失敗しているため、クライアント側での問題。
:::

:::note
< 対応 >
･調べてみると、秘密鍵ファイルの最終行の下に改行をすると解消されるみたいなので実施。
⇒エラー解消されず。
･秘密鍵にパスフレーズがついている。
⇒ssh-keygen -t rsaを実行した際にパスフレーズを登録した記憶がありました。
･パスフレーズの有無を確認。
下記のコマンドで確認しました。
ssh-keygen -yf ~\.ssh\鍵ファイル名
Enterpassfraseと表示されましたので、思い当たるパスフレーズを入力。
秘密鍵ファイルの中身が表示されました。
･パスフレーズの変更
ssh-keygen -f ~\.ssh\id_rsa -p
現在のパスワードを入力し、変更後のパスワードを入力しないで、Enterキーを押下。
< 結果 >
エラー解消
:::

再度、teratermでSSH接続が出来るか確認します。
< 認証に失敗しました。再試行してください。 >と表示されます。

:::note warn
< 原因 >
コマンドプロンプトで同様に接続した確認したところ、permisson deniedと表示されました。
サーバー側でパーミッションを確認したところ、特に問題になるような設定ではありませんでした
:::

:::note
auhorized_keysを削除し、authorized_keysを新たに作成し、パーミッションも変更
それでも、接続が出来ないため鍵を再作成。configファイルもrsa認証のみの設定に変更して
接続が出来るようになりました。
configファイルの公開鍵の読込先の箇所をはじめの頃に弄っていたのも原因かもしれません。
AuthorizedKeysFiles 行の「.ssh/authorized_keys」を「~/.ssh/authorized_keys」にしていたのを
「.ssh/authorized_keys」に修正
:::


以上です。