概要
CMSの代名詞、Wordpressをきちんとした手順で書いていなかったのでこの機会にメモを残します。
手順が比較的簡単なだけに狙われやすいのも納得。
なので、ここではインストールだけではなく、セキュリティ対策を含めて実施します。
環境
- Ubuntu 24.04
- Apache 2.4
- MySQL
- PHP 8.3
前提
- Apacheの初期設定は完了しています。
- mod_securityが稼働しています。
- 適切に名前解決できることが条件です。(DNS設定済み)
- 証明書は適切なものを準備済みです。
さっくりとした手順
- WordPress用のデータベースを作成します。
- WordPressのプログラムを配置します。
- WordPressをWebサービスで動かす設定を行います。
- WordPressをブラウザでインストールします。
- インストール後、一度、設定を解除します。
※Wordpressは非常に狙われやすいWebアプリです。そのため、安定稼働するまでは設定をするたびにWebサービスから切り離します。
DB作成
- MySQLログイン
mysql -u root -p
- DB作成
CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
DB名(mt)は自分の環境に合わせます。
- ユーザー作成
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'your_password';
ユーザー(wpuser)やパスワードは自分の環境に合わせます。適正なパスワードを設定してください。
- 権限委譲
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
- 設定反映、MySQLログアウト
FLUSH PRIVILEGES;
exit
作成したDB確認
- MovableTypeのユーザーでログイン
mysql -u wpuser -p
- DB確認
SHOW DATABASES;
WordPressのDBがあることを確認します。
- DB切り替え
use wordpress;
- DBの文字コード確認
SHOW VARIABLES LIKE 'character_set_database';
Value
がutf8mb4
であることを確認
- DBの照合順序確認
SHOW VARIABLES LIKE 'collation_database';
Value
がutf8mb4_bin
であることを確認
exit
WordPress取得
- 作業ディレクトリに移動
cd /hoge && pwd
任意のディレクトリを指定します。
- wget
wget https://wordpress.org/latest.tar.gz
- ファイルの解凍
tar -xzvf latest.tar.gz
- ファイルの所有権変更
sudo chown -R www-data:www-data wordpress
- www-dataディレクトリに移動
sudo mv wordpress /home/www-data/wordpress
自分の環境に合わせます。
WordPressWebサイト設定編集
ログ格納用のディレクトリ作成
- ログ格納ディレクトリ作成
sudo mkdir -p /var/log/wordpress
- ログ格納ディレクトリの所有者変更
sudo chown www-data:www-data /var/log/wordpress
WordPressのバーチャルサイト作成
/etc/apache2/site-available
配下に、wordpress.conf
を管理者権限で作成し、以下のように編集していきます。
<VirtualHost *:80>
# ドメイン名を指定します
servername hoge.example.com
# HTTPアクセスを強制的にHTTPSにリダイレクトします
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>
<VirtualHost *:443>
# ドメイン名を指定します
ServerName hoge.example.com
CustomLog /var/log/wordpress/wp_access.log combined
ErrorLog /var/log/wordpress/wp_error.log
# WordPressを配置したディレクトリを指定します。
DocumentRoot /home/www-data/wordpress
<Directory /home/www-data/wordpress>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
#セキュリティヘッダー付与
Header always set Strict-Transport-Security "max-age=63072000"
Header set X-Content-Type-Options "nosniff"
Header always append X-Frame-Options "SAMEORIGIN"
Header set X-XSS-Protection "1; mode=block"
#SSL設定
SSLEngine on
Protocols h2 http/1.1
SSLCertificateFile /path/to/ssl/certificate.crt
SSLCertificateKeyFile /path/to/ssl/private.key
# 証明書と秘密鍵のパスを指定します
# Mod_Security設定
SecRuleEngine DetectionOnly
# Webでインストールを行うため、最初は検知モードに設定します。
## ファイルのアップロードをできるようにします。
SecRequestBodyInMemoryLimit 524288000
SecRequestBodyLimit 524288000
## テスト用の検知パラメーター
SecRule ARGS:modsecparam "@contains test" "id:4321,deny,status:403,msg:'ModSecurity test rule has triggered'"
</VirtualHost>
# これらのセクションはSSL暗号化強度を高めるための記述です
# </VirtualHost>の外側に書くことにご注意ください
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:EC6-GCM-SHA384
SSLHonorCipherOrder off
SSLSessionTickets off
SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
設定ファイル有効化
- コンフィグ読み込み
sudo a2ensite wordpress.conf
- 構文確認
sudo apache2ctl configtest
Syntax OK
を確認します。
- Webサービス再起動
sudo systemctl restart apache2.service
- Webサービス再起動確認
systemctl status apache2.service
ブラウザから確認
ブラウザで設定したURLにログインします。
インストール画面が出てきます。言語を選びContinueをクリックします。
ボタンをクリックします。
設定したDB名、ユーザー、パスワードを入力します。
DBと接続されると、以下が表示されます。インストール実行をクリックします。
サイト名などを入れていきます。
ここまで出たらOKです。
インストール後の処理(一時停止)
圧倒的なシェアを誇るWordpressは攻撃者が真っ先に狙うサービスです。
そのため、安定稼働するまでは確認後に一度停止して、物理的なアクセスを防ぎます。
- バーチャルサイトの設定ファイル無効化
sudo a2dissite wordpress.conf
- 構文確認
sudo apache2ctl configtest
Syntax OK
を確認します。
- Webサービス再起動
sudo systemctl restart apache2.service
- Webサービス再起動確認
systemctl status apache2.service
無効化後、上記の設定ファイルで指定したURLにアクセスできないことを確認します。