Filtrarea Geografică și Blocarea Intervalelor IP cu Directiva geo și GeoIP2 în Nginx

Securitate și Protecție Standard Nginx / GeoIP2

Ghid practic pentru filtrarea traficului geografic în Nginx: utilizarea directivei native geo pentru subrețele CIDR, integrarea bazei de date MaxMind GeoIP2 și blocarea sau redirecționarea selectivă a țărilor malițioase.

Sintaxă
geo $blocked_ip { default 0; 192.168.1.0/24 0; 103.20.0.0/16 1; }

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ă.";
    }
}