ConoHa VPSの SSHセキュリティを強化

2022年6月15日

ConoHa VPSにサーバーを追加して、MacのターミナルでSSHログインできるまで。

加えて、SSH接続の公開鍵を作り、セキュリティ強化をします。

ConoHaのVPSは時間単位の料金体系で、ちょっと試しに使ってみたいときに便利。1時間で1円程度でした。

関連記事 Apache系インストール
1.ConoHa VPS のSSHセキュリティを強化する
2.【CentOS stream 9】 Apacheをインストールする
3.【CentOS stream 9】 Maria DBをインストールする
4.【CentOS stream 9】 phpをインストールする
5.【CentOS stream 9】 composerをインストールする
関連記事 Nginx系インストール
1.ConoHa VPS のSSHセキュリティを強化する
2.【CentOS stream 9】 Nginxをインストールする
3.【CentOS stream 9】 Maria DBをインストールする
4.【CentOS stream 9】 phpをインストールする
5.【CentOS stream 9】 Nginxでphp、phpMyAdminを使う
6.【CentOS stream 9】 composerをインストールする
関連記事 ドメイン
ConoHa WING VPS に サブドメインを追加する

ConoHa VPSにサーバー追加

まず、ConoHa VPSにサーバーを追加するところから始めます。

ConoHaのマイページにログインして、

ConoHa VPS サーバー追加
「+追加」をクリック
ConoHa VPS サーバー追加 -2
サービス「VPS」、容量、イメージタイプを選択

この記事執筆時点ではCentOSの最新はStream9ですが、プルダウンより過去のバージョンも選ぶことができます。

ConoHa VPS サーバー追加 -3
rootパスワードを設定、SSH key 「キーを新規作成」「自動生成」の状態で「+追加」をクリック
ConoHa VPS プライベートキーをダウンロード
ダウンロードをクリック

ダウンロードされたファイルを、「/Users/Macユーザー名/.ssh/」フォルダに移動させます。

フォルダの移動
ダウンロードされたファイルを、「/Users/Macユーザー名/.ssh/」フォルダに移動

Macのターミナルを開いて、下記コマンドでファイルの権限を変更します。

sei@MacBook-Pro ~ % chmod 400 ./.ssh/20220522002724.pem

「キーを選択」を選び、生成したパブリックキーを選択、

キーを選択
「キーを選択」
ConoHa VPS テンプレート
「テンプレート」を選択して、SSHログインセキュリティツール「Fail2ban」を自動インストールすることも可能

スタートアップスクリプトにより、SSHログインセキュリティツール「Fail2ban」を自動インストールすることも可能です。このツールはSSHログインに何度も失敗したアクセス元を自動遮断してくれるツールです。

追加を押す
「追加」を押す
「ネームタグ」をクリック
「ネームタグ」をクリック
IPアドレスを確認する

rootユーザーでSSHログイン

Macのターミナルを開いて、上記画面で確認したIPアドレスに

ダウンロードしたパブリックキーを使ってSSH接続し、リモートログインする

sei@MacBook-Pro ~ % ssh root@160.251.100.96 -p 22 -i ./.ssh/20220522002724.pem
The authenticity of host '160.251.100.96 (160.251.100.96)' can't be established.
ED25519 key fingerprint is SHA256:pyafzImDhCysJg6CvdgseOZmRGffon/pqkei0xaZealg.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '160.251.100.96' (ED25519) to the list of known hosts.

一般ユーザーの追加

SSHリモートログイン用の一般ユーザーを追加します。

# useradd sei

追加したユーザーのパスワード設定

# passwd sei
Changing password for user sei.
New password: //パスワード入力
Retype new password://パスワード入力
passwd: all authentication tokens updated successfully.

一般ユーザーを「wheel」グループに所属させる

ConoHaではデフォルトで「wheel」グループに所属している一般ユーザーがsudo利用可

# usermod -G wheel sei

「/etc/pam.d/su」を編集

「wheel」グループのみrootユーザーにスイッチできるようにする

# vi /etc/pam.d/su

コメントを外す

#%PAM-1.0
auth            sufficient      pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth           sufficient      pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
auth           required        pam_wheel.so use_uid
auth            substack        system-auth
auth            include         postlogin
account         sufficient      pam_succeed_if.so uid = 0 use_uid quiet
account         include         system-auth
password        include         system-auth
session         include         system-auth
session         include         postlogin
session         optional        pam_xauth.so

一般ユーザーになれることを確認

# su  sei
$

rootになれることを確認

$ su -
Password://パスワード入力
#

一般ユーザー用のSSH鍵設定

Macのターミナルを開いて、「ssh-keygen」コマンドでSSH鍵を生成する

sei@MacBook-Pro ~ % ssh-keygen -t ecdsa -b 521
Generating public/private ecdsa key pair.
Enter file in which to save the key (/Users/sei/.ssh/id_ecdsa):  ⇦エンター(秘密鍵の保存場所)
Enter passphrase (empty for no passphrase): ⇦エンター
Enter same passphrase again: ⇦エンター
Your identification has been saved in /Users/sei/.ssh/id_ecdsa
Your public key has been saved in /Users/sei/.ssh/id_ecdsa.pub
The key fingerprint is:
SHA256:uQNRwi9/d6HAnPmMi79eTAXTLPsQpDLLayzItG8ucVs sei@MacBook-Pro.local
The key's randomart image is:
+---[ECDSA 521]---+
|     .. .  .+o   |
|      .o   .ooo  |
|      ..oo.o +.  |
|      .o.=* o..  |
|    . .oS  =.+ . |
|   o.o.oEooo= o  |
|    +o.o*o oo.   |
|    ..oo....     |
|     +o  o+.     |
+----[SHA256]-----+

生成場所は「 /Users/Macユーザー名/.ssh/」、

「command + shift + . 」キー同時押しで隠しファイル・フォルダの表示ができます。

生成場所に「id_ecdsa」と「id_ecdsa.pub」ができたことを確認。

サーバーにSSHログインして、追加した一般ユーザーになる

# su sei

サーバー側にSSH鍵を保存するディレクトリ「/home/一般ユーザー名/.ssh/」と、「.ssh/authorized_keys」を作り、権限を変更しておく

$ cd
$ mkdir .ssh
$ ls -la
total 28
drwxr-xr-x  3 sei  sei  4096 Jun  1 06:22 .
drwxr-xr-x. 3 root root 4096 Jun  1 05:54 ..
-rw-------  1 sei  sei   614 Jun  1 06:17 .bash_history
-rw-r--r--  1 sei  sei    18 Aug 10  2021 .bash_logout
-rw-r--r--  1 sei  sei   141 Aug 10  2021 .bash_profile
-rw-r--r--  1 sei  sei   492 Aug 10  2021 .bashrc
drwxrwxr-x  2 sei  sei  4096 Jun  1 06:22 .ssh
$ chmod 700 .ssh/
$ ls -la
total 28
drwxr-xr-x  3 sei  sei  4096 Jun  1 06:22 .
drwxr-xr-x. 3 root root 4096 Jun  1 05:54 ..
-rw-------  1 sei  sei   614 Jun  1 06:17 .bash_history
-rw-r--r--  1 sei  sei    18 Aug 10  2021 .bash_logout
-rw-r--r--  1 sei  sei   141 Aug 10  2021 .bash_profile
-rw-r--r--  1 sei  sei   492 Aug 10  2021 .bashrc
drwx------  2 sei  sei  4096 Jun  1 06:22 .ssh
$ touch .ssh/authorized_keys
$ ls -la .ssh/
total 8
drwx------ 2 sei sei 4096 Jun  1 06:23 .
drwxr-xr-x 3 sei sei 4096 Jun  1 06:22 ..
-rw-rw-r-- 1 sei sei    0 Jun  1 06:23 authorized_keys
$ chmod 600 .ssh/authorized_keys
$ ls -la .ssh/
total 8
drwx------ 2 sei sei 4096 Jun  1 06:23 .
drwxr-xr-x 3 sei sei 4096 Jun  1 06:22 ..
-rw------- 1 sei sei    0 Jun  1 06:23 authorized_keys

Macのターミナルからscpコマンドで、公開鍵「id_ecdsa.pub」をサーバーの「/home/sei/.ssh/」に転送

sei@MacBook-Pro ~ % scp -i ./.ssh/20220522002724.pem ./.ssh/id_ecdsa.pub root@160.251.100.96:/home/sei/.ssh/
id_ecdsa.pub                                  100%  275    11.4KB/s   00:00 

サーバーのターミナルで、届いたか確認

$ ls -la .ssh/
total 12
drwx------ 2 sei  sei  4096 Jun  1 06:23 .
drwxr-xr-x 3 sei  sei  4096 Jun  1 06:22 ..
-rw------- 1 sei  sei     0 Jun  1 06:23 authorized_keys
-rw-r--r-- 1 root root  275 Jun  1 06:23 id_ecdsa.pub

「id_ecdsa.pub」を「authorized_keys」に転記する

$ cd .ssh/
$ cat id_ecdsa.pub >> authorized_keys

Macのターミナルから、生成した秘密鍵「id_ecdsa」を使用して、一般ユーザーでSSHリモートログインできることを確認

sei@MacBook-Pro ~ % ssh sei@160.251.100.96 -i ./.ssh/id_ecdsa           
Last login: Sun May 22 01:44:01 2022
$

SSHのセキュリティ強化

SSHでパスワード認証を禁止する

# cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_20220502
# vi /etc/ssh/sshd_config
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no
#PermitEmptyPasswords no

sshdの設定反映

# systemctl reload sshd

rootでssh接続不可、または公開鍵が必要とする

# vi /etc/ssh/sshd_config

「PermitRootLogin yes」という行があればコメントアウトして「PermitRootLogin no」を挿入

※CentOS Stream 8以前

#LoginGraceTime 2m
#PermitRootLogin yes
PermitRootLogin no #rootでSSH接続不可
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

「#PermitRootLogin prohibit-password」という行があれば、コメントを外し、公開鍵のみ認証するように変更

※CentOS Stream 9以降

#LoginGraceTime 2m
PermitRootLogin prohibit-password #rootで接続する場合公開鍵が必要
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

OpenSSHのバージョンによりコンフィグファイルの内容が異なるらしいが、CentOS stream8 OpenSSH8.0では「PermitRootLogin yes」、CentOS stream9 OpenSSH8.0では「#PermitRootLogin prohibit-password」となっていた。

OpenSSHのバージョンを確認

# ssh -V
OpenSSH_8.0p1, OpenSSL 1.1.1k  FIPS 25 Mar 2021

SSHのポート番号を変更する

sshの設定ファイルを編集

# vi /etc/ssh/sshd_config

「Port 8022」を挿入して保存

#
#Port 22
Port 8022
#AddressFamily any
#ListenAddress 0.0.0.

sshdの再起動

# systemctl reload sshd

Firewallゾーンの確認

# firewall-cmd --get-active-zones
public
  interfaces: eth0

Firewallの設定確認

[root@118-27-103-211 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Firewallの設定に、ポート番号8022を許可する設定を追加する

TCP8022 ポート番号許可

# firewall-cmd --permanent --zone=public --add-port=8022/tcp
success

ssh(デフォルトの22番ポート)を削除

# firewall-cmd --permanent --zone=public --remove-service=ssh
success

Firewallの再起動

# firewall-cmd --reload
success

Firewallの設定確認

services:からsshが消えて、ports:に8022/tcpがあることを確認

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: cockpit dhcpv6-client
  ports: 8022/tcp
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

待ち受け状態確認

[root@118-27-103-211 ~]# ss -tnlp
State    Recv-Q   Send-Q      Local Address:Port        Peer Address:Port   Process
LISTEN   0        128               0.0.0.0:8022            0.0.0.0:*       users:(("sshd",pid=93125,fd=4))
LISTEN   0        128                  [::]:8022               [::]:*       users:(("sshd",pid=93125,fd=5))

ポート番号8022でSSH接続確認

sei@MacBook-Pro ~ % ssh root@160.251.100.96 -i ./.ssh/20220522002724.pem -p 8022

Last login: Sun May 22 04:08:08 2022 from 25.211.20.113
#

SSHの接続元IPアドレスをIPv4 IPv6か限定する

sshの設定ファイルを編集

# vi /etc/ssh/sshd_config

「AddressFamily」のコメント「#」を外し、

「inet」 と追記するとIPv4で待ち受ける

「inet6」と追記するとIPv6で待ち受ける

#Port 22
Port 8022
AddressFamily inet #IPv4だけで待ち受ける
#ListenAddress 0.0.0.0 
#ListenAddress ::
#Port 22
Port 8022
AddressFamily inet6 # IPv6だけで待ち受ける
#ListenAddress 0.0.0.0
#ListenAddress :: 

sshdの再起動

# systemctl reload sshd

待ち受け状態の確認(IPv4の場合)

[root@118-27-103-211 ~]# ss -tnlp
State       Recv-Q       Send-Q             Local Address:Port             Peer Address:Port      Process
LISTEN      0            128                      0.0.0.0:8022                  0.0.0.0:*          users:(("sshd",pid=93780,fd=5))

待ち受け状態の確認(IPv6の場合)

[root@118-27-103-211 ~]# ss -tnlp
State       Recv-Q       Send-Q             Local Address:Port             Peer Address:Port      Process
LISTEN      0            128                         [::]:8022                     [::]:*          users:(("sshd",pid=93774,fd=4))

SSHのKeep Alive設定

SSH接続時に10分ほど放置していると「client_loop: send disconnect: Broken pipe」というメッセージと共に切断されるかと思いますが、

# vi /etc/ssh/sshd_config

107行目付近のコメント「#」を外して、下記のように記述し、

TCPKeepAlive yes #KeepAliveを有効にする
#PermitUserEnvironment no
#Compression delayed
ClientAliveInterval 300 #300秒ごとに応答確認する

sshdの再起動

# systemctl reload sshd

次やること

次やること(WEBサーバーのインストール)
【CentOS stream 9】 Apacheをインストールする
または
【CentOS stream 9】 Nginxをインストールする

参考サイト

ConoHaにApacheを入れる

【ターミナル(Linux,Mac)】scpコマンドでサーバとファイルのやり取りをする

一般ユーザーで公開鍵認証を使用してSSHログインする|ConoHa VPSサポート

公開鍵認証を設定する|ConoHa VPSサポート
第7回:エディタを使ってみる!|ConoHa VPSサポート
コマンドを操作してみよう|ConoHa VPSサポート

VPSCentOS9,SSH

Posted by sei