概要
XServer VPSにCentOS Stream 9をインストールし、Djangoサイトを公開する前に必要となるVPS、DNS、SSHの初期設定を整理する。
この段階では、管理者だけが安全にサーバーへ接続できることと、独自ドメインがVPSのIPアドレスを参照することを確認する。NginxやDjangoを導入する前に、接続経路と名前解決の土台を整えておくことが重要となる。
この記事はCentOS Stream 9での構築記録をもとにしている。CentOS Stream 9のサポート終了予定日は2027年5月31日のため、新たに構築する場合は利用時点でサポート中のOSかを確認すること。
前提環境
- VPS
XServer VPS - OS
CentOS Stream 9(サポート終了予定日:2027年5月31日) - 独自ドメイン
example.com - VPSのグローバルIPアドレス
203.0.113.10(文書用の例示アドレス) - 管理用ユーザー
vpsuser - 管理端末
OpenSSHのクライアントコマンドを利用できる端末
この記事で扱うこと
- XServer VPSのパケットフィルターによるSSH接続元の制限。
- sudoを利用できる一般ユーザーの作成。
- Ed25519鍵の作成、公開鍵の登録、接続確認。
- rootログインとパスワード認証を無効化する安全な手順。
- firewalldの基本設定と、独自ドメインのDNS設定。
作業時の注意点
- SSH設定の変更順序
一般ユーザーの公開鍵認証を別のターミナルで確認してから、rootログインとパスワード認証を無効化する。確認中の接続は、新しい接続に成功するまで閉じない。 - 秘密鍵の管理
秘密鍵は管理端末だけに保存し、VPSや第三者へ渡さない。VPSへ登録するのは公開鍵だけとする。 - SSH接続元の制限
パケットフィルターには管理端末の現在のグローバルIPアドレスを指定する。固定IPでない場合は、回線変更によるアドレスの変化に注意する。 - ホスト鍵の確認
初回接続時のフィンガープリントを無条件に承認せず、XServer VPSのコンソールから確認した値と照合する。 - DNS設定の反映
ネームサーバーやDNSレコードの変更はすぐに反映されない場合がある。設定値とTTLを確認し、時間をおいて再確認する。
実施内容
VPSとOSの確認
-
CentOS Stream 9のインストールとコンソール確認
XServer VPSのVPSパネルからCentOS Stream 9をインストールする。作業を始める前に、VPSパネルのコンソールからログインできることも確認しておく。SSH設定やファイアウォールを誤った場合に、コンソールが復旧経路となる。 -
OSとCPUアーキテクチャを確認
SSHで接続した後、OSとCPUアーキテクチャを確認する。cat /etc/centos-release uname -m表示されたOSが想定と異なる場合は、以降のパッケージ名や設定ファイルをそのまま適用せず、利用中のOSの公式ドキュメントを確認する。
XServer VPSのパケットフィルターでSSH接続元を制限
-
SSH用のルールを追加
XServer VPSのVPSパネルでパケットフィルターを有効にし、SSH用のルールを追加する。プロトコル: TCP ポート番号: 22 許可する送信元IPアドレス: 管理端末のグローバルIPアドレス/32/32は、指定した一つのIPv4アドレスだけを許可する指定となる。設定後は、許可した回線からSSH接続できることを確認する。管理端末のIPアドレスが変わった場合は、VPSパネルから許可する送信元を更新する。
一般ユーザーの作成
-
rootで初回接続
初回だけrootでVPSへ接続する。ssh root@203.0.113.10 -
ホスト鍵のフィンガープリントを照合
初回接続時に表示されるホスト鍵のフィンガープリントは、VPSパネルのコンソールから次のコマンドで確認した値と照合する。ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub -
一般ユーザーを作成
rootで接続後、日常の管理に使用する一般ユーザーを作成し、管理者権限を利用できるwheelグループへ追加する。useradd --create-home --shell /bin/bash vpsuser passwd vpsuser usermod -aG wheel vpsuser id vpsuseridの結果にwheelが含まれていることを確認する。ここで設定したパスワードは、公開鍵を登録するまでの接続とsudoの認証に使用する。
OSの更新と確認用ツールの導入
-
パッケージの更新と確認用ツールの導入
パッケージを更新し、設定編集に使用するVimとDNS確認に使用するdigを導入する。dnf upgrade --refresh -y dnf install -y vim-enhanced bind-utilsカーネルなどが更新された場合は、作業への影響を確認したうえでVPSを再起動する。Vimは必要に応じて個人設定を追加できるが、サーバー構築に不要な設定は増やさない。
SSH鍵ペアの作成と公開鍵の登録
-
管理端末でEd25519鍵ペアを作成
管理端末でEd25519の鍵ペアを作成する。秘密鍵を保護するため、推測されにくいパスフレーズも設定する。ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_example -
ssh-copy-idで公開鍵を登録
生成されるid_ed25519_exampleが秘密鍵、id_ed25519_example.pubが公開鍵となる。公開鍵をssh-copy-idでVPSへ登録する。ssh-copy-id -i ~/.ssh/id_ed25519_example.pub vpsuser@203.0.113.10 -
ssh-copy-idを利用できない場合
ssh-copy-idを利用できない場合は、まずパスワードでvpsuserとして接続し、VPS側で次の操作を行う。install -d -m 700 ~/.ssh vim ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys管理端末にある
id_ed25519_example.pubの内容を、authorized_keysの末尾へ1行のまま追記する。既存の公開鍵がある場合はファイルを置き換えず、既存行を残す。
公開鍵認証の動作確認
-
公開鍵認証とsudoを確認
rootで接続中のターミナルを残したまま、別のターミナルから秘密鍵を指定して接続する。ssh -i ~/.ssh/id_ed25519_example vpsuser@203.0.113.10 sudo whoami公開鍵認証でログインでき、
sudo whoamiの結果がrootになることを確認する。この確認が終わるまでは、SSHのログイン方法を無効化しない。
OpenSSHの認証設定
-
sshd_configをバックアップして編集
一般ユーザーの公開鍵認証を確認した後、sshd_configをバックアップして編集する。sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.before-hardening sudo vim /etc/ssh/sshd_config -
認証設定を変更
既存の設定を確認し、次の値になるように変更する。同じ項目が複数の設定ファイルにある場合は、後述のsshd -Tで有効な値を必ず確認する。PermitRootLogin no PubkeyAuthentication yes PasswordAuthentication no KbdInteractiveAuthentication no -
設定を検証して再読込み
設定ファイルの構文と、実際に適用される認証設定を確認してから再読込みする。sshd -tでエラーが表示された場合は再読込みせず、設定を修正する。sudo sshd -t sudo sshd -T | grep -E '^(permitrootlogin|pubkeyauthentication|passwordauthentication|kbdinteractiveauthentication) ' sudo systemctl reload sshd再読込み後、さらに別のターミナルから
vpsuserで公開鍵認証できることを確認する。新しい接続に成功してから、最初のroot接続を終了する。
SSHクライアント設定
-
SSHクライアント設定を追加
管理端末の~/.ssh/configへ接続設定を追加すると、短いホスト名で接続できる。Host example-vps HostName 203.0.113.10 User vpsuser IdentityFile ~/.ssh/id_ed25519_example IdentitiesOnly yes ServerAliveInterval 60 -
ファイル権限と接続を確認
設定ファイルと秘密鍵の権限を整え、接続を確認する。chmod 700 ~/.ssh chmod 600 ~/.ssh/config ~/.ssh/id_ed25519_example ssh example-vps以降は
ssh example-vpsで接続できる。秘密鍵のパスフレーズ入力を省略したい場合は、OSのキーチェーンやssh-agentを利用し、秘密鍵自体のパスフレーズを削除しない。
firewalldの有効化と基本設定
-
パケットフィルターとfirewalldを併用
XServer VPSのパケットフィルターはVPSの外側、firewalldはOS側で通信を制御する。二つの設定を併用し、意図しないポートを公開しないようにする。 -
firewalldの状態を確認
まず状態を確認する。sudo systemctl is-enabled firewalld sudo systemctl is-active firewalld -
firewalldが停止している場合
firewalldが停止している場合は、既定ゾーンを確認し、SSHサービスを許可してから有効化する。次の例は既定ゾーンがpublicの場合となる。異なるゾーンが表示された場合は、実際のゾーン名へ読み替える。sudo firewall-offline-cmd --get-default-zone sudo firewall-offline-cmd --zone=public --add-service=ssh sudo systemctl enable --now firewalld -
SSHサービスを恒久的に許可
すでにfirewalldが動作している場合、または有効化した後は、実際に使用中のゾーンを確認する。publicゾーンへSSHサービスを永続的に許可し、設定を再読込みする。sudo firewall-cmd --get-active-zones sudo firewall-cmd --zone=public --add-service=ssh --permanent sudo firewall-cmd --reload sudo firewall-cmd --zone=public --list-services設定後は、新しいターミナルからSSH接続を再確認する。HTTPとHTTPSは、次の記事でNginxを導入するときに開放するため、この時点では不要なポートを追加しない。
独自ドメインのDNS設定
-
Aレコードを登録
ここでは、XServer VPSのDNSをexample.comの権威DNSとして利用する。VPSパネルのDNS設定からドメインを追加し、次のAレコードを登録する。ホスト名: example.com 種別: A 内容: 203.0.113.10 TTL: 3600 -
ネームサーバーを変更
次に、ドメインを取得したサービスの管理画面で、example.comのネームサーバーを次の3台へ変更する。ns1.xvps.ne.jp ns2.xvps.ne.jp ns3.xvps.ne.jp -
DNS設定を確認
設定後、管理端末からネームサーバーとAレコードを確認する。dig +short NS example.com dig @ns1.xvps.ne.jp +short A example.com dig +short A example.comNSの結果には設定したXServer VPSのネームサーバー、Aレコードの結果には
203.0.113.10が表示されることを確認する。表示順や末尾のドットは環境によって異なる。Nginxはまだ導入していないため、この段階ではブラウザ表示ではなく名前解決の結果を確認する。
まとめ
- VPSの外側ではXServer VPSのパケットフィルター、OS側ではfirewalldを使い、SSHに必要な通信だけを許可する。
- 日常の管理にはsudoを利用できる一般ユーザーを使い、rootでの直接ログインを禁止する。
- 公開鍵認証を別のターミナルで確認してから、パスワード認証とキーボードインタラクティブ認証を無効化する。
- SSH設定は
sshd -tで構文を確認し、サービスを再起動せず再読込みして反映する。 - DNSではXServer VPSのネームサーバーを指定し、AレコードがVPSのIPアドレスを返すことを
digで確認する。