Vultr VPSにRHEL9をインストールし、最低限のセキュリティ設定をする
VPSを使いたい用があるが、おなじみのCentOSはサポートを終了している。
なら本家本元RHELだ。
今回は個人利用なら16台まで本番稼働でも無償のRHELをConoha VPSにイントールし、最初のセキュリティ設定まで行う。
0. パスワード管理ソフト導入
必須ではないが大推奨する。VPS扱っているとなにかと安全なパスワードが必要になるからだ。私はBitwardenを使っている。
1. RHELをVultrVPSにインストール
主にこの記事のとおりに進めた。
あまり補足することもないが、おおまかな流れを記録する。
1-1. RHEL会員登録
言うことはない。
1-2. ISOファイルダウンロード & アップロード
VlturのFAQによると、ISOファイルは下記の場所にアップロードしてくださいとある。
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のシステム要件を確認する。
最小メモリが1.5GBだが、メモリ1GBでも大丈夫そうな記事もあるので、いったんメモリ1GBの$5/月のプランで契約する。また、怖いので追加で$1払ってAutomaton Backup(自動バックアップ機能)もつけた。
Server ImageのUpload ISOで先ほどのDropBoxの共有URLを入力すれば、ISOのダウンロードが始まる。けっこうすぐに終わる。
VPS名もわかりやすい名前をつけておく。
StatusがRUNになるまで待ち、コンソールを起動。
成功。
1-4. RHELインストール
ほとんどこちらの記事の通り。
RedHat Insightsのチェックは外した。(最後のインストールで接続に失敗するし……)
これはログインに成功したところ。ログイン段階でずっとユーザー名にメールアドレスを入力していて20分ハマった。登録時のユーザー名を入れよう。
root設定はいったんパスワードログインOKにしておく。たぶん先に鍵生成とかしておくと、いきなり公開鍵のみで接続できるのかもしれない。わからんけど……。有識者いたら教えてください。
GUIはいらないので、最小限の構成でインストールを開始する。
インストールが完了したら、
先にISOファイルのマウントを削除してから再起動する。
これでRHELのインストール終わり。さっそくセキュリティ設定していく。
2. セキュリティ設定
2-1. SSHログイン
定番はTera Termだが、今回はVSCodeの拡張機能を使ってSSHにログインした。
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接続
おおむねこの記事のとおりに公開鍵リストを作成する。
鍵ペアは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にも同じようにある。
手順も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.
は~~~~~パーミッション??????
とりあえず検索すると、似たようなことでハマる人がいた。
そして、どうやらREHLにもインストールされているSELinuxは、デフォルトではsshdを別ポートで実行することを許可しないらしい。ええ~~~~。
ということでこの記事を参考に設定し直す。先人たちありがとう。
すると無事に開通。
SELinuxは面倒なので無効化する向きもあるようだが、堅牢なセキュリティのためには存続させておきたい。自分ど素人ですし。
2-10. ログ監視ツール導入
長くなったので別記事にした。
Discussion