Feb
19.

Apache mit GeoIP Module

von admin um 14:32:19 Uhr

Viele meiner Projekte sind rein auf deutsche Besucher ausgelegt und in den Logfiles gibt es massenhaft Zugriffe aus Osteuropa, Südamerika, China und Japan. Was wollen die? Richtig, auf den Server, Schwachstellen finden und dann evtl. im günstigsten Fall nur Spam-Massen-Mails versenden. Um die loszuwerden, gibts den Weg über eine Firewall, aber das ist mühsam und bedarf ständiger Pflege. Wie wäre es, diese unerwünschten Besucher mit einer einizgen Zeile in der Apache-config zu sperren?

Genau das hab ich gemacht, meine Logfiles sind um 20% geschrumpft und das alles mit 15 min Aufwand. Ich erkläre kurz die Installation:

Hinweis: Die Installation erfolgte hier unter einem Debian 5.x System (Lenny), sollte aber auch mit vielen anderen Linux-Derivaten funktionieren. Dort müssen dann evtl. die Pfade angepasst werden!

Benötigte Software:

  • Apache 2.x auf dem Server
  • Apache 2 Development Module (#apt-get install apache2-dev)
  • Die GeoIP C-Library von Maxmind (1.4.6 aktuell)
  • Das GeoIP-Apache2 Modul 1.2.5 von Maxmind (Das ganze gibt es auch für Apache 1.3.x). Es gibt auch RPM-Pakete zum installieren (Nur aus Deutschland).

Download der Maxmind C-Library per “wget”:

#wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP-1.4.6.tar.gz

Download des Apache2 GeoIP-Moduls per “wget”:

#wget http://geolite.maxmind.com/download/geoip/api/mod_geoip2/mod_geoip2_1.2.5.tar.gz

Entpacken und Installieren der C-Library:

#tar xvfz GeoIP-1.4.6.tar.gz

#cd GeoIP-1.4.6

### Start Installation ###

# ./configure
# ./make
# ./make install

Nach der Installation liegt die GeoIP.dat in “/usr/local/share/GeoIP/”

Das Modul in Apache2 einbinden:

Zuerst die dev-Tools von Apache2 installieren:

#apt-get install apache2-dev

Das Modul entpacken:

#tar xvfz mod_geoip2_1.2.5.tar.gz

Dann das Modul für Apache erstellen:

#apxs2 -i -a -L/usr/local/lib -I/usr/local/include -lGeoIP -c mod_geoip.c

Wechseln ins Apache-Dir:

#cd /etc/apache2/mods-available

Eine Modul-Loader Datei erstellen:

# vi geoip.load (leere Datei)

in diese Datei kommt:

LoadModule geoip_module /usr/lib/apache2/modules/mod_geoip.so

Nachdem die Datei angelegt ist, das Modul aktivieren:

#ln -s geoip.load ../mods-enabled/geoip.load (legt einen Symlink an)

Apache neu starten:

#/etc/init.d/apache2 restart

Wenn das fehlerfrei abläuft, ist GeoIP auf deinem Apache aktiv!

Nachdem die Installation abgehakt ist, ist das GeoIP-Modul zwar geladen, hat aber noch nichts zu tun. Sehen wir uns also das Einbinden in die Server-Config an.

GeoIP kann man global für den gesamten Server eintragen oder auch nur für bestimmte Virtual-Server. Ich hab das bei mir global für den kompletten Apache gemacht. Dazu gehört der Eintrag in die “/etc/apache2/apache2.conf” (einfügen am Ende):

GeoIPEnable On
GeoIPDBFile /usr/local/share/GeoIP/GeoIP.dat
SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE BR BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE JP BlockCountry

<Location />
Order allow,deny
Allow from all
Deny from env=BlockCountry
</Location>

In diesem Beispiel werden alle Länder mit .cn .ru .br .jp ausgesperrt und sind nach einem Rehash des Apache aktiv.

Es gibt natürlich auch die Möglichkeit, alles auszusperren und nur gewisse Länder zuzulassen:

GeoIPEnable On
GeoIPDBFile /usr/local/share/GeoIP/GeoIP.dat
SetEnvIf GEOIP_COUNTRY_CODE DE AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE AT AllowCountry
<Location />
Deny from all
Allow from env=AllowCountry
</Location>

In diesem Beispiel wird nur .de .ch und .at als Land zugelassen, alles andere muss draussen bleiben!

Diese Beispiele gehören in die Config-Files eines Virtuellen Servers.

Man kann GeoIP übrigens auch für Länderspezifische Webseiten verwenden. Das passiert dann in einer .htaccess und setzt mod_rewrite voraus:

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

# Redirect one country
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^ES$
RewriteRule ^(.*)$ http://spanish.meineseite.com$1 [L]

# Redirect multiple countries to a single page
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(CA|US|MX)$
RewriteRule ^(.*)$ http://usa.meineseite.com$1 [L]

# Unerwünschte Seiten kicken (leitet um auf beliebige Seite, hier dasendedesinternet.de)
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(RU|PL|CN|BR|MX)$
RewriteRule ^(.*)$ http://dasendedesinternet.de$1 [L]

Hier ist der Fantasie keine wirkliche Grenze gesetzt, weitere Kombinationen überlasse ich dir …

Credits: Die Homepage von MaxMind GeoIP

Ich leiste keinen Support für diese Installation, sollten Fehler oder Bugs auftreten, bitte an den Support von MaxMind wenden. Wenn du Fehler in diesem Tutorial findest, lass es mich bitte wissen. Die Installation sollte von jemandem ausgeführt werden, der Erfahrung auf einer Linux-Konsole hat. Viel Spass mit dem aussperren unerwünschter Länder :-) .



Ähnliche Meldungen

  • Keine verwandten Themen

Tags: Allgemein, Tutorials

www.bitdefender.de
  1. 2 Trackback(s)

  2. Jan 30, 2010: Länder per PHP ermitteln – Schutz vor Spammern – GeoIP | 1manfactory.com - Blog of Jürgen Schulze
  3. May 13, 2010: Kostenlos Spam Länder per .htaccess sperren ohne Geoip auf dem Apache | Länder Spam, Spamfilter, Htaccess, Kostenloser Spamschutz, Blog schützen, Copy and Paste | Blogger World

Dein Kommentar