こんにちは!インフラやセキュリティの世界へようこそ。
初めてセキュリティの仕組みやサーバーの守りを任されると、専門用語の壁にぶつかって「何から手をつければいいんだろう……」と不安になりますよね。でも、安心してください。どんなにすごい最新のセキュリティ技術も、基本の考え方は私たちの「身の回りの防犯」と全く同じなんです。
今回は、Webサイトを守るための「WAF(Webアプリケーションファイアウォール)」における 「GeoIP(ジオアイピー)制限」 について、一緒に一歩ずつ優しく紐解いていきましょう!
—
1. 「家に入れない」?GeoIP制限ってなに?
まずは、イメージしやすいように「お家(Webサイト)」の防犯に例えて考えてみましょう。
あなたが自宅で留守番をしていると想像してください。ピンポーンとインターホンが鳴りました。ドアスコープ(のぞき穴)を覗いてみると、見知らぬ怪しいセールスマンが立っています。さらに、最近そのエリアで「海外からの不審な空き巣グループ」が連続して事件を起こしているというニュースを耳にしていたとします。
このとき、あなたはどうしますか?
「うちの地域は最近危ないから、海外からの郵便や来客は、一度全部お断りしよう!」あるいは「いつも来てくれる信頼できる友人(特定の国)だけドアを開けよう!」と考えますよね。これが、まさに GeoIP制限 の考え方です。
ネットの世界の「国籍」はどうやって分かるの?
現実の世界ならパスポートや言葉でどこの国の人かわかりますが、インターネットの世界では、すべてのパソコンやスマホに IPアドレス という「ネット上の住所」が割り振られています。
WAFのGeoIP制限機能は、このIPアドレスをチェックして、「あ、この住所はアメリカからだな」「この住所は日本からだな」 と判断し、アクセスをブロックしたり通したりする仕組みなんです。
—
2. 攻撃者はどうやってすり抜ける?(知っておくべき盲点)
「じゃあ、外国からのアクセスを全部ブロックしちゃえば、海外からのハッカーは全員入れなくなって完璧だね!」と思いますよね。
実は、現場のセキュリティエンジニアが頭を悩ませるポイントがここにあります。攻撃者はそんなに単純ではありません。
彼らは 「VPN」 や 「プロキシサーバー」 という、いわば「ネット上の隠れ蓑」を使います。これを使うと、実際には日本や海外の別の場所にいながら、まるで「安全な日本の住所(IPアドレス)」からアクセスしているように偽装できるのです。
だからこそ、「国で分ければ100%安全!」というわけにはいかないのが、実務の難しいところであり、面白いところなんです。
—
3. ホワイトリストとブラックリストのどちらを選ぶべき?
GeoIPを設定するとき、大きく分けて2つのやり方があります。
1. ブラックリスト方式(出入り禁止リスト)
- 「特定の怪しい国や、過去にサイバー攻撃が多発した国からのアクセスだけを拒否する」やり方です。
- メリット: 日本国内向けだけでなく、世界中にサービスを展開している場合に使いやすい。
- デメリット: 新たな攻撃元の国が現れるたびにリストを更新しないといけない。
2. ホワイトリスト方式(VIP招待リスト)
- 「日本国内からのアクセスだけを許可し、それ以外の国からのアクセスは一切シャットアウトする」やり方です。
- メリット: 海外からの不正アクセスの大半をまとめて防げるので、セキュリティ強度が非常に高い。
- デメリット: 日本に住んでいる日本人であっても、海外旅行中や出張中にアクセスすると弾かれてしまう。
ビジネス要件(「海外のお客様もお迎えしたいのか」「国内向けのクローズドなサービスなのか」)に合わせて、どちらを選ぶべきか慎重に決める必要があります。
—
4. CDNキャッシュとの兼ね合い(ここが最大の落とし穴!)
さて、ここからが少し実務的なお話です。
最近のWebサイトは、表示を速くするために CDN(コンテンツ・デリバリー・ネットワーク、例:CloudflareやCloudFrontなど) という仕組みをよく使います。これは、世界中にあるサーバーにあらかじめWebサイトのコピー(キャッシュ)を置いておき、ユーザーに一番近い場所からパッとページを表示させる便利な技術です。
ここで、大きな問題が発生します。
もし、アメリカから来たA君がページを見たとき、CDNが「アメリカのサーバーにあったキャッシュ(ページのコピー)」をそのままA君に返してしまうとどうなるでしょうか?
その直後に日本から来たB君がアクセスした際、もしCDNが「さっき作ったアメリカ向けのキャッシュ」をそのままB君に返してしまったら……大変です! 日本からのアクセスなのに、海外向けの画面が出たり、あるいはGeoIPの判定がうまく機能しなくなったりするトラブルが起きます。
CDNを使うときの対策のコツ
CDNやWAFを導入する際は、キャッシュを保存するルール(キャッシュキー)に 「アクセス元の国(GeoIP)情報」 を含める設定にする必要があります。
次のようなイメージで設定を行います。
【CDNのキャッシュ設定のイメージ】
- 日本からのアクセス:日本用のキャッシュを保存して表示する
- 海外からのアクセス:海外用のキャッシュを保存して表示する(またはブロック画面を返す)
このように、ネットワークの仕組みとキャッシュの動きをセットで考えないと、「急にサイトの一部が表示されなくなった!」というインシデントに繋がってしまうので注意しましょう。
—
5. 実務で使える設定・コード例の参考
それでは最後に、インフラの現場やアプリケーション層でどのようにGeoIPやヘッダーを意識しているのか、簡単なサンプルを見てみましょう。
多くの場合、WAFやCDNがアクセスを判定したあと、バックエンドのサーバー(NginxやApacheなど)へ X-Forwarded-For や、CDN独自の国コードヘッダー(例: CF-IPCountry など)を引き渡します。
以下は、NginxなどのリバースプロキシやPHPなどのアプリケーションで、国コード(例: JP以外をブロックする簡易的なロジック)をハンドリングする際の擬似的なコード例です。
<?php
/**
* PHPによる簡単なGeoIP国コード判定のサンプル
* (※実際の現場ではCDNやWAFの機能側でブロックするのが基本ですが、アプリ側でも二重でチェックする例です)
*/
// CDNやWAFが付与してくれた国コードのヘッダーを取得する(例としてCloudflareのヘッダーを使用)
$countryCode = $_SERVER['HTTP_CF_IPCOUNTRY'] ?? 'UNKNOWN';
// 日本(JP)からのアクセス以外を弾くホワイトリストの考え方
$allowedCountry = 'JP';
if ($countryCode !== $allowedCountry) {
// 403 Forbidden(アクセス権限なし)のステータスコードを返す
http_response_code(403);
// セキュリティ上の理由から、詳細な理由を教えすぎないシンプルなメッセージにする
echo "申し訳ありません。お住まいの地域からのアクセスは許可されていません。";
exit;
}
// 日本からのアクセスであれば、通常の処理を続行する
echo "ようこそ!安全な接続を確認しました。";
?>
このように、受け取ったヘッダー(例: HTTP_CF_IPCOUNTRY など)をプログラム側やWAFのルールで正しく拾い上げ、適切にコントロールすることが大切です。
—
まとめ
今回は、WAFのGeoIP制限について、お家の防犯やCDNの仕組みを交えて解説しました。
- GeoIP制限は「ネット上の住所(IPアドレス)」を見て国を判断する仕組み
- ホワイトリスト(国内限定など)とブラックリストは、ビジネス要件に合わせて慎重に選ぶ
- CDNを使うときは「国ごとにキャッシュが混ざらない工夫」が絶対に必要
セキュリティの対策は、ただ厳しくすればいいというわけではありません。「海外の正規のお客様が来られなくなってビジネスチャンスを逃してしまった……」となっては本末転倒ですよね。
技術の裏側にある仕組みを優しく紐解きながら、ビジネスの安全と便利さのバランスを取れる素敵なエンジニアを目指して、一歩ずつ進んでいきましょう!
コメント