ESC

Start typing to search across invoices, services, domains, tickets, and more...

Search... Ctrl+K
ネットワーク・IP

Cloudflareでオリジンサーバーの IP を隠す方法:Cloudflare 以外からのアクセスを遮断

6 ステップ 14 分で読めます 25 回閲覧 0
目次

サイトを Cloudflare 経由にすると、訪問者や攻撃者に見えるのは Cloudflare のエッジ IP で、サーバー本来の IP ではなくなります。しかし、実 IP がすでに漏れていたり、サーバーがどこからでも 80/443 番ポートへの接続を受け付けていたりすると、攻撃者は CDN を迂回してオリジンを直接攻撃できます。本記事では、Cloudflare の導入から漏えい経路の確認、ファイアウォールの制限まで、オリジンを本当に「隠す」ための手順を順番に解説します。

要点まとめ

  • Cloudflare のプロキシが隠すのは DNS で解決される IP だけであり、オリジンが任意のアドレスからの 80/443 番ポートへの接続を受け付けていれば、攻撃者は CDN を迂回してオリジンを直接攻撃できます。
  • オリジンサーバーの実 IP が漏れる主な経路は、DNS 履歴、プロキシされていないサブドメイン、メールサービス、IP 直打ちで返される SSL 証明書、そしてアプリケーションからの外部接続です。
  • Cloudflare の迂回を防ぐ鍵は、オリジンのファイアウォールで 80/443 番ポートを Cloudflare 公式の IP レンジからのみ許可することです。
  • Cloudflare の無料プランがプロキシするのは HTTP/HTTPS トラフィックのみで、SSH・データベース・ゲームサーバーなどの TCP/UDP サービスは引き続きサーバー自身のファイアウォールとデータセンターレベルの DDoS 対策に頼る必要があります。
  • IMIDC は DDoS 対策付きの VPS と専用サーバーを提供し、複数 IP にも対応しており、利用者はクライアントセンターのチケットから IP 変更について相談できます。

前提条件 / 事前準備

  • ドメインがすでに Cloudflare に登録されている(ネームサーバーを Cloudflare 指定のものに変更済み)
  • サーバー OS:Ubuntu 22.04 / 24.04、Debian 12、Rocky Linux 9、AlmaLinux 9。Web サーバーは Nginx
  • SSH でログインでき、sudo 権限がある
  • ルール変更後に自分が締め出されないよう、必ず先に SSH ポートをファイアウォールで許可してください。予備のログイン手段として、事業者が提供する VNC/コンソールも開いておくと安心です

手順

ステップ 1:Cloudflare のプロキシを有効にする

Cloudflare ダッシュボードの DNS ページで、サイトの A/AAAA レコードのプロキシステータスを「プロキシ済み」(オレンジの雲)にします。この状態で dig +short example.com を実行すると、サーバーの IP ではなく Cloudflare の IP が返るはずです。

ステップ 2:SSL モードを Full (strict) にする

SSL/TLS 設定で Full (strict) を選択します。オリジン側の証明書には Let's Encrypt を使うか、Cloudflare ダッシュボードで無料の Origin CA 証明書を発行できます(Cloudflare からのみ信頼され、有効期間は最長 15 年)。Flexible モードは使わないでください。Cloudflare とオリジン間が平文通信になるうえ、リダイレクトループも起こりやすくなります。

ステップ 3:実 IP の漏えい経路を確認する

CDN 導入前に、ドメインがすでにサーバーの IP を直接指していた可能性があります。よくある漏えい経路は次のとおりです。

  • DNS 履歴:公開されている DNS 履歴検索サイトは、過去のレコードを保存しています。
  • プロキシされていないサブドメイン:mail、ftp、dev などのサブドメインがグレーの雲のまま、同じサーバーを直接指している。
  • メールサービス:MX レコードが同じマシンを指している、またはサイトから送信されたメールのヘッダーにサーバー IP が含まれている。
  • SSL 証明書とデフォルトサイト:IP で 443 番ポートにアクセスしたときにドメイン名入りの証明書が返ると、インターネット全体をスキャンする検索エンジンに収集されます。
  • アプリケーションからの外部接続:Webhook、リモート画像の取得、pingback などの機能は、オリジン IP を外部にさらします。

IP がすでに漏れていると確認できた場合、Cloudflare だけでは完全には対処できないため、サーバー IP の変更をおすすめします。IMIDC をご利用の方は、クライアントセンターからチケットを送信し、IP の変更や追加についてご相談いただけます。

ステップ 4:80/443 番ポートを Cloudflare の IP のみに許可する

Cloudflare の IP レンジは https://www.cloudflare.com/ips-v4 と https://www.cloudflare.com/ips-v6 で公式に公開されています。以下のコマンドは最新のリストを直接読み込みます。

Ubuntu / Debian(UFW):

sudo ufw allow OpenSSH        # If you changed the SSH port, use: sudo ufw allow <port>/tcp

for ip in $(curl -fsS https://www.cloudflare.com/ips-v4) $(curl -fsS https://www.cloudflare.com/ips-v6); do
  sudo ufw allow proto tcp from "$ip" to any port 80,443 comment 'Cloudflare'
done

# Remove earlier rules that opened 80/443 to everyone (delete whichever actually exist)
sudo ufw delete allow 'Nginx Full'
sudo ufw delete allow 80/tcp
sudo ufw delete allow 443/tcp

sudo ufw enable
sudo ufw status numbered

ルール削除時に「Could not delete non-existent rule」と表示された場合は無視してかまいません。

Rocky / Alma 9(firewalld + ipset):

sudo firewall-cmd --permanent --new-ipset=cf4 --type=hash:net
sudo firewall-cmd --permanent --new-ipset=cf6 --type=hash:net --option=family=inet6

for ip in $(curl -fsS https://www.cloudflare.com/ips-v4); do
  sudo firewall-cmd --permanent --ipset=cf4 --add-entry="$ip"
done
for ip in $(curl -fsS https://www.cloudflare.com/ips-v6); do
  sudo firewall-cmd --permanent --ipset=cf6 --add-entry="$ip"
done

for svc in http https; do
  sudo firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source ipset=cf4 service name=$svc accept"
  sudo firewall-cmd --permanent --add-rich-rule="rule family=ipv6 source ipset=cf6 service name=$svc accept"
done

# Remove the http/https services that were open to all sources
sudo firewall-cmd --permanent --remove-service=http --remove-service=https
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

Cloudflare の IP レンジはときどき更新されるため、数か月ごとに公式リストと照合することをおすすめします。

注意:Docker で公開したポートは UFW のルールを迂回します。サイトを Docker で動かしている場合は、コンテナのポートを 127.0.0.1 にバインドし、ホスト側の Nginx から外部に公開してください。

ステップ 5:IP 直打ちのリクエストを拒否する

Nginx にデフォルトサイトを追加し、IP や未知のホスト名で直接アクセスされた場合は接続を切断して、証明書からドメインが漏れないようにします。

sudo tee /etc/nginx/conf.d/00-default.conf > /dev/null <<'EOF'
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 444;
}
server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    server_name _;
    ssl_reject_handshake on;
}
EOF

ssl_reject_handshake には Nginx 1.19.4 以降が必要です。Ubuntu 24.04、Debian 12、Rocky/Alma 9 の標準バージョンはいずれも対応していますが、Ubuntu 22.04 標準の 1.18 は非対応のため、nginx.org の公式リポジトリからアップグレードしてください。Ubuntu/Debian では、default_server の競合を避けるため、同梱のデフォルトサイトも削除します。

sudo rm -f /etc/nginx/sites-enabled/default

ステップ 6:Nginx で訪問者の実 IP を記録する

Cloudflare 経由になると、Nginx のログに記録される送信元 IP は Cloudflare のエッジ IP になります。realip モジュールで本来の IP を復元しましょう。

{
  for ip in $(curl -fsS https://www.cloudflare.com/ips-v4) $(curl -fsS https://www.cloudflare.com/ips-v6); do
    echo "set_real_ip_from $ip;"
  done
  echo "real_ip_header CF-Connecting-IP;"
} | sudo tee /etc/nginx/conf.d/cloudflare-realip.conf > /dev/null

sudo nginx -t && sudo systemctl reload nginx

ステップ 7:動作を確認する

別のマシンから次のコマンドを実行します。1 行目は接続失敗またはタイムアウトになり、ドメイン経由のアクセスは正常に通るはずです。

curl -m 10 -I http://YOUR_SERVER_IP
curl -I https://example.com

よくある質問(FAQ)

設定後にサイトが開かず、Cloudflare の 521/522 エラーが表示されます。

Cloudflare がオリジンに接続できていない状態です。ファイアウォールにすべての Cloudflare IP レンジ(IPv6 を含む)が登録されているか、Nginx が正常に動いているか、SSL モードとオリジン証明書が合っているかを確認してください。

Cloudflare で SSH やゲーム用ポートなど、Web 以外のサービスも守れますか?

無料プランがプロキシするのは HTTP/HTTPS トラフィックのみで、対応ポートも限られています。SSH、データベース、ゲームサーバーなどの TCP/UDP サービスは Cloudflare を経由しないため、サーバー自身のファイアウォールとデータセンターレベルの DDoS 対策に頼ることになります。

IP ホワイトリストより厳格なオリジン側の検証方法はありますか?

あります。Cloudflare で Authenticated Origin Pulls(mTLS)を有効にすると、オリジンの Nginx は Cloudflare のクライアント証明書を持つリクエストだけを受け付けるようになります。第三者が自分の Cloudflare アカウントからあなたの IP にトラフィックを向けることも防げます。

オリジン IP がすでに攻撃を受けている場合は?

まず攻撃の種類とトラフィック規模を把握し、そのうえで IP を変更して上記の防御設定を完了させます。大規模な攻撃は上流の帯域そのものを埋め尽くすため、その段階では事業者が提供する高防御(DDoS 対策)プランとの併用が必要です。

まとめ

オリジン IP を隠すポイントは 3 つです。すべてのトラフィックを Cloudflare のプロキシ経由にすること、過去の漏えいを洗い出して解消すること、そしてオリジンのファイアウォールで Cloudflare からの接続のみを許可することです。HTTP 以外のサービスや超大規模な攻撃には、CDN だけでは対応しきれません。IMIDC では DDoS 対策付きの VPS と専用サーバーを提供しており、複数 IP の構成にも対応しているため、オリジンの土台となる防御として活用できます。IP の変更や防御プランの検討は、クライアントセンターから 24 時間 365 日受付のチケットでお気軽にご相談ください。

関連サービス

関連記事

この回答はお役に立ちましたか?

関連チュートリアル