
WordPress サイトを狙う攻撃の全貌と守り方 — 最終章
著者: 管理者 / 2025-09-08 (更新: 2025-09-08)
前回はコチラ
WordPress サイトを狙う攻撃の全貌と守り方 — 防御コマンド編
:::
先生、第2回で .htaccess
と VirtualHost
を固めてから、ログが少し静かになりましたわ。でも……まだ同じIPや怪しいBotがしつこく叩いてきますの。どうすれば完全に夜が静かになりますの?😣
:::
:::
良い気づきです。第3回では「運用の武器」を扱います。つまり、User-Agent フィルタリング・攻撃元IPの特定と遮断・レート制限。これらを組み合わせれば、ログも心も落ち着いてきますよ。
:::
📝 解説 — 1) User-Agent フィルタで雑音を減らす
攻撃リクエストは「空UA」や「curl」「wget」などが多いです。UAで完全防御はできませんが、雑音を削るのに有効です。
# UAが空、典型的なスクレイパーを拒否
SetEnvIfNoCase User-Agent "^$" bad_ua
SetEnvIfNoCase User-Agent "python-requests|curl|wget|libwww-perl|apachebench|Go-http-client|bot|spider|crawler" bad_ua
# 古すぎるChromeを拒否(例: v70〜v90)
SetEnvIfNoCase User-Agent "Chrome/7[0-9]\.|Chrome/8[0-9]\.|Chrome/9[0-9]\." bad_ua
<RequireAll>
Require all granted
Require not env bad_ua
</RequireAll>
効果
- 空UA・curl・wget → 403
- 古い偽装Chromeを名乗るBot → 403
- 正常なブラウザや最新環境は通過

まあ!UAを見ただけで、半分以上のBotがはじけそうですわ✨ でも、同じIPからずっと来る相手はどうしましょう?

そこで次は「攻撃元IPの把握」です。IPランキングを出して、しつこい相手を特定しましょう。
📝 解説 — 2) 攻撃元IPを可視化してブロック
アクセスログから攻撃対象URLを叩いているIPを抽出します。
# 攻撃対象URL別のIPランキング
sudo egrep 'xmlrpc\.php|setup-config\.php|/wp-json/wp/v2/users' /var/log/httpd/access_log \
| awk '{print $1}' | sort | uniq -c | sort -nr | head -30
対応策
- 小規模なら firewalld / iptables で直接ブロック
- 大規模なら Cloudflare / AWS WAF で国別・ASN別ブロック
例(firewalld):
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.45" reject'
sudo firewall-cmd --reload

ふむふむ……“しつこい相手”は名指しで退場いただくのですのね。けれど、数が多いと手作業では大変ですわ。

その通り。だから最後に、自動で防御する「レート制限」を導入します。
📝 解説 — 3) レート制限で自動防御
mod_evasive
Apache 標準モジュールで、一定時間に一定数以上のアクセスがあればブロック。
# /etc/httpd/conf.d/mod_evasive.conf
DOSHashTableSize 3097
DOSPageCount 10
DOSPageInterval 1
DOSSiteCount 50
DOSSiteInterval 1
DOSBlockingPeriod 300
DOSEmailNotify admin@example.com
fail2ban
ログを監視し、繰り返す攻撃元IPを ban。
# /etc/fail2ban/jail.local
[apache-auth]
enabled = true
filter = apache-auth
logpath = /var/log/httpd/error_log
maxretry = 5
bantime = 3600
findtime = 600
注意
-
厳しすぎると誤検知あり
-
最初は
bantime
を短めに設定し、ログを見て調整

まあ!これで「普通の人はすっと通れるけれど、攻撃は沈む」……そんな素敵な環境が整いましたのね✨

ええ、お嬢様。外側で落とし、内側を静かに保ち、ログで観測しながら微調整。それこそが WordPress サイトを長く安全に運用する秘訣です。
📝 まとめ(第3回の学び)
-
User-Agent フィルタで空UA・古い偽装UA・Botを削減
-
攻撃元IPを可視化し、FWやWAFで個別遮断
-
mod_evasive / fail2ban によるレート制限で自動防御
-
結果:「普通の利用者は快適、攻撃は自動で退場」