
WordPress サイトを狙う攻撃の全貌と守り方 — 防御コマンド編
著者: 管理者 / 2025-09-08 (更新: 2025-09-08)
前回はコチラから
WordPress サイトを狙う攻撃の全貌と守り方 — 入門編
:::
先生、第1回で「攻撃の種類」を知ってから、ますます不安になってしまいましたの。でも同時に、「守れる道がある」と分かって心が軽くもなりましたわ😊
:::
:::
その心構えが大切です。今回はいよいよ実践、.htaccess
と VirtualHost
を使って、攻撃リクエストをサーバの手前で“静かに落とす壁”を築いていきましょう。
:::
📝 解説 — まずは .htaccess で基礎の壁を築く
WordPress のルート(例:/var/www/html/wordpress/.htaccess
)に、WordPress 標準の # BEGIN WordPress
より前に以下を追記します。
# ==== Security Hardening (custom) ====
# 1) XML-RPC を無効化
<Files "xmlrpc.php">
Require all denied
</Files>
# 2) setup-config.php を遮断
<FilesMatch "(?i)^setup-config\.php$">
Require all denied
</FilesMatch>
# 3) 機密ファイルをブロック
RewriteEngine On
RewriteRule (^|/)\.git - [F,L]
RewriteRule (^|/)\.env - [F,L]
RewriteRule (^|/)composer\.(json|lock)$ - [F,L]
# 4) 二重スラッシュの正規化(// → /)
RewriteCond %{REQUEST_URI} ^//+
RewriteRule ^(.*)$ $1 [R=301,L]
# 5) REST API ユーザー列挙をブロック
RewriteRule ^wp-json/wp/v2/users/?$ - [F,L,NC]
RewriteCond %{QUERY_STRING} (^|&)rest_route=/wp/v2/users(&|$)
RewriteRule ^ - [F,L]
効果
xmlrpc.php
とsetup-config.php
への攻撃を 403 Forbidden で即座に拒否.git
/.env
/composer.json
などのファイルを外部公開させない//
の正規化で SEO・キャッシュの安定性を改善- REST API によるユーザー名列挙を遮断
テスト例
curl -I https://example.com/xmlrpc.php
curl -I https://example.com/setup-config.php
curl -I https://example.com/wp-json/wp/v2/users
→ これらが 403 で返ってきたら成功です。

まあ!これだけでも多くの攻撃をはじけますのね。けれど……WordPress より前に落とせる方法もあるのですか?

はい。`.htaccess` は「アプリ側の壁」ですが、Apache の VirtualHost に直接書けば、もっと優先度の高い“サーバ側の壁”になります。
📝 解説 — VirtualHost レベルでの強化
/etc/httpd/conf.d/wordpress.conf
の <VirtualHost>
内に以下を追加します。
# REST API のユーザー列挙を問答無用で403
<LocationMatch "^/wp-json/wp/v2/users/?$">
Require all denied
</LocationMatch>
# アップロードディレクトリでのPHP実行を禁止
<Directory "/var/www/html/wordpress/wp-content/uploads">
<FilesMatch "\.php$">
Require all denied
</FilesMatch>
</Directory>
効果
- REST API ユーザー列挙を WordPress 本体に届く前に 403 で遮断
uploads
に PHP がアップロードされても 実行不可
反映コマンド
sudo apachectl configtest
sudo systemctl reload httpd

なるほど……「アプリの壁」と「サーバの壁」を二重に構えるのですね。まるで屋敷の門と城壁のようで、頼もしいですわ✨

良い比喩です。二重の壁を築けば、攻撃は入り口で沈み、WordPress 本体は余計な負担を背負わずに済みます。
📝 まとめ(第2回の学び)
-
.htaccess
による遮断xmlrpc.php
/setup-config.php
→ 403.git
/.env
/composer.*
→ 非公開化//
正規化 → SEO/安定性改善- REST API ユーザー列挙 → 403固定
-
VirtualHost
による上位レベル防御- REST API の列挙をサーバ側で即遮断
uploads/*.php
実行を禁止
結果:「攻撃が WordPress に届く前に落とす」環境が整う
次回予告 — 「夜更けのサーバールームで、静けさをまとう盾」
第3回では、さらに User-Agent フィルタリング、攻撃元IPの可視化と遮断、mod_evasive / fail2ban による自動防御 を扱います。
これで「普通の利用者はすっと通れるが、攻撃は沈む」状態をより確実に実現します。

まあ!次はいよいよ「運用の武器」なのですね。盾を磨いて、静かな夜を迎える準備をしておきますわ✨