2016-05-23 18 views
0

In Nginx überprüfe ich, ob eine IP aus einem blockierten Land kommt. Wenn dies der Fall ist, erhält der Besucher eine 403. Ich brauche die Möglichkeit, Whitelist-IPs hinzuzufügen, um sie zuzulassen, selbst wenn sie Teil der gesperrten Länder sind.Whitelist-IPs in Nginx Virtual Host-Datei Länderblockierung

Ich würde es vorziehen, die IPs am Standort nginx.conf auf die weiße Liste zu setzen, so dass ich nicht mehr als 30 virtuelle Host-Dateien aktualisieren muss. Wie kann ich das machen?

In jedem der nginx virtuellen Host-Dateien in/etc/nginx/sites-enabled

location/{ 
    if ($allowed_country = no) { 
     return 403; 
    } 

    try_files $uri $uri/ /index.php$is_args$args; 
} 

Die Länderliste in /etc/nginx/nginx.conf erstellt

## GEOIP settings 
    geoip_country /usr/share/GeoIP/GeoIP.dat; 
    map $geoip_country_code $allowed_country { 
     default yes; 
     RU no; 
     BR no; 
     UA no; 
     PH no; 
     IN no; 
     CN no; 
    } 

Antwort

1

zu haben einen Filter auf geoip Land sowie IP-Adresse Sie geo module Resultierende in etwas brauchen, wie:

location/{ 
    if ($allowed_country = no) { 
    return 403; 
    } 

    if ($allowed_ip = no) { 
     return 403; 
    } 

    try_files $uri $uri/ /index.php$is_args$args; 
} 

Plus die Zuordnung in nginx.conf

geo $allowed_ip { 
    default  no; 

    127.0.0.1  yes; 
    192.168.1.0/24 yas; 
} 

Dies sollte möglich sein, aber die map Richtlinie hat unter dem http Kontext sein.

Ich würde vorschlagen, ein include in jedem vhost, mit den GeoIP-Einstellungen in einer separaten Datei, flexibler zu sein.

+0

Hi Ben, Dieser GeoIP befindet sich bereits in einer separaten Datei (GeoIP.dat) und die Länderblockierung funktioniert ordnungsgemäß. Das Include ist bereits ein Teil der Datei nginx.conf. Ich bin auf der Suche nach einer Möglichkeit, Whitelist IPs zu dieser Funktionalität hinzufügen, aber ich kenne nicht die Syntax für die Aufnahme entweder in der Karte $ GeoIP_Country_code $ allowed_country Funktion in der Nginx.conf-Datei oder in jeder virtuellen Host-Datei. Das ist, was ich brauche Hilfe mit. Vielen Dank! – ComputerGiant

+0

Ich sehe, ich habe die Frage dann missverstanden. Der Weg dazu wäre das [Geo-Modul] (http://nginx.org/en/docs/http/ngx_http_geo_module.html). Ich werde meine Antwort aktualisieren – Ben

+0

Hallo Ben, wenn ich diese oder ähnliche Lösungen implementiere bekomme ich einen 403 von allen IP-Adressen. Es sieht so aus, als würde das geo $ allowed_ip standardmäßig alle IP-Adressen ablehnen. Gibt es keine Möglichkeit, keine default = no zu setzen und if ($ allowed_ip = yes) zu setzen {try files ... – ComputerGiant