Cloudflare導入後も攻撃される?源IP漏洩の7つの隠れた経路と対策ガイド

はじめに
先月、友人から「ブログが攻撃されてサーバーがダウンした。Cloudflareを入れているのに機能していない!」と相談を受けました。調べてみると、攻撃トラフィックはCloudflareを経由せず、サーバーのIPアドレスに直接飛んできていました。
いわゆる**「源IP(Origin IP)漏洩」**です。
多くの人は「Cloudflareを設定したから安心」と考えますが、実際にはDNSの履歴やメールのヘッダー情報など、様々な場所から「本来のIPアドレス」が漏れ出しています。攻撃者はそれを見つけ出し、CDNの防御壁を迂回して直接攻撃を仕掛けてきます。これでは高価なWAFも意味がありません。
この記事では、源IPが漏洩する7つの主要な経路とその検出方法、そして鉄壁の防御を構築するための手順を解説します。
なぜ源IPが漏洩するのか?
CDNの仕組みと直撃攻撃
通常、CloudflareなどのCDNを使うと、ユーザー(および攻撃者)はCDNのエッジサーバーにアクセスし、そこからあなたのサーバーへリクエストが転送されます。外部からはCDNのIPしか見えません。
しかし、もし攻撃者があなたのサーバーの「生IP(Real IP)」を知ってしまったら? 彼らはCDNを無視して、そのIPに直接パケットを送りつけることができます。
7つの漏洩経路
1. DNS履歴記録(リスク:高)
これが最も多いケースです。Cloudflareを導入する前に、生のIPで運用していませんでしたか? SecurityTrailsやDNSdumpsterなどのサービスは、DNSレコードの変更履歴を保存しています。攻撃者はそこから「Cloudflare導入直前のIP」を探し出し、攻撃します。
2. メールヘッダー情報(リスク:高)
Webサイトから送信される「登録完了メール」や「パスワードリセットメール」。これらをWebサーバー自身から送っていませんか? メールのヘッダー情報(Received フィールド)には、送信元サーバーのIPアドレスがバッチリ記載されています。
3. サブドメインの放置(リスク:中〜高)www.example.com はCloudflareを通しているのに、mail.example.com や dev.example.com、cpanel.example.com などを生のIPに向けていませんか? サブドメインスキャンツールを使えば、これらはすぐに見つかります。同じサーバー(または同じIP帯)にあることがバレればアウトです。
4. サーバー情報の公開(リスク:中)phpinfo() ページを消し忘れていたり、Apache/Nginxのデフォルトページ、あるいは.gitディレクトリへのアクセス権限設定ミスなどで、サーバー内部の情報やIPが漏れることがあります。
5. SSL証明書(リスク:中)
Certificate Transparency(証明書の透明性)ログには、発行されたすべてのSSL証明書が記録されます。過去にCensysなどの検索エンジンがあなたのIPの443ポートをスキャンし、そこで提示された証明書(あなたのドメインのもの)とIPを紐付けて記録している可能性があります。
6. 海外DNSの解析漏れ
一部のCDN設定では、国内からのアクセスのみCDNを経由し、海外からは直通(またはその逆)になっている場合があります。攻撃者が異なる地域からDNSを引くことで、生IPを取得する可能性があります。Cloudflareでは稀ですが、設定ミスで起こり得ます。
7. サーバーの隣人(リスク:低)
同じサーバー(IP)に同居している別のWebサイトが攻撃を受けたり、IPが特定されたりすることで、巻き添えであなたのIPも特定されることがあります。
あなたのIPは大丈夫? 漏洩チェックリスト
| チェック項目 | 推奨ツール | 解説 |
|---|---|---|
| DNS履歴 | SecurityTrails, DNSdumpster | 過去のAレコードに現在のIPが残っていないか確認。 |
| メールヘッダー | メーラーの「ソースを表示」 | サイトから届いたメールのヘッダーにIPが含まれていないか。 |
| サブドメイン | Sublist3r, OneForAll | admin, test, ftp などのサブドメインがIPを晒していないか。 |
| Pingテスト | Ping.pe, Global ping | 世界各地からPingし、すべてCloudflareのIPが返ってくるか。 |
| 証明書ログ | crt.sh, Censys | IPアドレスで検索し、あなたのドメインの証明書が出てこないか。 |
鉄壁の防御を構築する4つのステップ
ステップ1:IPアドレスの変更(漏洩している場合)
もし既にIPが特定され攻撃を受けているなら、小手先の対策では不十分です。
サーバーのIPを変更してください。AWSやVPSなら「Elastic IPの付け替え」や「スナップショットからの再構築」でIPを変えられます。これが最も確実な第一歩です。
ステップ2:全トラフィックをCloudflare経由にする
DNS設定画面で、すべてのサブドメインの雲マークを「オレンジ(Proxied)」にします。
メールサーバーなどでどうしても生IPが必要な場合は、Webサーバーとは**別のIP(別のサーバー)**に分けてください。
ステップ3:メール送信は外部サービスを使う
Webサーバーから直接 sendmail や postfix でメールを送るのはやめましょう。
Instead, use:
- SendGrid / Mailgun / Amazon SES: これらのAPI経由でメールを送れば、メールヘッダーには彼らのIPが載り、あなたのサーバーIPは隠せます。
ステップ4:ファイアウォールでCloudflare以外を遮断(最重要)
これが究極の防御です。
「CloudflareのIPアドレス帯域」からのアクセスのみを許可し、それ以外のすべてのアクセス(80/443ポート)をファイアウォールレベルで遮断します。
これにより、仮に攻撃者が生IPを知っていたとしても、パケットを送りつけることすらできなくなります。
CloudflareのIP範囲は公式サイトで公開されています。
iptablesでの設定例(概念):
# CloudflareのIPを許可
iptables -A INPUT -p tcp -m multiport --dports 80,443 -s 173.245.48.0/20 -j ACCEPT
# ... (他のCF IPレンジも同様に追加) ...
# それ以外は拒否
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j DROP※ SSHポート(22)を締め出さないように十分注意してください!
さらに高度な対策:Cloudflare Tunnel
ポート開放すらしたくない場合は、Cloudflare Tunnel (旧 Argo Tunnel) がおすすめです。
サーバー内に cloudflared というデーモンを常駐させ、内側からCloudflareへのトンネルを掘ります。
- メリット: インバウンドポート(80/443)を一切開ける必要がありません。ファイアウォールですべて閉じてOKです。
- セキュリティ: 源IPを狙う攻撃は物理的に不可能になります。
まとめ
DDoS対策は、Cloudflareを導入しただけでは完了しません。「源IPを隠すこと」がセットで初めて効果を発揮します。
- DNS履歴やメールヘッダーからIPが漏れていないか確認する。
- 漏れていたらIPを変える。
- ファイアウォールでCloudflare以外のアクセスを弾く、またはTunnelを使う。
これで、夜中に叩き起こされる確率はグッと減るはずです。
Cloudflare源IP漏洩対策フロー
Webサーバーの源IPアドレス漏洩を防ぎ、DDoS攻撃を回避する設定手順
⏱️ Estimated time: 30 min
- 1
Step1: 漏洩チェック
SecurityTrailsなどでDNS履歴を確認し、サイトからのメールヘッダーを検査してIPが露出していないか確認。 - 2
Step2: IP変更(必要な場合)
既に漏洩している場合は、プロバイダの機能を使ってサーバーのIPアドレスを変更する。 - 3
Step3: DNS設定の修正
Cloudflareダッシュボードで、Webに関連する全てのサブドメインが「Proxied(オレンジ色の雲)」になっているか確認。 - 4
Step4: ファイアウォール設定
サーバーのファイアウォール(iptables/UFW/Security Group)で、80/443ポートへのアクセスをCloudflareのIPレンジのみに制限する。
FAQ
Cloudflare Tunnelとは何ですか?
Cloudflare以外のIPをブロックしたら、自分もアクセスできなくなりませんか?
メールサーバーもCloudflareで保護できますか?
3 min read · 公開日: 2025年12月1日 · 更新日: 2026年1月22日
関連記事
Next.js ファイルアップロード完全ガイド:S3/Qiniu Cloud 署名付き URL 直接アップロード実践

Next.js ファイルアップロード完全ガイド:S3/Qiniu Cloud 署名付き URL 直接アップロード実践
Next.js Eコマース実践:カートと Stripe 決済の完全実装ガイド

Next.js Eコマース実践:カートと Stripe 決済の完全実装ガイド
Next.js ユニットテスト実践:Jest + React Testing Library 完全設定ガイド


コメント
GitHubアカウントでログインしてコメントできます