Apache2 Geo IP

Aus Wiki
Wechseln zu: Navigation, Suche

Apache in Verbindung mit dem Modul mod_geoip gibt dir die Möglichkeit, bestimmte Länder zu sperren oder frei zu geben.

Damit kann man zugriffe von nicht berechtitge Länder verbieten

Installation mod_geoip

Auf einem Debian System ist die Installation von mod_geoip ziemlich einfach, da es in den Repos liegt.

Man kann es aber auch von der Hersteller Seite laden.

Auf gibt man diesen Befehl ein um es zu installieren:

aptitude install libapache2-mod-geoip
 

mod_geoip Konfigurieren

Die Konfigurationsdatei von mod_geoip liegt unter /etc/apache2/mods-available/geoip.conf.

In dieser werden die Einstellungen vorgenommen.

Standart, so sollte bei der Installation aussehen.

<IfModule mod_geoip.c>
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
</IfModule>
 

nach einem a2enmod geoip und einem /etc/init.d/apache2 reload wird das Modul aktiviert.

a2enmod geoip
/etc/init.d/apache2 reload
 

Test PHP_Script

Mit diesem kleinen Skript sehen wir ob es schon funktioniert.

Dazu legen wir unter /var/www/ eine Datei mit dem Namen geoip.php an, und fügen diesen Inhalt ein:

<!--?php $country_name = apache_note("GEOIP_COUNTRY_NAME"); echo "Land: " . $country_name; ?-->

Nach einem Aufruf im Browser sollte das Land ersichtlich sein (vorrausgesetzt man greift mit einer Öffentlichen IP zu).

ein bestimmtes Land Blocken

Da es nun funktioniert, kann man das Land, welches keinen Zugriff mehr auf den Apache bekommen soll, blocken.

Dabei wird die Konfigurationsdatei von mod_geoip bearbeitet.

/etc/apache2/mods-available/geoip.conf

Möchte man beispielsweise China und Russland sperren, so muss die geoip.conf folgendermaßen angepasst werden:

<IfModule mod_geoip.c>
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
  
SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
</IfModule>
  
<Location />
Deny from env=BlockCountry
</Location>

In diesem Fall wird eine Variable BlockCountry gebildet, in die der Ländercode CN und RU gelegt wird.

Treffen diese Ländercodes zu, wird der Zugriff geblockt.

Ebenso ist es möglich, lediglich Zugriff aus bestimmten Ländern zu erlauben.

Hierbei wird dann Deny zu Allow.

Allow from env=xxx

bestimmte Länder von Bestimmten Seiten ausschließen

Es kann auch mal passieren das nur eine Seite am Webserver für bestimmte Länder gesperrt werden soll.

z.B.: eine Webseite soll nur in Österreich ereichbar sein.

Dazu werden in 2 Konfigs änderungen vorgenommen.

/etc/apache2/mods-available/geoip.conf

<IfModule mod_geoip.c>
  GeoIPEnable On
  GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
</IfModule>
 

Und einmal in der jeweiligen Apache conf für die Webseite.

/etc/apache2/sites-available/webseite-geoip

<VirtualHost *>
        ServerAdmin webmaster@example.com
        ServerName www.example.com
        ServerAlias www.example.com *.www.example.com
        DocumentRoot /var/www/webseite/

<Directory /var/www/webseite/>
        AllowOverride FileInfo Options
        SetEnvIf GEOIP_COUNTRY_CODE AT AllowCountry
        Deny from all
        Allow from env=AllowCountry
        Allow from 192.168.
</Directory>

###### Logs ####

        ErrorLog /var/log/apache2/webseite.error.log
        LogLevel warn
        CustomLog /var/log/apache2/webseite.access.log combined
</VirtualHost>
 

Dannach noch ein /etc/init.d/apache2 reload und schon kann man nur noch mehr die Seite in Österreich erreichen.

mod_geoip und mod_rewrite Zugriffe auf Länderseite umleiten

mod_geoip lässt sich weiterhin dazu verwenden, durch den Ländercode die Besucher auf spezielle Seiten für deren Länder, beispielsweise in anderen Sprachen, umzulenken.

Dazu muss das Modul mod_rewrite installiert sein.

Aufrufe können dann mit folgender /etc/apache2/mods-available/geoip.conf umgelenkt werden.

GeoIPEnable On
GeoIPDBFile /path/to/GeoIP.dat
 
# Redirect one country
RewriteEngine on RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^CA$
RewriteRule ^(.*)$ http://www.canada.com$1 [L]
 
# Redirect multiple countries to a single page
RewriteEngine on RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(CA|US|MX)$
RewriteRule ^(.*)$ http://www.northamerica.com$1 [L]
 

Links & Quellen

Maxmind_GeoIP

Server-wissen.de