niedziela, 17 lutego 2013

GeoIP dla Ngix blokowanie użytkowników z konkretnego kraju - Debian / Ubuntu

Dzięki dodatkowi GeoIP dla ngix możemy zablokować dostęp do naszej strony dla użytkowników z konkretnego kraju.
Aby wszystko działało musimy mieć w zainstalowanym ngix wkompilowany dodatek  HttpGeoipModule .
Poleceniem nginx -V możemy sprawdzić czy taki dodatek jest wbudowany, po jego wywołaniu powinniśmy otrzymać poniższą odpowiedź wraz z tym modułem (zaznaczony na czerwono):


nginx version: nginx/1.2.1
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-pcre-jit --with-debug --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module --add-module=/build/buildd-nginx_1.2.1-2.1-amd64-fMGfEu/nginx-1.2.1/debian/modules/nginx-auth-pam --add-module=/build/buildd-nginx_1.2.1-2.1-amd64-fMGfEu/nginx-1.2.1/debian/modules/nginx-echo --add-module=/build/buildd-nginx_1.2.1-2.1-amd64-fMGfEu/nginx-1.2.1/debian/modules/nginx-upstream-fair --add-module=/build/buildd-nginx_1.2.1-2.1-amd64-fMGfEu/nginx-1.2.1/debian/modules/nginx-dav-ext-module

1) Instalujemy bazę GeoIP:

apt-get install geoip-database libgeoip1

mv /usr/share/GeoIP/GeoIP.dat /usr/share/GeoIP/GeoIP.dat_bak


cd /usr/share/GeoIP/

wget 
http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz

gunzip GeoIP.dat.gz

2) Skonfigurujemy Ngix:

vi /etc/nginx/nginx.conf

Dodajemy wpis w sekcję http, oraz przed include:


geoip_country /usr/share/GeoIP/GeoIP.dat;
    map $geoip_country_code $allowed_country {
        default no;
        FK yes; #dodajemy skrót kraju który chcemy zablokować 
        FM yes;
        EH yes;
    }

Aby faktycznie zablokować dostęp do konkretnych krajów musimy dodać do vhost (w apache) w sekcji server{}:


if ($allowed_country = no) {
            return 444;
        }

W ten sposób otrzymamy błąd 444 gdy ktoś z zablokowanego kraju będzie usiłował się dostać do naszej strony.
Na koniec musimy zrobić restart ngix'a:

/etc/init.d/nginx reload



Brak komentarzy:

Prześlij komentarz