Cloudflare入れたのに75%素通りだった話 ー 攻撃者も学習する
Cloudflare入れて安心してた
先日、WordPressサイトにCloudflareを導入しました。
https://zenn.dev/dhc4aki/articles/cloudflare-free-496-blocks
24時間で496件の脅威を緩和。エラー率も45%→32%に改善。「無料でここまでできるのか」と感動してました。
DNS浸透すれば完璧だろう、と。
「あれ、緩和率が下がってる...?」
数日後、Cloudflareのダッシュボードを見て違和感。
リクエスト合計: 1.19k(+5.01%↑)
Cloudflare緩和: 382(-45.82%↓)
リクエストは増えてるのに、緩和数が半減してる。
おかしい。DNS浸透が進めば緩和率は上がるはずでは?
ログを見たら衝撃の事実
サーバーのアクセスログを分析してみました。
Cloudflare経由: 25%
直接アクセス: 75% ← !?
75%がCloudflareを通っていない。
つまり、攻撃者がオリジンIP(サーバーの実IP)を直接叩いてきている。
攻撃者も学習する
冷静に考えれば当然でした。
Day 1: Cloudflare経由でアクセス
↓
ブロックされた
↓
Day 2: 「直接IP叩けばいけるじゃん」
↓
Day 3: 直接アクセス75%に
攻撃者だってバカじゃない。防御されたら迂回する。
直接アクセスの中身
687件/日の不審リクエストが直接来ていました。
| 攻撃パターン | 件数/日 |
|---|---|
| PHP webshell探索 | 388件 |
| .env ファイル探索 | 143件 |
| .git/config 探索 | 109件 |
| xmlrpc.php 攻撃 | 47件 |
Cloudflareを入れた意味が薄れている状態。
なぜオリジンIPがバレるのか
いくつか原因があります。
- DNS履歴: 過去のAレコードが残っている
- メールヘッダー: サーバーから送信したメールに記載
- サブドメイン: Cloudflareを通していないサブドメイン
- Shodan等: IPスキャンサービスに記録されている
一度バレたIPは、攻撃者のリストに残り続けます。
解決策: オリジンを隠す
Cloudflare側でいくら設定しても、直接アクセスは防げません。
サーバー側でCloudflare以外をブロックする必要があります。
iptablesで制限
# Cloudflare IPv4 のみ HTTP/HTTPS を許可
sudo iptables -A INPUT -p tcp --dport 80 -s 173.245.48.0/20 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -s 103.21.244.0/22 -j ACCEPT
# ... 他のCloudflare IPレンジ
sudo iptables -A INPUT -p tcp --dport 80 -j DROP
# HTTPSも同様に設定
sudo iptables -A INPUT -p tcp --dport 443 -s 173.245.48.0/20 -j ACCEPT
# ...
sudo iptables -A INPUT -p tcp --dport 443 -j DROP
Cloudflareの公式IPリストは以下で確認できます。
永続化を忘れずに
sudo apt-get install -y iptables-persistent
sudo netfilter-persistent save
再起動で設定が消えると悲しいことになります。
設定後の確認
※以下、ドメイン名・IPは仮のものに置き換えています。
# 直接アクセス → タイムアウト = 成功
$ curl -I --max-time 5 http://[サーバーIP]
curl: (28) Connection timed out after 5001 milliseconds
# Cloudflare経由 → 正常
$ curl -I https://example.com
HTTP/2 200
直接アクセスが完全にブロックされました。
Before / After
| 項目 | Before | After |
|---|---|---|
| 直接アクセス | 75% | 0% |
| Cloudflare経由 | 25% | 100% |
| 不審リクエスト到達 | 687件/日 | 0件 |
| 攻撃者の選択肢 | 直接 or CF経由 | CF経由のみ |
全トラフィックがCloudflareを通るようになりました。
学んだこと
1. Cloudflareは「玄関」、iptablesは「裏口の鍵」
Cloudflareを入れただけでは、裏口(直接IP)が開いたまま。両方の対策が必要。
2. 攻撃者は適応する
防御を入れると、攻撃者は別の経路を探す。一度の対策で終わりではない。
3. ログを見続けることが大事
「設定したから安心」ではなく、定期的にログを確認する習慣が重要。
今後の経過観察
直接アクセスを塞いだことで、攻撃者の行動がどう変わるか。
予測されるパターン:
- 諦めて別ターゲットへ → 攻撃減少
- Cloudflare経由で継続 → WAFでブロック
- より高度な手法 → 中小サイトにそこまでやる価値は低い
1週間後にまたレポートします。
まとめ
Cloudflare導入
↓
「これで安心」と思った
↓
緩和率が下がってきた
↓
ログ見たら75%バイパス
↓
攻撃者が直接IP叩いてた
↓
iptablesで塞いだ
↓
完全にCloudflare経由に
Cloudflare + iptables の二重防御で、ようやく本当の防御が完成します。
無料プランでもここまでできる。中小サイトのセキュリティ対策の参考になれば。
関連記事
- 月170円で24時間AI監視 - AWSサーバーレスで作る中小企業・フリーランス向けセキュリティ監視
- クリスマスに13,340件の攻撃が来てAI監視で自動検知した話
- AI監視で自動検知した実例に学ぶクリスマスに13,340件の攻撃パターンTOP5
- 【実録】AI監視から届いた今朝のアラート:攻撃46%ブロック、正規エラー0%
- S3+CloudFront+WAFで1,655件の攻撃を100%ブロックした話
- AI監視で9,820件の攻撃を30分で対策 → 翌日14,640件来ても防御が機能した
- Cloudflare無料プランで24時間496件の脅威を緩和した話
この分析は CloudLogAI で自動検知しました。
👉 仕組みの詳細はこちら:月170円で24時間AI監視
月170円で動くAI監視システムで、攻撃もパフォーマンス低下も早期に検知できます。
「うちのサイト、今どうなってるんだろう?」と思ったら、お気軽にどうぞ。
Discussion