2026年5月21日

2026年5月21日

Nginxでgeoipモジュールで国別アクセス制御する方法

はじめに

この記事では、NginxでGeoIPモジュールを使用して、特定の国のユーザーに対してアクセスを許可または禁止する方法について説明します。これにより、国際的なウェブサイトにおいて、特定地域からの不正アクセスや不適切な使用を防ぐことができます。

手順・設定方法

ステップ1: GeoIPモジュールのインストール

GeoIPモジュールはNginxに組み込まれていないため、まずこのモジュールをインストールします。

# CentOS/RHEL で geoip2 標準モジュールをインストールするには以下のコマンドを使用
sudo yum install epel-release
sudo yum install nginx-module-geoip

# Debian/Ubuntu で geoip2 標準モジュールをインストールするには以下のコマンドを使用
sudo apt-get update
sudo apt-get install libnginx-mod-geoip

ステップ2: GeoIPデータのダウンロードと配置

GeoIPデータは無料で提供されています。ここでは MaxMind のデータベースを使用します。

# 安全な場所にGeoIPデータを保存する
mkdir -p /usr/share/GeoIP
cd /usr/share/GeoIP

# MaxMindの無料データベースをダウンロード
wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz
tar xzf GeoLite2-Country.tar.gz

# データベースファイルをNginxが読み取り可能にします
chown -R nginx:nginx /usr/share/GeoIP

ステップ3: Nginxコンフィギュレーションの編集

次に、Nginxのコンフィギュレーションファイル(通常は /etc/nginx/nginx.conf または /etc/nginx/conf.d/default.conf)を編集します。

# ファイルを開く
sudo nano /etc/nginx/nginx.conf

# geoip2 配下に以下の記述を追加
geoip2 {
    proxy_connect_timeout 60s;
    proxy_read_timeout 300s;

    # GeoIP2-Country データベースのパス
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    include /usr/share/GeoIP/GeoLite2-Country.mmdb;
}

ステップ4: アクセス制御ルールの設定

次に、アクセス制御ルールを設定します。例として、特定の国からのアクセスを禁止し、他の国からのアクセスだけを許可します。

# ドキュメントルートのコンフィギュレーションファイルを開く
sudo nano /etc/nginx/sites-available/default

# 以下のように記述
server {
    listen 80 default_server;
    server_name example.com;

    # GeoIPデータを使用して国別アクセス制御を設定する
    set $block 0;
    if ($geoip2_country_code == "JP") {
        set $block 1; # 日本からのアクセスは許可
    }
    if ($geoip2_country_code != "US" && $geoip2_country_code != "CA") {
        set $block 1; # 北米以外の国からのアクセスは禁止
    }

    # $blockが1の場合はアクセスを禁止する
    if ($block = 1) {
        return 403;
    }

    location / {
        root /var/www/html;
        index index.php index.html index.htm;
    }
}

ステップ5: Nginxを再起動

すべての設定が完了したら、Nginxを再起動して変更を適用します。

sudo systemctl restart nginx

注意事項

  • GeoIPデータベースは定期的に更新されるため、最新バージョンをダウンロードし、反映してください。
  • アクセス制御のルールは十分なテストを行った上で実装するように注意しましょう。
  • セキュリティ上、特定の国からのアクセスを完全に禁止すると、重要なビジネスパートナーが利用できなくなる可能性があるため、慎重に検討することが重要です。

まとめ

1. GeoIPモジュールのインストール: NginxでGeoIP機能を使用するには、まずこのモジュールが必要です。

2. GeoIPデータのダウンロードと配置: MaxMindの無料データベースを使用して、必要に応じてアップデートを行います。

3. Nginxコンフィギュレーションの編集: アクセス制御ルールを設定し、特定の国からのアクセスを許可または禁止します。

4. Nginx再起動: 設定を反映するためにNginxを再起動します。

関連記事:

  • [Nginxによるウェブサイトの基本的なセキュリティ設定]
  • [GeoIPデータを使用したアクセス制御]
  • [Nginxの高パフォーマンス設定]

お気軽にご相談ください

お見積りへ お問い合わせへ