In einem anderen Artikel beschreibe ich wie man das ngx_http_geoip2_module für Nginx einrichtet. Hier geht es nun um das erstellen von einer Blockade von chinesischen IP Adressen. Das bedeutet natürlich das keiner mit einer chinesischen IP Adresse auf die Webseite zugreifen kann. Falls es sich um eine Private Seite handelt, sperrt man so wahrscheinlich viele Bots aus aber eher wenige echt User. Auch ist zu beachten das die Einträge in der GeoLite2 Datenbank falsch sein können.

In der Variable $geoip2_city_country_code wird der Landes Code von einer zugreifenden IP Adresse abgelegt. Durch ein Mapping kann man nun bestimmen ob die Variable $blocked _country mit „ja“ oder „nein“ gefüllt wird. Das Mapping befindet sich noch im http { … } Kontext.

map $geoip2_city_country_code $blocked_country {
 default nein;
 CN ja;
}

Im server { … } Kontext kann nun folgenden Abfrage eingetragen werden. Wenn Möglich relativ weit oben.

if ($blocked_country = ja) {
 return 403;
}

Sollte die Variable $blocked_country „ja“ enthalten, wird nur der Status Code 403 Forbidden zurück geben und nicht die eigentliche Seite ausgeliefert.

Falls einem Länder nicht groß genug sind kann man auch gleich einen ganzen Kontinent blockieren. In meinem Geoip2 Artikel nenne ich die Kontinent Variable  $geoip2_city_continent_code. So könnte man zum Beispiel NA (Nord Amerika) und AS (Asien) blockieren

map $geoip2_city_continent_code $blocked_continent {
 default nein;
 NA ja;
 AS ja;
}

Der Mapping Eintrag muss wieder im http { … } Kontext sein. Das eigentliche blockieren dann im server { … } Kontext.

if ($blocked_continent = ja) {
 return 403;
}
Nginx Geoblocking mit dem GeoIP2 Modul