Pentru a proteja o aplicație împotriva atacurilor provenite din rețele cunoscute de boți sau pentru a respecta reglementări de conformitate geografică (Geo-fencing), Nginx pune la dispoziție directiva nativă geo (pentru maparea adreselor IP și a subrețelelor CIDR) și modulul ngx_http_geoip2_module (pentru citirea bazei de date binare MaxMind GeoLite2).
Definirea listelor albe și negre de IP-uri cu directiva geo
# În contextul http:
geo $is_bad_network {
default 0; # Implicit traficul este permis
10.0.0.0/8 0; # Rețea internă de încredere
192.168.0.0/16 0;
# Subrețele compromise sau atacatoare identificate:
45.154.255.0/24 1;
185.220.101.0/24 1;
}
server {
listen 80;
server_name my-app.ro;
location / {
# Dacă IP-ul se potrivește cu o rețea marcată, returnăm 403 Forbidden:
if ($is_bad_network) {
return 403 "Acces interzis.";
}
try_files $uri $uri/ =404;
}
}
Integrarea Modulului GeoIP2 pentru Filtrare pe Bază de Țară
# Citim codul de țară ISO din baza de date MaxMind:
geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {
$geoip2_country_code default=RO country iso_code;
}
# Blocăm țările care generează atacuri automate masive:
map $geoip2_country_code $block_country {
default 0;
RU 1;
CN 1;
KP 1;
}
server {
if ($block_country) {
return 403 "Serviciul nu este disponibil în regiunea dumneavoastră.";
}
}