Cara Block Traffic Negara Tertentu di Nginx + Auto Update GeoIP2

Cara Block Traffic Negara Tertentu di Nginx + Auto Update GeoIP2

Traffic spam dari luar negeri terutama China (Tiongkok) dan Vietnam sering menyebabkan masalah; terutama menggunakan server cloud VPS:

  • Lonjakan traffic tidak valid
  • Membebani server
  • Risiko invalid traffic
  • Data analytics jadi tidak akurat

Solusi paling efektif adalah memblokir langsung di level server linux (Nginx) menggunakan GeoIP2.

Konten ini membahas setup dari nol sampai auto update database.


Kenapa Block di Nginx Lebih Efektif?

Dibanding CDN seperti Cloudflare, block di Nginx:

✅ Lebih cepat (langsung di server)
✅ Tidak bisa dibypass dengan mudah
✅ Mengurangi beban CPU & RAM
✅ Tidak memproses request ke aplikasi (WordPress/PHP)


STEP 1 — Install GeoIP2 Module

Untuk Ubuntu/Debian:

apt update
apt install nginx libnginx-mod-http-geoip2

Verifikasi module

nginx -V 2>&1 | grep geoip2

Kalau sudah aktif → lanjut


STEP 2 — Download Database GeoIP2

Daftar buat akun untuk dapatkan API-KEY di MaxMind: 👉 https://www.maxmind.com

Download GeoLite2 Country (.mmdb) menggunakan APi-key !


Kode perintah download:

cd /tmp && \
wget -O geoip.tar.gz "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country&license_key=LICENSE_KEY_KAMU&suffix=tar.gz" && \
tar -xzf geoip.tar.gz && \
mv GeoLite2-Country_*/GeoLite2-Country.mmdb /etc/nginx/geoip/

Cek ketersedian file:

ls -lh /etc/nginx/geoip/GeoLite2-Country.mmdb

⚙️ STEP 3 — Konfigurasi Nginx

Buka:

nano /etc/nginx/nginx.conf

Tambahkan di dalam http {}:

# load ini taruh paling atas (optional jika error!)
load_module modules/ngx_http_geoip2_module.so;

# kode bisa ditaruh bawah sebelum Rate limit & connection limit
geoip2 /etc/nginx/geoip/GeoLite2-Country.mmdb {
auto_reload 5m;
$geoip_country_code country iso_code;
}
# Block negara spam
map $geoip_country_code $blocked_country {
default 0;
CN 1; # China
VN 1; # Vietnam
}

STEP 4 — Terapkan di Website (HTTPS)

Edit config domain:

nano /etc/nginx/sites-available/domainkamu

  • HTTP (port 80)
server {
listen 80;
server_name domainkamu.com; return 301 https://$host$request_uri;
}

HTTPS (port 443)

server {
listen 443 ssl http2;
server_name domainkamu.com; ssl_certificate /path/fullchain.pem;
ssl_certificate_key /path/privkey.pem;

# Cek ID negara
add_header X-Country-Code $geoip_country_code;

# BLOCK NEGARA IPGEO2
if ($blocked_country) {
return 403;
}

location / {
try_files $uri $uri/ /index.php?$args;
}
}

🔄 STEP 5 — Reload Nginx

nginx -t
systemctl reload nginx

✅ HASIL

Sekarang:

  • China 🇨🇳 → ❌ 403 (blocked)
  • Vietnam 🇻🇳 → ❌ 403
  • Indonesia 🇮🇩 → ✅ normal

Gunakan VPN Browser ektensi untuk ujicoba langsung traffic negara target!


STEP 6 — Testing

Test langsung traffic lokal :

curl -I https://domainkamu.com

Contoh hasil:

X-Country-Code: ID

🔄 STEP 7 — Auto Update GeoIP2 (WAJIB)

Database GeoIP harus di-update rutin agar tetap akurat.

READ :  Cara Setting Nginx Untuk Traffic Tinggi – Penjelasan Mendalam

🔧 Buat script update

nano /usr/local/bin/update-geoip.sh

Isi script:

#!/bin/bash

LICENSE_KEY="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"
TMP_DIR="/tmp/geoip"
DEST="/etc/nginx/geoip"

mkdir -p $TMP_DIR
cd $TMP_DIR || exit

# Download (pakai --location biar ikut redirect)
wget --quiet --show-progress --progress=bar:force:noscroll \
-O geoip.tar.gz \
"https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country&license_key=${LICENSE_KEY}&suffix=tar.gz"

# Cek file tidak kosong
if [ ! -s geoip.tar.gz ]; then
echo "Download gagal atau file kosong!"
exit 1
fi

# Extract
tar -xzf geoip.tar.gz

# Cari file mmdb
MMDB_FILE=$(find . -name "GeoLite2-Country.mmdb" | head -n 1)

if [ -z "$MMDB_FILE" ]; then
echo "File mmdb tidak ditemukan!"
exit 1
fi

# Copy ke nginx
cp "$MMDB_FILE" $DEST/

# Cleanup
rm -rf $TMP_DIR

# Reload nginx
systemctl reload nginx

echo "Update GeoIP berhasil"

🔐 Beri permission

chmod +x /usr/local/bin/update-geoip.sh

▶️ Test manual

/usr/local/bin/update-geoip.sh

⏰ Tambahkan cron job

crontab -e

Tambahkan:

0 3 1 * * /usr/local/bin/update-geoip.sh

👉 Update tiap bulan jam 03:00


BEST PRACTICE

✅ Disarankan

  • Block hanya negara yang jelas spam
  • Monitor log Nginx secara berkala
  • Kombinasikan dengan rate limiting

❌ Hindari

  • Block terlalu banyak negara (bisa ganggu SEO)
  • Block berdasarkan user-agent “bot” secara umum
  • Mengandalkan GeoIP saja tanpa monitoring

KESIMPULAN

Dengan setup ini kamu mendapatkan:

✅ Block traffic spam dari China & Vietnam
✅ Server lebih ringan
✅ Data analytics lebih bersih
✅ Risiko invalid traffic AdSense berkurang
✅ Database IP selalu update otomatis


Penutup

Block di level Nginx + GeoIP2 adalah salah satu cara paling efektif untuk:

👉 menjaga kualitas traffic
👉 melindungi monetisasi
👉 meningkatkan performa server