Web Application Firewall built with Kemal framework
WAF, MaxMind MMDB dosyası ile ülke bazlı erişim kontrolü sağlar.
# GeoIP'i etkinleştir
export GEOIP_ENABLED=true
# MMDB dosyası yolu (ÖNERİLEN - en hızlı, rate limit yok)
export GEOIP_MMDB_FILE=/path/to/GeoLite2-Country.mmdb
# Engellenecek ülkeler (ISO 3166-1 alpha-2 kodları, virgülle ayrılmış)
export GEOIP_BLOCKED_COUNTRIES=CN,RU,KP
# İzin verilecek ülkeler (whitelist - sadece bu ülkelerden erişim)
export GEOIP_ALLOWED_COUNTRIES=US,GB,DE,FR
# macOS
brew install libmaxminddb
# Ubuntu/Debian
sudo apt-get install mmdb-bin
# veya MaxMind'in resmi installer'ını kullanın
# https://github.com/maxmind/libmaxminddb
mkdir -p data
cp /path/to/GeoLite2-Country.mmdb data/
export GEOIP_MMDB_FILE=data/GeoLite2-Country.mmdb
# MMDB dosyasını indirip ayarla
export GEOIP_ENABLED=true
export GEOIP_MMDB_FILE=data/GeoLite2-Country.mmdb
export GEOIP_BLOCKED_COUNTRIES=CN,RU,KP
./bin/kemal-waf
Avantajları:
export GEOIP_ENABLED=true
export GEOIP_MMDB_FILE=data/GeoLite2-Country.mmdb
export GEOIP_BLOCKED_COUNTRIES=CN,RU,KP
./bin/kemal-waf
Bu ayarla, Çin, Rusya ve Kuzey Kore’den gelen istekler engellenir.
export GEOIP_ENABLED=true
export GEOIP_MMDB_FILE=data/GeoLite2-Country.mmdb
export GEOIP_ALLOWED_COUNTRIES=US,GB,DE,FR
./bin/kemal-waf
Bu ayarla, sadece ABD, İngiltere, Almanya ve Fransa’dan gelen istekler kabul edilir.
GeoIP lookup sonuçları 1 saat süreyle cache’lenir. Bu sayede:
Cache otomatik olarak temizlenir (1 saatte bir).
mmdblookup komut satırı aracı gerektirirISO 3166-1 alpha-2 formatında ülke kodları kullanılır:
US - Amerika Birleşik DevletleriGB - Birleşik KrallıkDE - AlmanyaFR - FransaCN - ÇinRU - RusyaTR - TürkiyeTüm ülke kodları: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
GeoIP engellemeleri structured log ve audit log’a yazılır:
{
"timestamp": "2025-11-11T12:00:00Z",
"event_type": "waf_request",
"client_ip": "1.2.3.4",
"blocked": true,
"rule_message": "GeoIP blocked: Country CN (China) is blocked",
"source": "geoip"
}
MMDB dosyası kullanımı çok hızlıdır! Cache ile birlikte kullanıldığında performans daha da artar.
mmdblookup aracı yüklü değilse, GeoIP lookup yapılamaz ve istek varsayılan olarak izin verilir