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

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つのアドレスでリストを管理しています:

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

最新の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ホワイトリストの設定

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

  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リストの取得から設定検証まで、aaPanel、Nginx、オリジン証明書の3つの方法を網羅

⏱️ Estimated time: 20 min

  1. 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. 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. 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. 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. 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/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;
    
    # その他の設定...
}

さらに厳密な検証(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はなぜ漏洩するのですか?
主な原因は3つあります。1) myssl.comなどのSSL証明書検索サイトで履歴が表示されること。2) Cloudflare導入前のDNS履歴がキャッシュされていること。3) サブドメインやメールサーバーがCDNを通しておらず、そこから芋づる式に特定されることです。
CloudflareのIPリストはどこで確認できますか?
Cloudflare公式サイトで公開されています。完全リストは https://www.cloudflare.com/ips/ 、IPv4のみは https://www.cloudflare.com/ips-v4 、IPv6のみは https://www.cloudflare.com/ips-v6 です。
設定後、サイトが502エラーになります。なぜですか?
最も可能性が高いのは、ホワイトリストに必要なCloudflareのIP帯域がすべて含まれていないことです。特に最近追加されたIPやIPv6帯域が漏れていないか確認してください。また、ファイアウォール(Nginx)の設定構文エラーの可能性もあります。
どの設定方法が一番おすすめですか?
一般的なWebサイト管理者には「方法2:純粋なNginx設定」をお勧めします。IPv4/IPv6の両方に対応し、管理も柔軟だからです。セキュリティを極めたい場合は「方法3:オリジン証明書」を併用してください。
IPリストの自動更新は必要ですか?
必須ではありませんが、推奨されます。Cloudflareのインフラ拡張に伴いIP帯域は変更されることがあります。手動で数ヶ月に一度チェックするか、スクリプトで自動化することで、将来的な接続トラブルを防げます。

7 min read · 公開日: 2025年11月21日 · 更新日: 2026年1月22日

コメント

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

関連記事