前回はXサーバーの無料VPS機能を使ってSSH接続を行う方法を解説しました。

今回は無料VPS機能を使って、サーバーの設置からwebページを表示させるまでの流れを解説していきます。

PCおよびサーバーの環境と利用登録

ローカル作業環境

OS:Windows11
メモリ:16GB
SSD容量:500GB
作業ソフト:Windows Terminal

XサーバーのVPS環境

OS:Alma Linux 10.0
vCPU:2コア
メモリ:2GB
NVMe SSD:30GB

このような条件での作業になります。

ターミナルの起動とnanoエディターのインストール

Xサーバーの無料VPSの利用登録が済んだら、windowsターミナルを立ち上げ、root権限でSSHに接続します。

# ssh -p ポート番号 root@IPアドレス
ssh -p 22 root@000.000.00.000

ポートは22番を使用します。

また必要な人はnanoエディターをインストールをしてもいいでしょう。

# nanoエディタのインストール
sudo dnf install nano -y

Ubuntsuだとnanoエディタが初めから入っているのですが、AlmaLinuxではviエディタになります。

使い方が多少違うだけなので、どちらが良いかは好みですが、ここではviエディタでを使います。

ユーザーの追加とsudo権限の付与

root権限での接続から新ユーザーを追加する

root権限でSSHに接続してる状態から、ユーザーを追加します。

# useradd ユーザー名
useradd muchauman

Ubuntsuでは「adduser ~」と入力しましたが、AlmaLinuxでは「useradd ~」となります。

また続けてパスワード設定のためのコードも打ち込みます。

# sudo passwd ユーザー名
sudo passwd muchauman

パスワードまで設定すれば、とりあえずユーザーの追加はOKです。

ちなみにユーザーを削除したい場合は、

# sudo passwd ユーザー名
sudo userdel muchauman
sudo userdel -r -f muchauman

「sudo userdel」でユーザーアカウントの削除、「-r -f」を付けると「home/ユーザー名」ディレクトリの関連ファイルも削除されます。

追加したユーザーにsudo権限を付与

ユーザーの追加ができたら、sudo権限を付与します。

# sudo usermod -aG wheel ユーザー名
sudo usermod -aG wheel muchauman

このあたりもUbuntsuとは異なりますね。

# 権限に対してユーザーが追加されたか確認
sudo cat /etc/group | grep wheel
wheel:x:10:muchauman

ユーザーが追加されたかを確認する方法もUbuntsuとAlmaLinuxで変わってきますが、ここまでできていれば大丈夫です。

このあと認証鍵を使ったユーザーアカウントによるSSH接続の設定などを行いますが、UbuntsuとAlmaLinuxで大差はないので、設定方法については以下のページをご覧ください。

ファイヤーウォールの設定

他のプログラムや競合するものがないか確認し、firewalldをインストールする

ユーザーアカウントによるSSH接続ができるようになったら、ファイヤーウォールの設定を行います。

まずはファイヤーウォールが入っているか、あるいは起動しているかを確認します。

# firewalldの起動を確認
sudo systemctl status firewalld

Ubuntsuではuwfが入っていたりするので、その場合はuwfが無効になっているか確認しましょう。

# Ubuntsuでfirewalldを使う場合はuwfの状態を確認
sudo ufw status verbose

ファイヤーウォールがない、あるいは他のプログラムと競合する心配もなければ、firewalldをインストールします。

# firewalldの状態を確認
sudo dnf install firewalld -y

-yはインストールを実行するかの意思確認「yes」を省略するものです。

# ファイヤーウォール有効化
sudo systemctl start firewalld
# 自動再起動を有効化する
sudo systemctl enable firewalld
# 再起動なしで設定内容を直ちに反映
sudo firewall-cmd –reload

startはファイヤーウォールを起動するものですが、これだけだとOSを再起動する度に、いちいちfirewalldを手動で起動させることになります。

なのでOS起動時にfirewalldが自動で起動するよう、enableを設定してあげましょう。

–reloadは設定ファイルを再読み込みして、最新のルールを反映するものですが、初めてファイヤーウォールを起動する場合はなくても大丈夫です。

後にfirewalldの設定を変更した場合は、–reloadで新しい設定を反映させてやるといいでしょう。

firewalldの設定内容を確認する

firewalldを起動したら、設定内容を確認してみましょう。

# # firewalldの設定内容を確認する
sudo firewall-cmd –list-all

–list-allで設定内容が表示されます。

public (default, active)
 target: default
 ingress-priority: 0
 egress-priority: 0
 icmp-block-inversion: no
 interfaces:
 sources:
 services: dhcpv6-client
 ports: 22/tcp
 protocols:
 forward: yes
 masquerade: no
 forward-ports:
 source-ports:
 icmp-blocks:
 rich rules:

ゾーンの設定がpublicになっていますが、これはサーバーのタイプのようなもので、一般ユーザーに公開するサイトで使うことを意味します。

trusted:すべての接続を無条件に許可(テスト用)
public:フロントとバックエンドを担う一般的な設定
internal:社内や家庭内などの内部ネットワーク用
dmz:外部からのアクセスが必要なサービス(Web, Mailなど)を許可しつつ、内部ネットワークからは分離
work:職場ネットワーク用

自分でサーバーを組んで、限られたネットワークでしか利用しないのであれば、ゾーンにはinternalを設定するというように考えればいいと思います。

基本的には自動で決まるので、難しく考えなくて大丈夫です。

# 基本ゾーンの確認
sudo firewall-cmd –get-default-zone
public
# 有効なゾーンの確認

sudo firewall-cmd –get-active-zones
interfaces: eth0

ゾーン設定を確認する場合はこんな感じになります。

firewalldの設定内容を変更する

ここからは不要なものを分けつつ、必要なものを追加していきましょう。

ファイヤーウォールの設定はサービス名あるいはプロトコルとポート番号で指定していきます。

# 使わないサービスを廃止
sudo firewall-cmd –permanent –remove-service=dhcpv6-client
sudo firewall-cmd –permanent –remove-service=cockpit

dhcpv6-clientやcockpitはここでは使用しないので廃止します。

–permanentは変更を継続的に適用するためのオプションで、OS再起動後も設定内容が持続します。

# ポート80、443の解放
sudo firewall-cmd –permanent –add-service=http
sudo firewall-cmd –permanent –add-service=https
# 正確な時間の同期を行う
sudo firewall-cmd –permanent –add-service=ntp

http/httpsを使うためにポート「80、443」を解放します。

また時刻の同期で必要な人はNTPも設定してください。

# 設定内容を反映
sudo firewall-cmd –reload

設定ができたら、–reloadで反映させてあげましょう。

SSH接続用ポートの変更

firewalldに個別ポートの設定を追加する

ポート22番に代わり別の番号を使いたいので、個別ポートの開放も行っていきます。

# 個別ポートの解放
sudo firewall-cmd –permanent –add-port=111/tcp
# 22番ポートの閉鎖
sudo firewall-cmd –permanent –remove-service=ssh
# 22番ポートを再解放する場合
sudo firewall-cmd –permanent –add-service=ssh

個別ポートは好きな番号を設定してください。
※一部使用できない番号もあります

# 設定内容を反映
sudo firewall-cmd –reload

設定ができたら、–reloadで反映させてあげましょう。

あわせて指定したポートが開いたかも確認します。

# ポート確認
sudo firewall-cmd –list-ports
111/tcp

–list-portsでポート番号が出てくればOKです。

sshd_configファイルのポート設定も確認する

「111/tcp」のように22番に代わって別の番号を指定する場合、ファイヤーウォールの設定だけでは不十分で、sshd_configファイルでも番号が指定されている必要があります。

# ポート指定を確認
sudo grep -E “^Port|^#Port” /etc/ssh/sshd_config
#Port 22

こんな感じでsshd_configファイルのポート指定がデフォルトのままの場合はエディターモードを起動して、設定を変更してあげましょう。

# viエディターを起動
sudo vi /etc/ssh/sshd_config

「#Port 22」を「Port 111」のようにしてあげればOKです。

# SSHの再起動と反映
sudo systemctl restart sshd

また変更後はSSHを再起動し、設定を反映させてあげましょう。

ところでいきなり22番を閉鎖して、111番を解放するといったやり方は危険です。

22番と111番の二つを解放しておいて、111番でSSH接続できることを確認してから22番を閉じるといったようにSSHのポート変更は慎重に行いましょう。

SELinuxでもポート111番を許可する

Xサーバーは最初からSELinuxが有効化されているので、SELinuxでもポート111番が使えるように設定しておきます。

SELinuxは簡単に言うと、ファイヤーウォールの内側で働くセキュリティで、二重三重に防御策を講じておくイメージです。

SELinuxを使うためにはまずsemanageがあるか確認し、なければインストールしておきます。

# semanageがあるか確認
which semanage
# semanageがをインストール
sudo dnf install policycoreutils-python-utils -y

semanageはSELinuxの設定を恒久的に記憶しておくためのものです。

これがないと再起動の度に一時的な設定変更を施してやることになりますが、そんなことしてられないので、インストールしておきましょう。

インストールできたら、SELinuxのポート設定を確認します。

# ポート確認
sudo semanage port -l | grep ssh
ssh_port_t           tcp           22

22番だけになっているので、新しいポート番号を追加してやります。

# ポート111を追加
sudo semanage port -a -t ssh_port_t -p tcp 111
# ポート111を削除する場合
sudo semanage port -d -t ssh_port_t -p tcp 111

追加ができたら、再び確認します。

# ポート確認
sudo semanage port -l | grep ssh
ssh_port_t           tcp            111,  22
# 再起動して反映
sudo systemctl restart sshd

よかったらSSHを再起動して完了です。

ちなみにSELinuxからポート22は削除できないので、ファイヤーウォール側で対応することになります。

ところでサーバーコンソールパネルでパケットフィルターが有効になっている場合は、フィルター設定にもポート番号をを追加しないとSSHログインできないので、チェックしておきましょう。

外部バイナリ方式から内部SFTP方式に切り替える

ついでにセキュリティと管理性が向上する設定をしてあげます。

# エディタ起動
sudo vi /etc/ssh/sshd_config

エディタを起動し、sshd_configファイルの以下の部分を変更します。

# override default of no subsystem
Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp

SSHサーバーでSFTP(SSH File Transfer Protocol)のサブシステムを変更するためのものです。

外部のsftp-serverプログラムを使用してSFTPを処理していたものを、OpenSSHサーバー内蔵のSFTP機能を使用するようにします。

なんのこっちゃという感じですが、操作方法などはそのままでセキュリティが上がると思ってください。

設定を変更したので、SSHを再起動して反映させてやります。

# SSHを再起動
sudo systemctl restart sshd

ちなみに本番運用開始後や多数のユーザーが既に接続している状態での変更は避けた方がいいでしょう。

サーバー初期設定の段階で、他のSSH関連設定と合わせて実施するのが効率的かつ安全です。

webサーバーの準備とNginxの設定

webサーバーの構築準備

webサーバーの構築準備を行っていきます。

まずはAlmaLinuxをアップデートしましょう。

# システム全体のパッケージを最新バージョンに更新する
sudo dnf upgrade -y

  • upgrade」で既存パッケージおよび依存パッケージの更新されます。

  • 初期セットアップでは最初に実行しておくべきですが、システム全体、カーネルやライブラリも更新されるので、運用中の場合は必要に応じて更新するのがいいと思います。

また特定のパッケージを新規にインストールするものもあります。

# 特定のパッケージを新規にインストールする
sudo dnf install redhat-lsb-core -y
# 特定のパッケージをまとめてインストールする
sudo dnf install curl wget gnupg -y

curl:サーバーで外部のスクリプトやファイルを取得するために使う
wget:ファイルのダウンロード専用ツール
gnupg (gpg):暗号化・署名・鍵管理に使うツールで、パッケージ署名の検証や暗号通信で必須
lsb-release-core:OS情報を取得するツール

OS標準にない独自パッケージを導入できるもので、公式に無いツールやライブラリも使えるようになります。

Node.jsComposerの最新版などを使う場合はセットしておくといいでしょう。

Nginxのインストールと起動

ここからはNginxの設定を行っていきます。

# Nginxのインストール
sudo dnf install nginx -y
sudo which nginx
/usr/sbin/nginx

インストール後、whichで確認ができます。

# Nginxの起動と自動起動設定
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx

startenableはファイヤーウォールの設定にも出てきた、有効化と自動再起動のためのものです。

statusを確認し、active (running) になっていればOKです。

ドメインとディレクトリの設定

Nginxの設定にドメイン情報を追加する

nginxの設定が書かれているnginx.confファイルにドメインの情報を追加していきます。

# viエディタを起動
sudo vi /etc/nginx/nginx.conf

これでnginxの設定ファイルの中身を変更することはできますが、これは共通設定として残しておくのが無難です。

そこで直接上書きはせず、設定ファイルを別に用意して、ドメインごとに必要な情報だけを上書きする形を取ります。

# viエディタを起動
sudo vi /etc/nginx/conf.d/{domain_name}.conf

エディタを起動したら、ドメインに関連する情報を追加していきます。

# {domain_name}.confファイルに記載
server {
    listen 80;

    server_name {domain_name} www.{domain_name}; 
    root /var/www/{domain_name}/public_html;
    index index.html index.htm;
    
    location / {
        try_files $uri $uri/ =404;
    }
}

さらにrootに指定したファイルを生成し、権限を付与します。

# ファイル生成
mkdir -p /var/www/{domain_name}/public_html
echo “Hello, Nginx!” > /var/www/{domain_name}/public_html/index.html
sudo chown -R nginx:nginx /var/www/{domain_name}
sudo chmod -R 755 /var/www/{domain_name}

2行目のコードはテスト表示のためにindex.htmlを追加するもので、後で削除するなりしてください。

そしてSELinuxの設定を追加します。

# SELinuxの接続設定とラベル
sudo semanage fcontext -a -t httpd_sys_content_t “/var/www/{domain_name}/public_html(/.*)?”
sudo restorecon -Rv /var/www/{domain_name}/public_html

一行目は/var/www/{domain_name}/public_html/ディレクトリ以下にあるファイルをnginx / apacheが読めるようルールを設定するものです。

そして二行目でルールを実行、反映します。

これをしておかないと、Webサーバーがそのファイルを読むのは不正アクセスかもしれないとSELinuxが判断し、はじかれてしまいます。

# nginx再起動
sudo systemctl restart nginx

一通りできたらnginxを再起動し、ドメインでページが表示されるか確認してみましょう。

シンボリックリンクの作成

ユーザー権限でFTP接続する度に、いちいちwebサイトのディレクトリに移動するのは大変なので、シンボリックリンクを作成しておきましょう。

これはショートカットのようなもので、簡単にディレクトリを移動できます。

# 一度作成すると、削除するまで永続的に残る
ln -s /var/www/ ~/website

# 確認
ls -la ~/website
lrwxrwxrwx. 1 muchauman muchauman 25 Aug 20 15:32 /home/muchauman/website -> /var/www/

# 削除する場合
rm ~/website

必ずユーザーアカウントでSSH接続した状態から行ってください。

シンボリックリンクはユーザーのホームディレクトリに作成するので、そのユーザーで接続している時のみ意味があります。