Ubuntu Weekly Recipe

第751回イマドキのVPSでUbuntuをセキュアに保つ

今回はイマドキのVPSであるKAGOYA CLOUD VPSにUbuntuをセットアップし、セキュアに運用する方法を紹介します。とはいえ他のVPSサービスにもそのまま利用できます。

VPS放浪記

筆者は諸般の事情でKAGOYA CLOUD VPSを借りることにしました。

主に動作させるのはNextcloudサーバーです。一般的なVPSサービスのストレージ容量は(プランにもよりますが)100GB程度で、少なく感じていました。しかしKAGOYA CLOUD VPSは大容量プランと称して200GBや400GBのストレージが割安で使用できます。これはいいなと思って契約しました。

筆者が使用したことのあるVPSサービスはこれで3社目ですが、いずれもOSテンプレートとして最新のUbuntu LTS(今だと22.04 LTS)が用意されています。Ubuntu使いとしてはこれを選択するわけですが、3社ともにデフォルトのままで使用するにはちょっと不安な状態でテンプレート化されているため、ユーザー側で対処したいところです。もちろんISOイメージでUbuntu Serverをセットアップしてもいいのですが、今回それはしません。

KAGOYA CLOUD VPSのよかったところ

KAGOYA CLOUD VPSのよかったところは、前述のとおり大容量プランが用意されていることと、比較的新しいハードウェアを使用しているところです。具体的なCPUのスペックはここでは述べませんが、なんと(本記事の掲載時点で)現行製品です。念のため確認してみたところ、筆者が使用したことのあるVPSのうち1つは発売から10年以上経ったCPUで、もう1つは情報が隠蔽されていました。

OSテンプレートのよくないところ

KAGOYA CLOUD VPSだけでなく少なくとも筆者の知っている限りですが、OSテンプレートのよくないところはrootアカウントが有効になっており、必ず初回はこれでログインしないといけないことです。Ubuntuはrootユーザーが無効になっており、これを使うのはどうにも抵抗があります。なので可能な限り早急にrootユーザーを無効にするのが目標の1つです。

とはいえKAGOYA CLOUD VPSはrootユーザーのログインに秘密鍵が必須(パスワード認証は無効)なので、その点はまだいいのですが。

インスタンス作成

ではセットアップを初めましょう。まずはアカウントを作成し、続けてインスタンスを作成します図1⁠。

図1 KAGOYA CLOUD VPSのOSテンプレートなど
図1

「OSテンプレート」「Ubuntu 22.04 LTS」を選択します。⁠アプリケーションセットアップ」「なし」で、⁠スペック」は、今回は「大容量」「400GB SSD」を選択します。スペックに関しては他のものでも構いません。

「ログイン用認証キー」はキーのファイル名を入力して[1]「ログイン用認証キーを追加」をクリックします。するとOpenSSHの秘密鍵がダウンロードできます。

あと変更すべきなのは「コンソールログインパスワード」です。これはrootのパスワードですが、使う間もなく無効にしてしまうので何でも構いません。

OpenSSHでのログイン

では作成したインスタンスにログインします。前述のとおり秘密鍵を使用してログインする必要がありますので、実行するコマンドは次のとおりです。

$ ssh root@(IPアドレス) -i (ダウンロードした秘密鍵)

ユーザーの作成

rootでログインしたら、何はなくてもまずは普段使用するユーザーを作成します。なお作成するユーザーは例として「ikuya」としますが、任意のユーザー名に変更してください。

# adduser ikuya
# gpasswd -a ikuya sudo

ikuyaユーザーを作成し、sudoコマンドを使えるようにしました。

作成したユーザーでログインする際も公開鍵認証を使用するのが望ましいため、公開鍵をコピーします。

コピーする方法はいくつか考えられます。

  1. ~/.ssh/authorized_keysを手でコピーする
  2. ssh-copy-idコマンドを実行する
  3. ssh-import-idコマンドを実行する

1は原始的な方法であまりおすすめしません。よく使われるのは2ですが、GitHubやLaunchpadに公開鍵を登録している場合は3を使用するのが簡単でしょう。今回は3を行います。

# sudo -i -u ikuya
$ ssh-import-id-gh ikunya

ssh-import-id-ghコマンドは、引数で指定したユーザーのGitHubに登録している公開鍵を取得します。Launchpadの場合はssh-import-id-lpになります。

作成したユーザーでOpenSSHによるリモートログインができることを確認し、sudoコマンドが実行できることを確認してください。ユーザーの作成はここまででおしまいです。

なおデフォルトではOpenSSHのパスワード認証が有効になっていますが、公開鍵認証のみに変更するのがおすすめです。具体的な方法は紹介しませんが、このあたりが不案内であればそもそも「セキュアに保つ」というお題目の達成が不可能ですので、数多ある書籍でマスターしてください。たとえば『Linuxをマスターしたい人のための実践Ubuntu』はオススメです。

不要なユーザーの削除

不要なユーザーといいつつrootユーザーは削除できないため、厳密にはパスワードをオフにします。次のコマンドを実行してください。

$ sudo passwd -l root

あとなぜかubuntuユーザーもいるため、こちらは削除します。

$ sudo deluser ubuntu

ファイアウォールの設定

ファイアウォールは、VPSサービスによってはオプション機能で用意している場合もあります。しかし、UbuntuにはUFWという優れたファイアウォールツールがあるので、これを使用するのがいいでしょう。本連載で最初にUFWを紹介したのは15年前(!)第45回です。この頃からフロントエンドとしてはあまり大きく変わっていないので、この先も長く使えるツールであり続けることでしょう。

とはいえ使い方は非常に簡単です。

  • OpenSSHでのアクセス(ポート22)は制限付きで開放する
  • あとはすべて拒否する

という設定をする場合は以下のコマンドを実行します。

$ sudo ufw limit 22
$ sudo ufw enable

これだけです。limitの意味は第76回をご覧ください。

筆者の個人的な見解としては、OpenSSHによる公開鍵認証を使用し、パスワード認証を使用せず、ポート22を制限付きで開放すれば充分にセキュアな状態を保てると考えています[2]。もちろん、よりセキュアな状態の設定も可能です。

ドメインの設定

ドメイン名でアクセスする場合は、このあたりでドメインを設定するといいでしょう。筆者の機能はVPSの機能を使用しておらず、別のサービスで設定していますので解説は省略します。

VPSサービスにはIPv4だけではなくIPv6のIPアドレスも割り当てられているので、AレコードだけではなくAAAAレコードも登録しましょう。

ミラーサーバーの設定

KAGOYA CLOUD VPSのOSテンプレートにあるUbuntuは、アップデートの取得先がマスターサーバー(http://archive.ubuntu.com/ubuntu/)になっているため、これは変更したほうがいいでしょう。筆者はKDDI Labsのミラーサーバー(http://www.ftp.ne.jp/Linux/packages/ubuntu/archive/)に変更しました。変更方法の紹介は省略します。VimなりgrepなりEmacsなりで/etc/apt/sources.listを編集してください。

自動アップデート

VPSにログインして手動でパッケージのアップデートをするのは手間なので、自動実行するように設定します。Nextcloudサーバーのように自分しか使わない場合(24時間いつでもの使用を担保しなくてもいい場合)は、必要な場合自動的に再起動してくれると便利です。

そのような場合、/etc/apt/apt.conf.d/50unattended-upgradesを以下の差分を参考に変更してください。不要なパッケージは削除し、再起動の必要がある場合は朝5時に実行するような設定です。

--- /etc/apt/apt.conf.d/50unattended-upgrades.orig      2023-01-25 22:02:26.797891680 +0900
+++ /etc/apt/apt.conf.d/50unattended-upgrades   2023-02-04 20:41:21.766881618 +0900
@@ -80,27 +80,27 @@
 
 // Remove unused automatically installed kernel-related packages
 // (kernel images, kernel headers and kernel version locked tools).
-//Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
+Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
 
 // Do automatic removal of newly unused dependencies after the upgrade
-//Unattended-Upgrade::Remove-New-Unused-Dependencies "true";
+Unattended-Upgrade::Remove-New-Unused-Dependencies "true";
 
 // Do automatic removal of unused packages after the upgrade
 // (equivalent to apt-get autoremove)
-//Unattended-Upgrade::Remove-Unused-Dependencies "false";
+Unattended-Upgrade::Remove-Unused-Dependencies "true";
 
 // Automatically reboot *WITHOUT CONFIRMATION* if
 //  the file /var/run/reboot-required is found after the upgrade
-//Unattended-Upgrade::Automatic-Reboot "false";
+Unattended-Upgrade::Automatic-Reboot "true";
 
 // Automatically reboot even if there are users currently logged in
 // when Unattended-Upgrade::Automatic-Reboot is set to true
-//Unattended-Upgrade::Automatic-Reboot-WithUsers "true";
+Unattended-Upgrade::Automatic-Reboot-WithUsers "true";
 
 // If automatic reboot is enabled and needed, reboot at the specific
 // time instead of immediately
 //  Default: "now"
-//Unattended-Upgrade::Automatic-Reboot-Time "02:00";
+Unattended-Upgrade::Automatic-Reboot-Time "05:00";
 
 // Use apt bandwidth limit feature, this example limits the download
 // speed to 70kb/sec

もし再起動したくないとか、5年以上使いたいという場合はUbuntu Pro採用を検討してください。

また最近のUbuntuは第676回で紹介したPhased Update(段階的アップデート)に対応します。

サーバー運用するには、遅らせても構わないアップデートあればトラブル回避のため、遅らせるに越したことはありません。というわけで遅らせます。次のコマンドを実行してください。

$ echo 'APT::Get::Never-Include-Phased-Updates "true";' | sudo tee /etc/apt/apt.conf.d/99-Phased-Updates

終わりに

記事としてはここでおしまいですが、あくまでVPSの準備が整ったというだけであり、サーバーとしての本格利用はここからです。引き続き健闘を祈ります。

おすすめ記事

記事・ニュース一覧