🎩

Vultr VPSにRHEL9をインストールし、最低限のセキュリティ設定をする

2022/07/08に公開

VPSを使いたい用があるが、おなじみのCentOSはサポートを終了している。
なら本家本元RHELだ。

今回は個人利用なら16台まで本番稼働でも無償RHELをConoha VPSにイントールし、最初のセキュリティ設定まで行う。

0. パスワード管理ソフト導入

必須ではないが大推奨する。VPS扱っているとなにかと安全なパスワードが必要になるからだ。私はBitwardenを使っている。
https://bitwarden.com

1. RHELをVultrVPSにインストール

主にこの記事のとおりに進めた。
https://www.nextdoorwith.info/wp/se/infra/vultr-vps-install-rhel8-using-iso-upload-1/

あまり補足することもないが、おおまかな流れを記録する。

1-1. RHEL会員登録

https://www.redhat.com/ja/technologies/linux-platforms/enterprise-linux
言うことはない。

1-2. ISOファイルダウンロード & アップロード

https://developers.redhat.com/products/rhel/download
最新のRHEL9.0をx86_64 Boot版でダウンロードする。
VlturのFAQによると、ISOファイルは下記の場所にアップロードしてくださいとある。
https://www.vultr.com/ja/docs/requirements-for-uploading-an-os-iso-to-vultr/?gspk=dHJveWNsYXJrNzM4Ng&gsxid=wQpnVuVRFBud

Where to Upload ISOs
Upload the custom ISO to a publicly-accessible location. For example:

  • Vultr Object Storage
  • A public web server on a Vultr instance, or elsewhere
  • Dropbox
  • Google Cloud Storage (not Google Drive)

今回はDropBoxにアップロードする。ISOファイルが766MBなので、DropBoxの2GB無料枠を使える。

1-3. VPS契約

RHELのシステム要件を確認する。
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/9/html-single/performing_a_standard_rhel_9_installation/index#system-requirements-reference_installing-RHEL
(RHELは公式ドキュメントが公式で多く和訳されているので、とても助かる。)
最小メモリが1.5GBだが、メモリ1GBでも大丈夫そうな記事もあるので、いったんメモリ1GBの$5/月のプランで契約する。また、怖いので追加で$1払ってAutomaton Backup(自動バックアップ機能)もつけた。

Server ImageのUpload ISOで先ほどのDropBoxの共有URLを入力すれば、ISOのダウンロードが始まる。けっこうすぐに終わる。

VPS名もわかりやすい名前をつけておく。

StatusがRUNになるまで待ち、コンソールを起動。

成功。

1-4. RHELインストール

ほとんどこちらの記事の通り。
https://www.nextdoorwith.info/wp/se/infra/vultr-vps-install-rhel8-using-iso-upload-2/

RedHat Insightsのチェックは外した。(最後のインストールで接続に失敗するし……)
これはログインに成功したところ。ログイン段階でずっとユーザー名にメールアドレスを入力していて20分ハマった。登録時のユーザー名を入れよう。

root設定はいったんパスワードログインOKにしておく。たぶん先に鍵生成とかしておくと、いきなり公開鍵のみで接続できるのかもしれない。わからんけど……。有識者いたら教えてください。

GUIはいらないので、最小限の構成でインストールを開始する。
インストールが完了したら、

先にISOファイルのマウントを削除してから再起動する。

これでRHELのインストール終わり。さっそくセキュリティ設定していく。

2. セキュリティ設定

2-1. SSHログイン

定番はTera Termだが、今回はVSCodeの拡張機能を使ってSSHにログインした。
https://www.server-memo.net/memo/vscode/vscode_ssh.html
VSCode、なんでもできるね。すごいぞ。

2-2. OS言語設定を英語にする

言語が日本語だったが、英語でないとエラー調査が難しくなる(英語で検索できないため)ので、OS言語設定を英語にする。

まずlocalectlで言語設定を確認する。

# localectl
  System Locale: LANG=ja_JP.UTF-8
       VC Keymap: jp106
      X11 Layout: jp,us
     X11 Variant: ,

System LocaleがいわゆるOS言語設定のこと。
ほかはキーボードレイアウト設定なので、これは和文のままにする。

まず現在使える言語を一覧表示。

# localectl list-locales
C.UTF-8
ja_JP.UTF-8

英語は「C」なので、Cに設定する。

# localectl set-locale C

言語設定を即時反映させる。

# source /etc/locale.conf

現在の言語設定を確認する。

# localectl
   System Locale: LANG=C
       VC Keymap: jp106
      X11 Layout: jp,us
     X11 Variant: ,

System Locale(OS言語設定)だけ英語になった。

2-2. デフォルトで入っているdnfアップデート

Rocky Linuxでは、yumもdnfも使える。今回はdnfで進めていく。

# dnf update
Updating Subscription Management repositories.
# 中略
Complete!

2-3. 作業用一般ユーザ作成

rootユーザで作業し続けるのは危ないので、一般ユーザからsudoでroot権限の操作をできるようにしていく。まずは一般ユーザを作成する。

2-3-1. ユーザ追加

[root@** ~]# useradd hitoshiro

2-3-2. パスワード設定

# passwd hitoshiro
Changing password for user hitoshiro.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

2-3-3. sudo有効

wheelグループに対するsudo設定の有効化
一般ユーザでsudoコマンドが使えるように設定していく。
先ほど作成したユーザーを「wheel」グループに追加し、sudoコマンドが使えるようにする。
※wheelグループ:sudoコマンドでroot権限を実行するための特別なグループ

su
Password: #rootパスワードを入力

usermod -G wheel hitoshiro # ユーザをwheelグループに追加

試しにsudo id してみ……

$ sudo id

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for hitoshiro:

ローカル・システム・アドミニストレータからの通常のレクチャーをお受けになったことと思います。
お決まりのお説教を受けたことでしょう。それは通常、次の3つのことに集約されます。

#1) 他人のプライバシーを尊重すること。
#2) タイプする前に考えなさい。
#3) 大きな力には大きな責任が伴う。

やかましいありがたいお言葉ですね。

2-4. 公開鍵認証使ったログイン設定

2-4-1. SSH接続

おおむねこの記事のとおりに公開鍵リストを作成する。
https://qiita.com/nlog2n2/items/1d1358f6913249f3e186

鍵ペアはed25519で生成した。

PS C:\Users\user> ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\user/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
# 略

VSCodeのconfigを変更し、SSH接続のユーザのみにする。

Host TRPG-Developing-VPS
    HostName # IPアドレス
    User hitoshiro # 作業用一般ユーザ
    IdentityFile C:\Users\user\.ssh\id_ed25519 # 秘密鍵のパス

あとはexitしてもう一度接続し、成功していたらOK。

2-5. sshd_configをいじる

  • SSHでroot アカウントでのログインを許可しない
  • パスワード認証を許可しない
  • SSH接続用ポート番号の変更

さくらVPSの解説そのままなので省略。
もうVSCodeから直書きはできないので、おとなしくsudo viする。

2-9. ファイアウォール有効化

CentOSでは定番のFirewalld。もちろんRHELにも同じようにある。
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/using-and-configuring-firewalld_configuring-and-managing-networking

手順もCentOSと変わらないので、やはりさくらVPSの解説を参考に進める。

……と思ったが、ここでまったく開通せずにハマりまくる。
そもそもsystemctl restart sshd.serviceができない。怒られる。

Job for sshd.service failed because the control process exited with error code. See "sytemctl status sshd.service" and "journalctl -xe" for details.

journal見ろと怒られたので、見る。

ナントカカントカ sshd[XXXXX]: error: Bind to port YYYYY(開けたいポート) on 0.0.0.0 failed: Permission denied.

は~~~~~パーミッション??????
とりあえず検索すると、似たようなことでハマる人がいた。

https://stackoverflow.com/questions/11672525/centos-6-3-ssh-bind-to-port-xxx-on-0-0-0-0-failed-permission-denied

そして、どうやらREHLにもインストールされているSELinuxは、デフォルトではsshdを別ポートで実行することを許可しないらしい。ええ~~~~。

ということでこの記事を参考に設定し直す。先人たちありがとう。
https://weblabo.oscasierra.net/openssh-sshd-centos7-change-port/

すると無事に開通。
SELinuxは面倒なので無効化する向きもあるようだが、堅牢なセキュリティのためには存続させておきたい。自分ど素人ですし。

2-10. ログ監視ツール導入

長くなったので別記事にした。
https://zenn.dev/hitoshiro/articles/6100d8bc2851bb

Discussion