最近このブログサーバがよく止まる・・・
止まるというよりアクセスが重くなって固まるっていうのが正しいかな。
ログを見ていると、十中八九、Botみたいなアクセスとログインの試みが増えていている。
WordPress のような PHP で動くものだと、それだけでサーバの CPU などのリソースを持っていかれる。
うちのような Google Cloud Compute Engine の無料枠でやっているとそのスパークに耐えられずサーバが固まってしまう。
こんな小さいブログサーバでも数百から数千とか来るからね。
ここ 2 か月くらいアクセスが異様に増えた
ニュースでも、毎日のように企業の情報漏洩が報道されているのが増えたように、おそらく AI を利用したサーバ攻撃が世の中的に増えていると思う。
大企業でさえ狙われたらやられてしまう。
攻撃する側は 1 個でも穴を見つければいいけど、防御する側は 100 % を目指さなければいけない。
今の AI による攻撃形態を防御するには、防御側が圧倒的に不利な状況。
早く防御するほうの AI の台頭を期待したい。
今の状況を対処する
とはいえ、今の状況をそのまま放置するのは自分が許せない(笑)
少しでも緩和できるように対処していきたい。
いくら見る人が少ない個人ブログとはいえ、アラート通知がちょくちょく来るし、サーバ管理を生業としているのに、自分のサーバの対処もできないなんて笑えない。
まず WordPress は昔から狙われやすいので、セキュリティ的な対策はサーバ側で最低限実施している。
ただ、今の状況はサーバに対してのアプローチが多いため、サーバ側のリソースが足りていない。
富豪であればサーバリソースを増やして解決することもできる(笑)けど、いかにコストをかけずにやるかが個人サーバのやりどころ。
なので、ここはまた無料でいろいろできる Cloudflare の設定を変えて乗り切ろうと思う。
Cloudflare の設定を変えていく
まず何が原因かアクセスの多いものをログから確認する。
定番というか xmlrpc.php へのアクセスと、wp-login.php が圧倒的に増えている。
数千とかの単位でアクセスが来ている(笑)
そりゃこれだけアクセスが集中する時間があれば、固まるわな・・・
ということで、Cloudflare の設定を変えていく。
あ、ちなみに Cloudflare で DNS を設定してる前提ね。
セキュリティルールを作成する
xmlrpc.php へのアクセスをブロックする設定を入れる。
対象のドメインを選択して「セキュリティ> セキュリティルール」から、「ルールの作成」をクリックして作成する。
# ルール名を適当に決める
Block xmlrpc.php
# 式の編集をクリックして以下設定
(http.request.uri.path contains "xmlrpc.php")
# アクションを選択
ブロックもう1つのルールは wp-login.php へのログイン施行に対して、マネージドチャレンジを設定する。
もともと Cloudflare のプラグインで Cloudflare Turnstile は設定していたんだけど、それはログインに対してセキュリティの強化にはなるけど、アクセスしてくる負荷を軽減するものではないので、この設定をすることでアクセスしてくる Bot などの負荷を Cloudflare 側で持ってもらう。
# ルール名を適当に決める
Managed Challange
# 式の編集をクリックして以下設定
(http.request.uri.path eq "/wp-login.php")
# アクションを選択
マネージドチャレンジひとまずこの2つのルールだけで、数千のアクセスが減るので落ち着くでしょう。
キャッシュも設定する
今までだいぶ適当にしていたので、ここでキャッシュも Cloudflare 側でしっかりと設定することにする。
キャッシュの設定は対象のドメインを選択して「Caching>Cache Rules」を選択して「ルールを作成」。
# ルール名を適当に決める
WordPress HTML Cache
# 式の編集をクリックして以下設定
(ホスト名など必ず環境に合わせること)
(http.host eq "example.com"
and not starts_with(http.request.uri.path, "/wp-admin")
and not starts_with(http.request.uri.path, "/wp-login.php")
and not starts_with(http.request.uri.path, "/wp-json")
and not starts_with(http.request.uri.path, "/xmlrpc.php")
and not starts_with(http.request.uri.path, "/feed")
and not http.cookie contains "wordpress_logged_in"
and not http.cookie contains "wp-postpass"
and not http.cookie contains "comment_author"
and not http.request.uri.query contains "preview="
and not http.request.uri.query contains "feed="
and not http.request.uri.query contains "s=")
# エッジTTL(自身の環境に合わせること)
4時間
# ブラウザTTL
キャッシュをバイパスするこれで Cloudflare 側でキャッシュ配信してくれるので、サーバ本体への記事に対してのアクセスもかなり軽減できる。
Cloudflare のプラグイン設定
上の設定でキャッシュを Cloudflare 側で持つようになったので、WordPress 側の Cloudflare のプラグインの設定を変更する。
記事を更新したり、設定を変えたときに自動で、Cloudflare 側のキャッシュをパージするようにする。
WordPress の「 Cloudflare プラグイン>Setting>Auto Purge Content On Update」をONにする。
もし有料版の Cloudflare を使っていると APO と競合するので、その場合は Cloudflare のドキュメント読んでください。
ひとまずここまでの設定をするだけで、サーバの負荷はかなり軽減された。
固まったり、止まったりすることもなくなった。
AI もいい使い方されるといいんだけど、今の世の中はそうではない方向のほうが大きいので困る。
このままいっちゃうとホントにターミネーターみたいな世界になっちゃわないか心配ですよ・・・
