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の高パフォーマンス設定]