言語を切り替える
テーマを切り替える

CloudflareオリジンIPホワイトリスト設定:非CFトラフィックを遮断してオリジンを守る3つの方法

オリジンIPの漏洩は、Cloudflareによる保護を無意味にします。攻撃者にIPを特定されると、Cloudflareを回避してサーバーへ直接攻撃を仕掛けられるようになり、DDoSトラフィックが直撃するだけでなく、ポートスキャンや脆弱性の探知といった脅威に晒されます。漏洩の経路は、SSL証明書の検索サイトや過去のDNSレコード、CDNを経由していないサブドメインやメールシステムなど多岐にわたります。

オリジンサーバーを真に保護するには、Cloudflareのプロキシだけでは不十分です。サーバー側でファイアウォールを構成し、Cloudflareの回線用IPからのアクセスのみを許可して、それ以外のすべてのトラフィックを完全に遮断する必要があります。本記事では、最も簡単な宝塔パネル、柔軟な純粋なNginx、最も安全なオリジン証明書検証の3つの方法を解説します。完全な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つのアドレスでリストを管理しています:

これらはブックマークしておくことをお勧めします。今後の更新メンテナンスで必要になります。

最新の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 - 宝塔パネルでCloudflare IPホワイトリストを設定(最も簡単)

宝塔パネル(aaPanel)を使っているなら、非常に簡単です。標準のNginxファイアウォールプラグインを使えば、クリック操作だけで設定でき、設定ファイルを手書きする必要はありません。

ステップ1:Nginx無料ファイアウォールのインストール

aaPanelを開き、左側メニューのApp Store(ソフトウェアストア)をクリックし、Nginx Free Firewall(Nginx無料ファイアウォール)を探します。インストールされていない場合はインストールしてください。数秒で終わります。

ステップ2:IPホワイトリストの設定

インストール後、ファイアウォールの設定画面に入ります。

  1. Global Configuration(グローバル設定)をクリック
  2. IP Whitelist(IPホワイトリスト)セクションを見つけ、Settingsをクリック
  3. ポップアップ画面で、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.conf

server ブロック内に以下の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 -t

syntax is ok と表示されたら、Nginxをリロードします:

sudo systemctl reload nginx

これで完了です。
この方法の利点:設定ファイルを独立して管理できるため、IPリストの更新時は cloudflare-whitelist.conf を書き換えるだけで済み、複数のサイトでこのファイルを共有できます。

CloudflareオリジンIPホワイトリスト設定の完全フロー

IPリスト取得から検証まで、宝塔パネル・純粋なNginx・オリジン証明書の3方法を網羅

Estimated time: PT20M

  1. 1

    Step 1: Cloudflare回線用IPリストの取得

    Cloudflare公式IPリストページにアクセス:
  2. 2

    Step 2: 方法1:宝塔パネル(最も簡単)

    手順:
  3. 3

    Step 3: 方法2:純粋なNginx(より柔軟)

    手順:
  4. 4

    Step 4: 方法3:オリジン証明書による認証(最安全)

    手順:
  5. 5

    Step 5: 設定の検証

    スマホの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/TLSOrigin Server へ移動します。

  1. Create Certificate をクリック
  2. ドメインを選択(*.example.com などのワイルドカード可)
  3. 有効期限を最大(15年)に設定(管理が楽です)
  4. 作成を実行

表示される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;
    
    # その他の設定...
}

より厳密な検証が必要なら、Cloudflareのクライアント証明書検証も追加できます:

ssl_client_certificate /etc/nginx/certs/cloudflare-client.crt;
ssl_verify_client on;

テストしてNginxをリロードします:

sudo nginx -t && sudo systemctl reload nginx

ヒント:一般サイトはIPホワイトリストで十分です。セキュリティ要件が極めて高い場合だけ、この層まで積み上げればよいです。

設定のテストとトラブルシューティング

設定を適用したら、必ずテストを行ってください。

テスト方法

方法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:宝塔パネルでIP帯域をインポートしても効かない
考えられる原因:

  • ファイアウォールプラグインが無効
  • ルール未保存、またはNginx未再起動
    解決策:
  1. Nginxファイアウォールプラグインが有効(緑表示)か確認
  2. 宝塔パネルからNginxを再起動
  3. 宝塔ファイアウォールのログでエラーがないか確認

問題4:IPv6でのアクセスが素通しになる
考えられる原因:

  • IPv4のホワイトリストしか設定していない
    解決策:
  1. CFのIPv6セグメントをホワイトリストに追加
  2. またはファイアウォールでIPv6を無効化(IPv6不要な場合)

その他のセキュリティ対策

ホワイトリストは第一歩です。あわせて検討したい項目:

  • SSHポートの変更:デフォルト22はスキャンされやすいため、高位ポートへ
  • OSの定期更新:パッチ適用で既知脆弱性を減らす
  • Nginxバージョン非表示nginx.confserver_tokens off;
  • Under Attackモード:大規模攻撃時はCloudflareの5秒シールドを有効化

Cloudflare IPリストの更新とメンテナンス

前述のとおり、CloudflareのIPリストは変わります。更新を怠ると、新しいCF IPが遮断され、アクセス障害の原因になります。

定期更新が必要な理由

Cloudflareは世界中にデータセンターを持ち、インフラ拡張に伴いIP帯域が調整されます。毎日変わるわけではありませんが、数ヶ月単位で更新があることがあります。古いリストのままだと、新しいオリジンIPからのリクエストが拒否され、一部地域で502や接続失敗が起きます。

手動更新の手順

2〜3ヶ月に一度 https://www.cloudflare.com/ips/ を開き、新規セグメントがないか確認します。更新がある場合:

  1. ホワイトリスト設定ファイルを編集
  2. 新しいIPセグメントを追加
  3. sudo nginx -t で構文確認
  4. sudo systemctl reload nginx で反映

自動更新スクリプト(任意)

以下は、最新の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

毎月1日午前3時に自動更新し、ログは /var/log/cf-whitelist-update.log に記録されます。

ヒント:cron設定前に必ず手動で1回実行し、問題がないことを確認してください。バグがあると定期実行で設定が壊れる恐れがあります。

まとめ

要点はひとつです。オリジンを守るには、Cloudflareのホワイトリスト設定が必須です。

3つの方法を振り返ると:

  • 宝塔パネル:最も簡単でクリック操作。初心者向け。欠点はIPv4中心。
  • 純粋なNginx:IPv6対応で柔軟。設定ファイルの管理・更新がしやすく、Linuxの基礎がある人向け。
  • オリジンサーバー証明書:IP制限+証明書の二重防御。セキュリティ要件が極めて高い場合向け。

どの方法でも、設定後は必ずテストしてください。スマホ4GでオリジンIP直アクセスが403なら成功。ドメイン経由で正常表示されることも確認しましょう。

最後に:CloudflareのIPリストは更新されます。定期確認するか、自動更新スクリプトで運用を楽にしてください。設定したきり放置すると、数ヶ月後に新セグメント未反映で障害が出ることがあります。

役に立ったら、Cloudflare利用中の仲間にも共有してください。オリジンが守られれば、攻撃者のハードルは大きく上がります。

今すぐ myssl.com などのSSL検査サイトで、オリジンIPが露出していないか確認してみてください。漏れていれば、本文の手順でホワイトリストを設定すれば、今からでも遅くありません。

FAQ

オリジンIPはなぜ漏洩するのですか?よくある経路は?
主な漏洩経路は次のとおりです。

1) myssl.comなどのSSL証明書検索サイトでオリジンIPが表示される:
• Cloudflare CDN利用中でも証明書検査でオリジンIPが露出することがある

2) DNS履歴がキャッシュされている:
• 一部サービスはデータを永久保存
• 今はCloudflareでも、過去のオリジンIPが履歴から見つかることがある

3) サブドメインやメールがCDN未経由:
• サブドメインへのpingやメール原文ヘッダーからオリジンIPが漏れる

漏洩後は攻撃者がCloudflareを迂回してオリジンを直撃し、DDoSが直撃したりポートスキャン・脆弱性探知が可能になる。
CloudflareのオリジンIPリストはどこで取得し、どう更新を保つ?
Cloudflare公式が3つのURLで公開しています:
• 完全リスト:https://www.cloudflare.com/ips/
• IPv4:https://www.cloudflare.com/ips-v4
• IPv6:https://www.cloudflare.com/ips-v6

現状の範囲:
• IPv4は15のCIDR(約178万IP)
• IPv6は7セグメント

更新の目安:
• IPリストは不定期に更新される
• 2〜3ヶ月ごとに公式ページで新規セグメントを確認
• cronで月次自動更新スクリプトを使う方法もある

更新が遅いと新しいCF IPがファイアウォールで遮断され、一部地域でアクセス失敗の原因になる。
3つの構成方法の違いは?どれを選ぶべき?
1) 宝塔パネルのホワイトリスト:
• 最も簡単でクリック操作、初心者向け
• IPv4のみで、IPv6は手動設定が必要

2) 純粋なNginx:
• IPv6対応で柔軟
• 設定ファイルを分離して更新しやすい
• 複数サイトで共有可能
• Linuxの基礎がある人向け

3) オリジンサーバー証明書:
• 最も安全(IPホワイトリスト+証明書の二重防御)
• IPが漏れても直アクセスは証明書エラー
• セキュリティ要件が極めて高い場合向け

一般サイトはIPホワイトリストで十分。高セキュリティ要件ならオリジン証明書を追加。
Nginxホワイトリストの設定手順の要点は?
手順の概要:

1) 設定ファイル作成:
• sudo nano /etc/nginx/cloudflare-whitelist.conf
• CFのIPv4/IPv6全セグメントにallowを記述
• 最後に必ずdeny all(allowの後に置く)

2) サイト設定の編集:
• /etc/nginx/sites-available/your-site.conf
• serverブロックに include /etc/nginx/cloudflare-whitelist.conf
• HTTP・HTTPSの両方に追加

3) テストとリロード:
• sudo nginx -t で構文確認
• sudo systemctl reload nginx

IPリスト更新時は cloudflare-whitelist.conf だけ直せばよい。
設定後の検証方法とよくあるトラブルは?
検証:
1) スマホ4G(非CF)でオリジンIP直アクセス → 403 Forbidden になること
2) ドメイン経由(CFプロキシ)→ 正常表示

よくある問題:

1) 502:
• IPセグメントが15 IPv4+7 IPv6すべて入っているか
• sudo nginx -t で構文確認
• ファイアウォールが有効か

2) CF経由も403:
• deny all が allow の後にあるか
• https://www.cloudflare.com/ips/ でリストが最新か

3) IPv6迂回:
• CFのIPv6セグメントを追加
• またはサーバーでIPv6を無効化
Cloudflare IPリストの自動更新はどう設定する?
bashスクリプトで最新IPを取得し設定を更新できます。

流れ:
1) 既存設定をバックアップ
2) CF公式から最新IPv4/IPv6リストを取得
3) allow+deny all の新設定を生成
4) nginx -t が通ればリロード、失敗ならバックアップ復元

設定例:
• /root/update-cf-whitelist.sh に保存
• chmod +x で実行権限
• crontab -e で毎月1日3時:0 3 1 * * /root/update-cf-whitelist.sh >> /var/log/cf-whitelist-update.log 2>&1

初回は手動実行でテストしてからcronを設定すること。

7分で読めます · 公開日: 2025年11月21日 · 更新日: 2026年6月8日

関連記事

コメント

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