まず、LightsailにWordPressインスタンスがあります。
僕はそれをスルーしてUbun20.04を選びました。要は定番の構築記事です。
まずはタイムゾーンを日本に合わせます。
sudo timedatectl set-timezone Asia/Tokyo
お約束のアップデートをします。
sudo apt-get update
sudo apt-get upgrade -y
Apache2とmod_securityをインストールして、mod_securityの推奨configを有効にします。
sudo apt-get install -y apache2 libapache2-mod-security2 modsecurity-crs
sudo a2enmod security2
sudo mv -v /etc/modsecurity/modsecurity.conf{-recommended,}
mod_securityのconfigに自分とインスタンス自身のIPアドレスをホワイトリストに追加します。
SecRule REMOTE_ADDR "@ipMatch <IP ADDRESS>" id:2000,phase:1,t:none,log,allow
SecRule REMOTE_ADDR "@ipMatch <IP ADDRESS>" id:2001,phase:1,t:none,log,allow
SecRule REMOTE_ADDR "@ipMatch <IP ADDRESS>" id:2002,phase:1,t:none,log,allow
PHP関連をインストールします。
sudo apt-get install -y php7.4-cgi php7.4-mbstring php7.4-mysql libapache2-mod-php php-gd
MySQLをインストールして初期設定をします。
sudo apt-get install -y mysql-server mysql-client-8.0
sudo mysql_secure_installation
MySQLにWordPress用のユーザとデータベースを追加します。
sudo mysql -p
CREATE USER 'wp'@'localhost' IDENTIFIED BY '<PASSWORD>';
CREATE DATABASE wp;
GRANT ALL on wp.* to 'wp'@'localhost';
WordPressを取得してWeb用のディレクトリに展開します。
wget https://ja.wordpress.org/latest-ja.tar.gz
tar zxf latest-ja.tar.gz
sudo mkdir /var/www/th0x0472.net
sudo cp -R ./wordpress/* /var/www/th0x0472.net
sudo chown -R www-data:www-data /var/www/th0x0472.net
Apache2の設定ファイルを作成します。
(2021/08/20)Apacheのconfigを修正しました
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName th0x0472.net
ServerAlias www.th0x0472.net
DocumentRoot /var/www/th0x0472.net
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<DIRECTORY /var/www/th0x0472.net/wp-admin>
Require ip <MY IP ADDRESS>
</DIRECTORY>
<FILES wp-login.php>
Require ip <MY IP ADDRESS>
</FILES>
<FILES xmlrpc.php>
Require ip <MY IP ADDRESS>
</FILES>
</VirtualHost>
作成した設定ファイルを有効にします。
sudo a2ensite th0x0472.net.conf
sudo a2dissite 000-default.conf
configtestしてApache2を再起動します。
sudo apache2ctl configtest
sudo systemctl restart apache2
もちろん最初からすべてキレイに出来たわけではないですが、手元のVirtualBox環境で試したりサイト自体再構築したりして、上記の手順が確立しました。
mod_securityのホワイトリストは、WordPressの記事作成のために必要です。
Apache2の設定ファイルのアクセス制御は、膨大な数のログイン試行ログをみて追加しました。xmlrpc.phpは歴史的経緯でWordPressに残っているプログラムで、他所に通信するプログラムだそうです。名前からしてrpcってついてますしね。これもアクセス制限前に膨大なアクセスがありました。
FILESディレクティブって複数形だから複数ファイルを列挙できると思って最初は2ファイル列挙したところ、configtestでエラーになりました。メモってないのですが、すまんな、って感じのメッセージでした。
VPS+独自ドメインで運用してログを眺めたり監視したりしてみると、いい経験になります。