Mit Apache mod_geoIP IPs aus bestimmten Ländern sperren

fehlt wasgeht sogutsehr guthat geholfen (2 votes, average: 5,00 out of 5)
Loading ... Loading ...
Werbung




Apache in Verbindung mit dem Modul mod_geoip die Möglichkeit, bestimmte Länder zu sperren oder frei zu geben. Dies erlaubt es, Webseitenbetreiber, deren Webseiten aus bestimmten Ländern überbelastet werden, diese auszusperren. Beispielweise, wenn es übermäßig viele Spam-Aufrufe aus einem bestimmten Land gibt, kann dieses mit mod_geoip geblockt werden.

Installation von mod_geoip

Auf einem Debian System ist die Installation von mod_geoip relativ einfach, da es im Repository von Debian aufgenommen wurde. Ansonsten kann das Modul auch von der Herstellerseite geladen werden.
Auf Debian Squeeze reicht aber der Befehl

# aptitude install libapache2-mod-geoip

um das Modul zu installieren.

mod_geoip konfigurieren

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

In dieser Konfigurations-Datei können alle Einstellungen vorgenommen werden.

GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat

sollte die Standard-Konfiguration sein und aktiviert mod_geoip nach einem Reload von Apache

# /etc/init.d/apache2 reload

Mit einem kleinen Test kann man prüfen, ob mod_geoip auch ordnungsgemäß arbeitet.
Dazu muss auf dem Webspace eine kleine PHP Datei erstellt werden,
/var/www/geoip.php

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

Nach Aufruf der Datei im Browser sollte das Land ausgegeben werden.

Blocken eines bestimmten Landes mid mod_geoip

Da nun mod_geoip installiert ist und funktioniert, kann daran gegangen werden, das Land, welches keinen Zugriff mehr auf den Apache bekommen soll, zu blocken.
Hierfür muss die Konfigurations-Datei von mod_geoip bearbeitet werden
/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>

(aktualisiert 16.04.2012 – Danke an IronNighthawk)

In diesem Fall wird eine Variable “BlockCountry” gebildet, in die der Inhalt “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

Mit mod_geoip und mod_rewrite Zugriffe aus verschiedene Länder auf Länderseiten umlengen

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, wie hier beschrieben.

Dazu muss dsa Modul mod_rewrite installiert sein.
Aufrufe können dann mit folgender /etc/apache2/mods-available/geoip.conf umelenkt 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]


Werbung


7 Kommentare zu: Mit Apache mod_geoIP IPs aus bestimmten Ländern sperren

  1. IronNighthawk sagt:

    @Han und alle die sonst dieses Problem haben: Hatte den selben Fehlercode und so hat es funktioniert (komplette Datei):

    <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>
    

    Vielleicht hilfts ja dem ein oder anderen…

  2. Han` sagt:

    ich bekam leider folgende error Meldung
    Syntax error on line 8 of /etc/apache2/mods-enabled/geoip.conf:
    deny not allowed here
    Action ‘configtest’ failed.
    nachdem ich es wie in Deinem howto versuchte

    GeoIPEnable On
    GeoIPDBFile /usr/share/GeoIP/GeoIP.dat

    SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
    SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry
    SetEnvIf GEOIP_COUNTRY_CODE BR BlockCountry

    Deny from env=BlockCountry

    Für eine kleine Hilfe wär ich dankbar

  3. Laufschuh sagt:

    Danke für das How-To, kann nun endlich die ganzen komischen Besucher aus Indien und Weißrussland sperren, die meinen Blog vollgespammt haben.

    Danke!

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *


*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>