SIGMA-SE Math & Tech Library

SIGMA-SE Math & Tech Library


数学と情報技術をテーマに、書籍や教材だけではつかみにくい考え方を具体例とともにわかりやすく伝える解説サイトです。

VPSで作るDjangoサイト構築手順 - Nginx編:1/4 VPS・DNS・SSH初期設定

概要

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 vpsuser

    idの結果に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.com

    NSの結果には設定した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で確認する。

参考文献

この記事を共有
Xで共有 Facebookで共有 LINEで共有



Copyright SIGMA-SE All Rights Reserved.
s-hama@sigma-se.jp