ConohaVPSでAlmaLinux9.3を構築する。part2

ConohaVPSでAlmaLinux9.3を構築する。part2です。

# 目次
1\. パッケージのアップデート(おまじない)
2\. ユーザの作成
3\. 鍵作成
4\. Conohaセキュリティグループの設定
5\. SSHセキュリティの設定
6\. SSH接続


## 0\. 事前作業
Conohaのコンソールを立ち上げること。
rootでログインできること。

## 1\. パッケージのアップデート(おまじない)
インストール済みのパッケージをすべて最新のバージョンにアップデートするコマンド
```
$ sudo dnf upgrade
```

## 2\. ユーザの作成
今回は例として、<font color="rgb(107, 142, 35)">**green**</font>というユーザを用いて説明します。
なので、greenという部分には自分が作成したい「任意のユーザ名」を入力してください。
新規ユーザを作成。
```
$ useradd green
```
新規ユーザのパスワードを設定する。
※入力中のパスワードは、ターミナルには表示されません。
2回問題なく入力できれば「passwd: all authentication tokens updated successfully.」が表示され、正しくパスワードが設定されます。
```
$ passwd green
Changing password for testuser.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
```

ユーザが正しく作成できているか確認する。

```
#ユーザ切り替え
$ su - green

#現在のユーザがgreenであることを確認する
$ whoami

#greenからログアウトする
$ exit

#現在のユーザがrootであることを確認する
$ whoami
```


## 3\. 鍵作成
前知識として鍵を作成するパターンは2つある。

#### ・サーバ側の秘密鍵をクライアント側に配布するパターン（この記事内では採用しません。）
クライアント側の作業者が多く、一人ずつ公開鍵を回収することが困難になる場合

#### ・クライアント側で作成した公開鍵をサーバ側に転送するパターン<font color="red">**(採用)**</font>
セキュリティ上、秘密鍵を配布していないのでこちらが安全。

ということで、鍵の準備を行う。

#### 【サーバ側作業：AlmaLinux】
```
#新規ユーザに切り替える。su - <新規ユーザ>
$ su - green

#現在のディレクトリが「/home/green」であることを確認する。
$ pwd

#.sshディレクトを作成
$ mkdir .ssh

#.sshディレクトリに移動する
$ cd .ssh

#現在いるディレクトリが「/home/green/.ssh」であることを確認する。
$ pwd

#authorized_keys(公開鍵を登録する)ファイルを作成
$ touch authorized_keys

#.sshディレクトの権限を変更
$ chmod 700 /home/green/.ssh

#authorized_keysの権限を変更
$ chmod 600 /.ssh/authorized_keys

#ファイルの所有者とグループを同時に変更する
# -R はディレクトリ内のファイルも変更する
$ chown -R green:green /home/green/.ssh
```

#### 【クライアント側作業：Windows】
今回クライアント側はwindows想定で鍵を作成していきます。
windows + R を押下後、「cmd」と入力してEnter
そうするとコマンドプロンプトが立ち上がるので、以下のコマンドを実行
```
$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\hoge/.ssh/id_ed25519):（入力せずにEnter）
Enter passphrase (empty for no passphrase):（入力せずにEnter）
Enter same passphrase again:（入力せずにEnter）
Your identification has been saved in C:\Users\hoge/.ssh/id_ed25519.(秘密鍵)
Your public key has been saved in C:\Users\hoge/.ssh/id_ed25519.pub.(公開鍵)
The key fingerprint is:
SHA256:xxxxxx/xxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxx hoge@DESKTOP
The key's randomart image is:
+--[ED25519 256]--+
|  ...+o=.        |
|   +oo+oo        |
| o .+xo o    o   |
| oooo oo.        |
| ..+.o. S .      |
| o*o.o.. o       |
|.++.*S+   oo     |
|.o=E.So      o   |
|SoSSSSS          |
+----[SHA256]-----+
```
コマンドを実行後、以下の部分に公開鍵が作成されるのでファイルを開く。
Your public key has been saved in C:\Users\hoge/.ssh/id_ed25519.pub.
「C:\Users\hoge/.ssh/id_ed25519.pub.」

ファイルを開くと、
ssh-ed25519 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx hoge@DESKTOP
と記載しているのでコピーする。

#### 【サーバ側作業：AlmaLinux】
```
#ユーザ切り替え
$ su - green

#viエディタを開く
$ vi .ssh/authorized_keys

#[Shift+i]を押してINSERTモードに変更する。

#Conohaコンソールの「テキスト送信」を押下後、
#クライアント側(windows)で作成した公開鍵を貼り付けて送信する。

ssh-ed25519 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx hoge@DESKTOP

#[ESC]を押す。
#[:wq]←を入力。

#正しく入力できているか確認
$ cat .ssh/authorized_keys
ssh-ed25519 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx hoge@DESKTOP
```

ここまで終了したら一度、サーバを停止する。
```
#サーバ停止
shutdown
```

## 4\. Conohaセキュリティグループの設定
SSHのポート番号に設定できる範囲は[1～65535]まで可能だが、ウェルノウンポートは避けるため、1～1023以外のポート番号を設定する。
※ウェルノウンポートとは、特定のサービスやプロトコルで既に予約されているポートのこと。

この記事では、SSHのポート番号は「23320」を設定する。
実際、この時点でセキュリティグループの標準に「IPv4v6-SSH」が追加されていれば接続は可能だが、
標準ポートは攻撃される恐れがあるため、基本避けるべき。
SSHの標準ポートは22番です。

サイドバーから「セキュリティ」→「セキュリティグループ」を押す。
「＋セキュリティグループ」を押す。
![スクリーンショット (30).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984034/12d48917-cf99-70bf-abe2-f9cc05b7db38.png)

以下のように設定する。
説明には、自分がわかるように内容を記載しておけばOK
![スクリーンショット (31).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984034/f725dec3-dd75-06a1-44a0-e33d3a0be0b9.png)


サイドバーから「サーバ」→「(自分のサーバネームタグ)」を押す。
「ネットワーク情報」を押す。
先ほど追加したセキュリティグループ(IPv4v6-SSH_(変更))を追加する。
同時に、標準の「IPv4v6-SSH」を削除する。
保存を押す。

![スクリーンショット (32).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984034/def6393c-5c8a-c2ac-885d-1fa6384d971e.png)

## 5\. SSHセキュリティの設定
サーバを起動し、Conohaコンソールを開く。
rootでログインする。

### 【sshd_configの設定】
sshの設定は「/etc/ssh/sshd_config」で行っているため、修正していく。

```
#rootに変更
$ su -
Password:(任意のパスワードです。入力中の文字は表示されません)

#rootであることを確認
$ whoami
/root

#ルートディレクトリに移動
$ cd ..

#現在のディレクトリがルートディレクトリであることを確認する。
$ pwd
/

#sshディレクトリに移動する。
$ cd /etc/ssh

#sshd_config設定ファイルのバックアップを取る。
$ cp sshd_config sshd_config.bak

#sshd_configを修正する。
$ vi sshd_config

#コメントアウトを外す。
#ポート番号の変更
#Port 22
Port 23320

#コメントアウトを外す。
#rootログインを拒否
#PermitRootLogin prohibit-password
PermitRootLogin no

#コメントアウトを外す。
#公開鍵認証を許可する。
#PubkeyAuthentication no
PubkeyAuthentication yes

#コメントアウトを外す。
#パスワード認証を拒否する。
#PasswordAuthentication yes
PasswordAuthentication no

#[ESC]を押す。
#[:wq]を入力後、Enter
```

sshサービスを再起動する。
```
#sshサービスの再起動
$ systemctl restart sshd
```
### 【SELinuxの設定】


```
#SELinuxの動作モードを確認
$ getenforce
```
Disabledの場合、SELinuxが無効状態となっているため起動する。
```
#SELinuxを有効にする。

#現在のディレクトリがrootホームディレクトリであることを確認する。
$ cd
/root

#現在のディレクトリがルートディレクトリであることを確認する。
$ cd ..
/

#ルートディレクトリからselinuxの設定ファイルがあるディレクトリへ移動する。
$ /etc/selinux/

#config設定ファイルのバックアップを取る。
$ cp config config.bak

#viモードで修正する。
$ vi config

SELINUX=disabled(変更前)
SELINUX=enforcing(変更後)

#[ESC]を押す。
#[:wq]を入力後、Enter
```

semanageコマンドでポートを許可する。
```
#SELinuxで許可するSSHポートを確認
$ semanage port -l | grep ssh
ssh_port_t                     tcp      22

#23320を許可する
$ semanage port -a -t ssh_port_t -p tcp 23320

#23320が追加されていればOK
$ semanage port -l | grep ssh
ssh_port_t                     tcp      23320,22
```

### 【Firewallの設定】

```
#Firewallの起動状態を確認
$ systemctl status firewalld
Active: active (running) 

#Firewallが無効化(stop)の場合
$ systemctl start firewalld

#Firewallの設定を確認
$ firewall-cmd --list-all
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

#Firewallの設定を確認
$ firewall-cmd --add-port=23320/tcp --permanent --zone=public
success

#Firewallの設定をリロード
$ firewall-cmd --reload

#Firewallの設定をもう一度確認し、portに23320が追加されていることを確認する。
$ firewall-cmd --list-all
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 23320/tcp
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
```
ここまでの設定が完了すれば、サーバ側の設定は終了。

## 6\. SSH接続
最後にSSH接続をする。
#### 【クライアント側作業：Windows】

【秘密鍵の場所】
以下のコマンドを入力時に記載されていたディレクト場所
ssh-keygen -t ed25519
Your identification has been saved in C:\Users\hoge/.ssh/id_ed25519.(秘密鍵)
→C:\Users\hoge/.ssh/id_ed25519(秘密鍵があるパス)

【ConohaIPアドレス】
以下参照
赤枠で塗り潰している部分がサーバのIPアドレスです。
![スクリーンショット (33).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984034/058806c5-64f2-16b0-ad2c-ea1bf9ed9c8d.png)


コマンドプロンプトを立ち上げて以下のコマンドを実行する。
```
#ssh [作成したユーザ名]@[サーバのIPアドレス] -p [ポート番号]
$ ssh green@XXX.XXX.XXXX.XXX -p 23320
The authenticity of host '[XXX.XXX.XXXX.XXX]:23320 ([XXX.XXX.XXXX.XXX]:23320)' can't be established.
ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes(←yesを入力)
Warning: Permanently added '[XXX.XXX.XXXX.XXX]:23320' (ECDSA) to the list of known hosts.
Last login: Sun Mar 31 04:08:47 2024 from XXX.XXX.XXXX.XXX
[green@xxxxx ~]$
```
ssh接続できれば完了です。

正直、コマンドプロンプトでSSH接続をして使用する人はあまりいないような気がする。
TeraTermとか使用できればいいかも。
(気が向いたら修正してのせる)