概要
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 -u root -p
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';
FLUSH PRIVILEGES;
exit
作成したDB確認
mysql -u wpuser -p
SHOW DATABASES;
WordPressのDBがあることを確認します。
use wordpress;
SHOW VARIABLES LIKE 'character_set_database';
Value
がutf8mb4
であることを確認
SHOW VARIABLES LIKE 'collation_database';
Value
がutf8mb4_bin
であることを確認
exit
WordPress取得
cd /hoge && pwd
任意のディレクトリを指定します。
wget https://wordpress.org/latest.tar.gz
tar -xzvf latest.tar.gz
sudo chown -R www-data:www-data wordpress
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
を確認します。
sudo systemctl restart apache2.service
systemctl status apache2.service
ブラウザから確認
ブラウザで設定したURLにログインします。
インストール画面が出てきます。言語を選びContinueをクリックします。
ボタンをクリックします。
設定したDB名、ユーザー、パスワードを入力します。
DBと接続されると、以下が表示されます。インストール実行をクリックします。
サイト名などを入れていきます。
ここまで出たらOKです。
インストール後の処理(一時停止)
圧倒的なシェアを誇るWordpressは攻撃者が真っ先に狙うサービスです。 そのため、安定稼働するまでは確認後に一度停止して、物理的なアクセスを防ぎます。
sudo a2dissite wordpress.conf
sudo apache2ctl configtest
Syntax OK
を確認します。
sudo systemctl restart apache2.service
systemctl status apache2.service
無効化後、上記の設定ファイルで指定したURLにアクセスできないことを確認します。