セキュアVPS構築(第2回)Web公開環境の構築

この記事では、VPSを安全に運用するために
「さくらのVPSを立ち上げた状態から、WordPressを公開するまで」
に実施すべきステップの全体像をガイドします。

第1回では、VPSにおける基本的なセキュリティ強化設定を紹介しました。
第2回(この記事)では、WordPressを導入し、nginxを介してインターネット公開するための流れを整理します。

個々の細かな手順(コマンドや設定ファイルの詳細)は割愛していますが、流れを理解することで「何をやればよいか」が一望できる構成になっています。
実際の構築時には公式ドキュメントや各サービスのリファレンスも併せてご参照ください。

なお、ご紹介する手順は筆者の環境をベースに作成しています。
参考にされる場合は自己責任でお願いします。
また、必ずしも全ての環境において最適、最高水準という訳ではありませんので、その点はご了承ください。

今回は Web公開環境の構築 がテーマです。


前提条件


1. nginxの導入と公開確認

Web公開の入り口としてnginxを導入します。

  • dnf install nginx でインストール
  • systemctl enable --now nginx で常時稼働化
  • デフォルトで /usr/share/nginx/html/index.html に仮ページがあるので、ブラウザからアクセス確認

「VPSから外部にHTTPレスポンスを返せる」状態になります。


2. Let’s EncryptによるHTTPS化

もはやインターネット上のWebサイトでは必須のHTTPS化対応です。

  • certbotpython3-certbot-nginx を導入
  • certbot --nginx -d example.com で証明書発行
  • 必要に応じて HSTS や TLS バージョン制御(TLS1.2/1.3限定)を設定

サーバを再起動すると certbot-renew.timer が自動的に起動し、自動更新が有効になります。


3. MariaDBの導入と初期設定

WordPress用のデータベースを準備します。

  • dnf install mariadb-server で導入
  • systemctl enable --now mariadb
  • mysql_secure_installation によりrootパスワード設定・匿名ユーザー削除・テストDB削除
  • WordPress用DBとユーザを作成

障害や不正侵入時の影響を抑えるため、WordPress専用DBとユーザを用意することをお勧めします。


4. PHP(php-fpm)の導入

WordPressを動かすアプリケーション実行環境です。

  • dnf install php php-mysqlnd php-fpm php-gd php-mbstring php-xml
  • systemctl enable --now php-fpm
  • nginxとphp-fpmの連携設定を行い、.php ファイルを正しく処理できるように調整
    • nginx: 設定ファイル/etc/nginx/conf.d/php-fpm.confを作成してsocketファイルをlistenするように設定
    • php-fpm: 設定ファイル/etc/php-fpm.d/www.conf user,group,listen.owner,listen.groupをnginxに変更

5. WordPress設置と権限設計

WordPress本体を配置しパーミッションを変更します。

  • 配置場所例: /var/www/html配下
  • オーナーとパーミッションの変更例
    • オーナー: nginx:nginx
    • 基本: 644/755
    • wp-config.php は 600

管理画面からのWordPress本体の更新が制限されますが、筆者はセキュリティ確保の観点からこの運用を許容しています。


6. wp-cliの導入

WordPress更新をコマンド化するためのツールを導入します。

  • curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
  • /usr/local/bin/wp に配置し、実行権限を付与
  • 動作確認: wp --info
  • 利用例:
    • wp core update
    • wp plugin update --all
    • wp theme update --all
    • wp core update-db

7. cron.dによるWordPress自動更新

WordPressの更新を自動化し、放置による脆弱性リスクを低減します。
筆者の環境ではwp-update.sh 内にアップデートコマンドを列挙しcron.dで起動しています。

例:/etc/cron.d/wpcli-update

  • 毎日午前3時にWordPressを自動更新
    • 0 3 * * * root /opt/admin/bin/wp-update.sh

8. SELinuxの確認と対応

筆者の環境では、SELinuxの設定変更をせずにWordPressをインターネット公開できました。
設置場所やプラグイン等によっては、次の調整が必要になるケースもありそうです。

  • httpd_can_network_connect / httpd_can_network_connect_db の有効化
  • uploads ディレクトリに httpd_sys_rw_content_t を付与

不具合があった場合は、まず ausearch -m avc -ts recent を確認し、何がブロックされているか確認します。


9. まとめ

「第1回 初期設定とセキュリティ強化」「第2回 Web公開環境の構築」を通して、さくらのVPSを立ち上げ、Webサイトを公開するまでの最小限の流れ を一通りご紹介しました。

  • nginxでHTTPS化したWebサイトを公開
  • WordPressの導入と自動アップデート環境
  • SELinuxの有効化

個々の詳細手順やトラブルシュートについては、各サービスの公式ドキュメントや専門記事もあわせてご参照ください。
本記事へのフィードバックや詳細な解説依頼は「Contact」よりお知らせください。