CloudflareオリジンIPホワイトリスト設定:非CFトラフィックを完全に遮断してサーバーを保護する3つの方法

先月、友人のサイトでかなり厄介な問題が起きました。彼の個人ブログはCloudflare CDNを利用しており、ある程度の攻撃は防げると思っていました。しかし、数日も経たないうちにサーバーがダウンしてしまったのです。何が起きたと思いますか?攻撃者はCloudflareを回避してオリジンサーバー(実サーバー)のIPを特定し、そこへ直接集中攻撃を仕掛けたのです。
これは実はよくある話です。多くの人は「Cloudflareを通していれば安心」と考えがちですが、実際はそうではありません。オリジンIPが漏洩する経路はいくつもあります——SSL証明書の履歴検索サイト、過去のDNSレコードのキャッシュ、CDNを通していないサブドメインなど…。一度攻撃者にオリジンIPを知られてしまえば、Cloudflareがいかに強力でも意味がありません。
結論から言うと、オリジンサーバーを本当に保護するためには、Cloudflareによるプロキシだけでは不十分です。サーバー側でファイアウォールを設定し、Cloudflareからのアクセス(回線用IP)のみを許可し、それ以外のすべてのトラフィックを遮断する必要があります。面倒に聞こえますか?実は設定はそれほど複雑ではありません。今回は3つの方法についてお話しします:最も簡単なaaPanel(宝塔パネル)、柔軟なNginx設定、そして最も安全なオリジン証明書認証です。
GUIパネルを使っている方も、コマンドライン派の方も、この記事が役立つはずです。完全なIPリスト、設定手順、テスト方法、よくある問題のトラブルシューティングまで、手取り足取り解説します。
なぜ非CFトラフィックを制限すべきなのか?オリジンIP漏洩の現実的リスク
まず、オリジンIPがどのように漏洩するかについてお話ししましょう。私も以前は「ドメイン解決をCloudflareに向ければ十分」と甘く考えていましたが、攻撃者の手口は多岐にわたります。
よくあるIP漏洩ルート
最も典型的なのはSSL証明書検索です。myssl.comのようなサイトで証明書をチェックすると、実際のIPが暴露される可能性があります。CloudflareのCDNを使用していても、SSL証明書を発行・設定していると、その履歴からオリジンIPが見えてしまうことがあるのです。初めてこれを知った時は衝撃でした。「ここを攻撃してください」と言っているようなものですから。
次に過去のDNS解決履歴です。インターネット上の多くのDNSクエリサービスは解決結果をキャッシュしており、中にはデータを永久保存しているサービスもあります。現在ドメインをCloudflareに向けていても、過去の履歴を調べれば、以前使っていたオリジンIPが見つかることがあります。
サブドメインやメールシステムも大きな落とし穴です。メインサイトはCDNを通しているのに、サブドメインやメールサーバーを忘れているケースです。攻撃者が mail.example.com にpingを打ったり、メールのヘッダー情報を確認したりするだけで、オリジンIPが露呈します。私の友人のサーバー管理者はこれでやられました。メインサイトは完璧だったのに、メールサーバーのIPから芋づる式に本サーバーが特定され、ダウンさせられました。
漏洩後の被害
オリジンIPが漏れると、攻撃者はCloudflareを回避してサーバーを直接攻撃できます。DDoS攻撃のトラフィックが直接届き、小規模なサーバーなら一瞬でパンクします。さらに厄介なことに、ポートスキャンや脆弱性スキャンも直接行われるようになります。
こうなるとCloudflareの防御は無意味です。CFの管理画面では平和に見えても、実際のサーバーはボロボロという状態になります。技術フォーラムでも「CDNを入れたのにサーバーが攻撃されて落ちる、なぜIPがバレたのか?」という相談をよく見かけますが、これはホワイトリスト設定をしていない典型的な結果です。
Cloudflare回線用IPリストはどこ?最新IP帯域の取得方法
ホワイトリスト設定の第一歩は、Cloudflareの回線用IPリスト(Origin IP List)を知ることです。これは難しいことではなく、公式サイトで公開されています。
公式IPリストのアドレス
Cloudflareは以下の3つのアドレスでリストを管理しています:
- 完全リスト: https://www.cloudflare.com/ips/
- IPv4リスト: https://www.cloudflare.com/ips-v4
- IPv6リスト: https://www.cloudflare.com/ips-v6
これらはブックマークしておくことをお勧めします。今後の更新メンテナンスで必要になります。
最新のCloudflare IPv4 IP帯域
現時点で、CloudflareのIPv4回線用IP帯域は以下の15個のCIDR(IPアドレスの範囲を表す表記法)で構成されています:
173.245.48.0/20
103.21.244.0/22
103.22.200.0/22
103.31.4.0/22
141.101.64.0/18
108.162.192.0/18
190.93.240.0/20
188.114.96.0/20
197.234.240.0/22
198.41.128.0/17
162.158.0.0/15
104.16.0.0/13
104.24.0.0/14
172.64.0.0/13
131.0.72.0/22これら15のIP帯域で、合計約178万個のIPアドレスをカバーしています。
IPv6アドレス帯域
サーバーでIPv6が有効になっている場合は、以下のIPv6帯域も追加する必要があります:
2400:cb00::/32
2606:4700::/32
2803:f800::/32
2405:b500::/32
2405:8100::/32
2a06:98c0::/29
2c0f:f248::/32重要なヒント: CloudflareのIPリストは不定期に更新されます。1〜2ヶ月に一度は公式ページを確認し、ホワイトリストが最新であることを確認してください。そうしないと、新しく追加されたCFのIPがファイアウォールでブロックされ、アクセスエラー(502 Bad Gateway等)の原因になる可能性があります。
方法1 - aaPanel(宝塔)でCloudflare IPホワイトリストを設定(最簡単)
もしaaPanel(中国では宝塔面板として有名)を使用しているなら、非常に簡単です。標準のNginxファイアウォールプラグインを使えば、クリック操作だけで設定でき、設定ファイルを手書きする必要はありません。
ステップ1:Nginx無料ファイアウォールのインストール
aaPanelを開き、左側メニューのApp Store(ソフトウェアストア)をクリックし、Nginx Free Firewall(Nginx無料ファイアウォール)を探します。インストールされていない場合はインストールしてください。数秒で終わります。
ステップ2:IPホワイトリストの設定
インストール後、ファイアウォールの設定画面に入ります。
- Global Configuration(グローバル設定)をクリック
- IP Whitelist(IPホワイトリスト)セクションを見つけ、Settingsをクリック
- ポップアップ画面で、CloudflareのIPv4アドレス帯域を順に追加します
ここで少しコツがあります。aaPanelは開始IPと終了IPの入力を求められる場合がありますが、手元にあるのはCIDR形式(例:173.245.48.0/20)です。
オンラインの「CIDR to IP Range」変換ツールを使って変換することもできますが、15個も手作業でやるのは大変です。ネット上に「aaPanel Cloudflare whitelist import list」などで検索すると、インポート用の形式に変換済みのリストが見つかるので、それをコピー&ペーストするのが早いです。
4. すべて追加したらImportをクリック
5. Nginxサービスを再起動
注意: aaPanelの一部のバージョンではIPv4のみサポートしており、IPv6のホワイトリスト設定がGUIからできない場合があります。サーバーでIPv6が有効な場合は、方法2のように設定ファイルを直接編集することをお勧めします。
ステップ3:設定の有効確認
設定が終わったら、必ずテストしましょう:
- スマホの4G回線(非CFネットワーク)でオリジンIPに直接アクセス → 403 Forbidden エラーが表示されれば成功
- ドメイン経由(CFプロキシ)でアクセス → 正常に表示される
もし502エラーが出る場合は、ホワイトリストの設定に問題があります。IP帯域が不足していないか、ファイアウォールが有効になっているか確認してください。
方法2 - 純粋なNginxでのホワイトリスト設定(より柔軟)
パネルを使わない場合や、より柔軟な設定を好む場合は、Nginxの設定ファイルを直接編集するのがベストです。この方法はIPv6も完全にサポートしています。
ステップ1:Cloudflare IP設定ファイルの作成
SSHでサーバーにログインし、ホワイトリスト管理用の設定ファイルを作成します:
sudo nano /etc/nginx/cloudflare-whitelist.confファイルに以下の内容を入力します:
# Cloudflare IPv4 IP ranges
allow 173.245.48.0/20;
allow 103.21.244.0/22;
allow 103.22.200.0/22;
allow 103.31.4.0/22;
allow 141.101.64.0/18;
allow 108.162.192.0/18;
allow 190.93.240.0/20;
allow 188.114.96.0/20;
allow 197.234.240.0/22;
allow 198.41.128.0/17;
allow 162.158.0.0/15;
allow 104.16.0.0/13;
allow 104.24.0.0/14;
allow 172.64.0.0/13;
allow 131.0.72.0/22;
# Cloudflare IPv6 IP ranges
allow 2400:cb00::/32;
allow 2606:4700::/32;
allow 2803:f800::/32;
allow 2405:b500::/32;
allow 2405:8100::/32;
allow 2a06:98c0::/29;
allow 2c0f:f248::/32;
# Deny all other IPs
deny all;保存します(Ctrl+O → Enter → Ctrl+X)。
重要: 最後の deny all; は非常に重要です。これは「上記で許可したIP以外はすべて拒否する」という意味です。絶対に忘れないでください。
ステップ2:サイト設定ファイルへの読み込み
サイトごとの設定ファイルを編集します。通常は /etc/nginx/sites-available/ (Debian/Ubuntu) または /etc/nginx/conf.d/ (CentOS) にあります。
sudo nano /etc/nginx/sites-available/your-site.confserver ブロック内に以下の1行を追加します:
server {
listen 80;
server_name example.com;
# Cloudflareホワイトリストを読み込み
include /etc/nginx/cloudflare-whitelist.conf;
# その他の設定...
root /var/www/html;
index index.html;
}HTTPS(443ポート)の server ブロックがある場合は、そちらにも同様に追加してください。
ステップ3:テストとリロード
設定ファイルの構文チェックを行います:
sudo nginx -tsyntax is ok と表示されたら、Nginxをリロードします:
sudo systemctl reload nginxこれで完了です。
この方法の利点:設定ファイルを独立して管理できるため、IPリストの更新時は cloudflare-whitelist.conf を書き換えるだけで済み、複数のサイトでこのファイルを共有できます。
CloudflareオリジンIPホワイトリスト設定フロー
IPリストの取得から設定検証まで、aaPanel、Nginx、オリジン証明書の3つの方法を網羅
⏱️ Estimated time: 20 min
- 1
Step1: Cloudflare回線用IPリストの取得
Cloudflare公式IPリストページにアクセス:
• 完全リスト:https://www.cloudflare.com/ips/
• IPv4リスト:https://www.cloudflare.com/ips-v4
• IPv6リスト:https://www.cloudflare.com/ips-v6
現在のIP範囲:
• IPv4は15個のCIDRブロック
• IPv6は7個のブロック
推奨:これらのページをブックマークし、2-3ヶ月に一度更新を確認すること。 - 2
Step2: 方法1:aaPanel(宝塔)での設定
手順:
1. aaPanel → App Store → Third-party applications
2. Nginx Free Firewallをインストール
3. Firewall設定 → Global Configuration → IP Whitelist → Settings
4. CloudflareのIPv4アドレス帯域を順次追加
(CIDR形式をIP範囲に変換して入力する必要がある場合あり)
5. 追加完了後、Importボタンをクリック
6. Nginxを再起動
注意:IPv6の設定が必要な場合は設定ファイルの直接編集を推奨 - 3
Step3: 方法2:純粋なNginx設定(推奨)
手順:
1. 設定ファイルの作成:
sudo nano /etc/nginx/cloudflare-whitelist.conf
2. allowルールとdenyルールの記述:
allow 173.245.48.0/20;
# ... すべてのIPv4/IPv6を追加
deny all; # 重要:必ず最後に記述
3. サイト設定ファイルの編集:
sudo nano /etc/nginx/sites-available/your-site.conf
serverブロック内に以下を追加:
include /etc/nginx/cloudflare-whitelist.conf;
4. テストと適用:
sudo nginx -t
sudo systemctl reload nginx - 4
Step4: 方法3:オリジン証明書による認証(最安全)
手順:
1. Cloudflareダッシュボード:
• SSL/TLS → Origin Server → Create Certificate
• ドメイン選択、有効期限15年を選択
2. 証明書の保存:
• 公開鍵:/etc/nginx/certs/cloudflare.crt
• 私有鍵:/etc/nginx/certs/cloudflare.key
• 権限設定:chmod 600 cloudflare.key
3. Nginx設定:
HTTPSのserverブロックで以下を設定:
ssl_certificate /etc/nginx/certs/cloudflare.crt;
ssl_certificate_key /etc/nginx/certs/cloudflare.key;
include /etc/nginx/cloudflare-whitelist.conf;
4. テストとリロード
メリット:IP制限と証明書認証の二重保護。IPが漏れても接続自体が拒否される。 - 5
Step5: 設定の検証
スマホの4G回線(非CF)でオリジンIPに直接アクセスし、403 Forbiddenになるか確認。次にドメイン経由で正常に表示されるか確認。502エラーが出る場合はIPリストの不足や構文エラーを確認。
方法3 - Cloudflareオリジン証明書による設定(最も安全)
上記2つの方法でも十分安全ですが、セキュリティ要件が極めて高い場合は、さらにオリジン証明書認証(Authenticated Origin Pullsにも関連)組み合わせることができます。これにより、万が一IPが漏れても、Cloudflareの証明書を持たないアクセスはTLSハンドシェイクで拒否されます。
Cloudflareオリジン証明書とは
Cloudflareが発行するTLS証明書で、Cloudflareのエッジサーバーとあなたのオリジンサーバー間の通信暗号化にのみ使用されます。一般的なブラウザはこの証明書を信頼しません(Cloudflareのみが信頼します)。そのため、攻撃者がIP直でアクセスしても証明書エラーとなり接続できません。
ステップ1:オリジン証明書の生成
Cloudflareダッシュボードにログインし、ドメインを選択して SSL/TLS → Origin Server へ移動します。
- Create Certificate をクリック
- ドメインを選択(
*.example.comなどのワイルドカード可) - 有効期限を最大(15年)に設定(管理が楽です)
- 作成を実行
表示される2つの内容を保存します:
- Origin Certificate (公開鍵PEM)
- Private Key (秘密鍵)
これらをサーバーに保存します。例:
sudo nano /etc/nginx/certs/cloudflare.crt
# 証明書の内容を貼り付け
sudo nano /etc/nginx/certs/cloudflare.key
# 秘密鍵の内容を貼り付け秘密鍵の権限を適切に設定します:
sudo chmod 600 /etc/nginx/certs/cloudflare.keyステップ2:Nginxでの証明書設定
サイト設定ファイルのHTTPS部分を修正します:
server {
listen 443 ssl http2;
server_name example.com;
# Cloudflareオリジン証明書を使用
ssl_certificate /etc/nginx/certs/cloudflare.crt;
ssl_certificate_key /etc/nginx/certs/cloudflare.key;
# IPホワイトリストも併用
include /etc/nginx/cloudflare-whitelist.conf;
# その他の設定...
}さらに厳密な検証(Authenticated Origin Pulls)を行う場合は、CloudflareのCAルート証明書を検証する設定も追加できますが、通常は上記のオリジン証明書の使用だけで十分な効果があります。
設定後、Nginxをリロードします。
設定のテストとトラブルシューティング
設定を適用したら、必ずテストを行ってください。
テスト方法
方法1:非CF回線からのIP直アクセス
スマホのWi-Fiを切り、4G/5G回線でブラウザを開き、http://123.45.67.89 のようにIPアドレスを入力します。設定が正しければ 403 Forbidden が表示されます。
方法2:curlコマンド
ローカルPC(サーバー外)のターミナルで実行します:
curl -I http://your-origin-ip結果が 403 Forbidden なら成功です。
方法3:ドメイン経由アクセス
ブラウザで https://example.com にアクセスし、正常に表示されるか確認します。ここで403が出る場合は設定ミスです。
よくある問題と解決策
問題1:設定後、サイトが502エラーになる
考えられる原因:
- IPホワイトリストが不完全で、Cloudflareの一部のIPがブロックされている
- Nginxの設定構文エラー
解決策: sudo nginx -tで構文チェック- Nginxのエラーログを確認:
sudo tail -f /var/log/nginx/error.log - IPv4/IPv6のリストが最新か確認
問題2:CF経由でも403になる
考えられる原因:
deny all;がallowルールの前に書かれている- CFの回線IPが更新され、リストに含まれていない
解決策: allowルールがdeny all;より前にあるか確認- 公式サイトで最新IPリストを確認
問題3:IPv6でのアクセスが素通しになる
考えられる原因:
- IPv4のホワイトリストしか設定していない
解決策: - CFのIPv6帯域も追加する、またはサーバー側でIPv6を無効化する
Cloudflare IPリストの自動更新
CloudflareのIPリストは変更される可能性があります。手動での更新が面倒な場合は、シェルスクリプトで自動化することをお勧めします。
自動更新スクリプト(例)
以下は、最新のIPリストを取得してNginx設定を更新するスクリプトの例です:
#!/bin/bash
# Cloudflare IP Whitelist Auto-update Script
CF_IPV4_URL="https://www.cloudflare.com/ips-v4"
CF_IPV6_URL="https://www.cloudflare.com/ips-v6"
NGINX_CONF="/etc/nginx/cloudflare-whitelist.conf"
BACKUP_CONF="/etc/nginx/cloudflare-whitelist.conf.bak"
# 既存設定をバックアップ
cp $NGINX_CONF $BACKUP_CONF
# 新しい設定を生成
echo "# Cloudflare IP Whitelist - Auto-generated on $(date)" > $NGINX_CONF
echo "" >> $NGINX_CONF
# IPv4
echo "# IPv4 ranges" >> $NGINX_CONF
curl -s $CF_IPV4_URL | sed 's/^/allow /' | sed 's/$/;/' >> $NGINX_CONF
echo "" >> $NGINX_CONF
# IPv6
echo "# IPv6 ranges" >> $NGINX_CONF
curl -s $CF_IPV6_URL | sed 's/^/allow /' | sed 's/$/;/' >> $NGINX_CONF
echo "" >> $NGINX_CONF
# Deny others
echo "# Deny all other IPs" >> $NGINX_CONF
echo "deny all;" >> $NGINX_CONF
# テストとリロード
if nginx -t; then
echo "構文チェックOK、リロードします..."
systemctl reload nginx
echo "✓ Cloudflareホワイトリスト更新完了"
else
echo "✗ エラーが発生しました。バックアップを復元します..."
cp $BACKUP_CONF $NGINX_CONF
echo "復元完了。ログを確認してください"
fiこれを /root/update-cf-whitelist.sh などの名前で保存し、実行権限を与えます (chmod +x)。
その後、crontab -e で毎月1回実行するように設定します:
0 3 1 * * /root/update-cf-whitelist.sh >> /var/log/cf-whitelist-update.log 2>&1まとめ
オリジンサーバーをDDoS攻撃やスキャンから守るには、「Cloudflareを入れたから安心」ではなく、**「Cloudflare以外からのアクセスを拒否する」**設定が不可欠です。
- 初心者の方:aaPanel(宝塔)などのGUIでの設定がおすすめですが、IPリストの更新を忘れずに。
- Linux運用者:Nginx設定ファイルによる管理が柔軟で推奨されます。
- 高セキュリティ要件:オリジン証明書を併用し、二重の防御壁を構築しましょう。
今すぐ myssl.com などで自分のサイトをチェックしてみてください。もしオリジンIPが見えてしまっていたら、上記の方法ですぐに対策することをお勧めします。転ばぬ先の杖、サイバーセキュリティの基本です。
FAQ
オリジンIPはなぜ漏洩するのですか?
CloudflareのIPリストはどこで確認できますか?
設定後、サイトが502エラーになります。なぜですか?
どの設定方法が一番おすすめですか?
IPリストの自動更新は必要ですか?
7 min read · 公開日: 2025年11月21日 · 更新日: 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アカウントでログインしてコメントできます