Archiv/Apache/mod geoip2

Archivierte Anleitung

Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. ⚓︎ Einen Editor verwenden

  2. ⚓︎ Root-Rechte

  3. ⚓︎ Ein Terminal öffnen

  4. ⚓︎ Installation von Programmen

Inhaltsverzeichnis
  1. Vorbereitung
  2. Installation
  3. Kontrolle
  4. Problembehandlung
  5. Links

Dieser Artikel beschränkt sich auf die Sicherung des Webservers Apache durch das Modul mod_geoip2 🇬🇧. Einen übergeordneten Artikel findet man im Wiki unter Apache/Sicherheit.

mod_geoip2 ist ein Modul, welches die Suche nach dem Land, aus dem eine Web-Anfrage stammt, ermöglicht. Es nutzt die Bibliothek und Datenbank GeoIP, um eine Suche durchzuführen. Das Modul ermöglicht die Bearbeitung der Clientzugriffe basierend auf ihrem Ursprungsland. Ursprungsländer werden anhand ihrer Ländercodierung 🇬🇧 identifiziert. Darüber hinaus kann man mit entsprechenden Datenbanken auch per Städtecode 🇬🇧 selektieren .

Achtung!

Apache-Module sollte man immer in ihren /etc/apache2/mods-available/*.conf Dateien ändern, nie in ihren /etc/apache2/mods-enabled/*.load Dateien!

Vorbereitung

Um überprüfen zu können, ob dieses Modul auch richtig arbeitet, gibt es eine denkbar einfache Lösung. Man erstellt im Document-root (Standard: /var/www/) eine Datei geoiptest.php und folgendem Inhalt [1][2].

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<html>
<body>
<?php

/*

    Uses mod-geoip to query the

    MaxMind GeoLite City

    binary database and returns

    geographic information based

    on the client's IP address

*/

 

$country_code = apache_note("GEOIP_COUNTRY_CODE");

$country_name = apache_note("GEOIP_COUNTRY_NAME");

$city_name = apache_note("GEOIP_CITY");

$region = apache_note("GEOIP_REGION");

$metro_code = apache_note("GEOIP_DMA_CODE");

$area_code = apache_note("GEOIP_AREA_CODE");

$latitude = apache_note("GEOIP_LATITUDE");

$longitude = apache_note("GEOIP_LONGITUDE");

$postal_code = apache_note("GEOIP_POSTAL_CODE");

 

echo 'Country code: '.$country_code.'<br>';

echo 'Country name: '.$country_name.'<br>';

echo 'City name: '.$city_name.'<br>';

echo 'Region: '.$region.'<br>';

echo 'Metro code: '.$metro_code.'<br>';

echo 'Area code: '.$area_code.'<br>';

echo 'Latitude: '.$latitude.'<br>';

echo 'Longitude: '.$longitude.'<br>';

echo 'Postal code: '.$postal_code.'<br>';

 
?>
</body>
</html>

Nach einem reload ist dieses Dokument nun geladen und verfügbar [3]:

sudo service apache2 reload 

Ruft man in einem beliebigen Browser die URL http://SERVER_IP_ODER_NAME/geoiptest.php auf, bleibt das Browserfenster vorerst leer.

Installation

mod_geoip2 ist direkt in den Paketquellen von Ubuntu enthalten. Benötigt wird folgendes Paket [4]:

Befehl zum Installieren der Pakete:

sudo apt-get install libapache2-mod-geoip 

Oder mit apturl installieren, Link: apt://libapache2-mod-geoip

Anschließend muss das Modul noch aktiviert werden. Dies geschieht am einfachsten mit den folgenden Befehlen im Terminal:

sudo a2enmod geoip 

Hinweis!

Zusätzliche Fremdquellen können das System gefährden.


Anmerkung: https://dev.maxmind.com/geoip/legacy/geolite/

Um die Funktion zur Erkennung des Städtecodes zu nutzen, muss man die Datenbank von der Website 🇬🇧 des Entwicklers herunterladen.

Man navigiert in das Verzeichnis /usr/share/GeoIP, lädt die Städtedatenbank von der Website 🇬🇧 des Entwicklers herunter und entpackt diese.

1
2
3
cd /usr/share/GeoIP
sudo wget geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
sudo gunzip GeoLiteCity.dat.gz

Nun editiert man noch die Konfigurationsdatei /etc/apache2/mods-available/geoip.conf. In dieser Datei enthaltene Ländercodes werden vom Webserver verweigert. Diese sind individuell anzupassen.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<IfModule mod_geoip.c>
  GeoIPEnable On                                      ## Lädt die GeoIP-Datenbank
  GeoIPDBFile /usr/share/GeoIP/GeoLiteCity.dat              ## GeoIPCity-Daten
  GeoIPDBFile /usr/share/GeoIP/GeoLiteCity.dat MemoryCache  ## Speichercaching der Datenbank
  GeoIPDBFile /usr/share/GeoIP/GeoLiteCity.dat CheckCache  ## Bevor die DB überprüft wird, prüft GeoIP die locale DB auf eine Änderung. Sollte dies der Fall sein, wird die lokale DB neugeladen ohne der Notwendigkeit den Webserver neu zu laden.
  GeoIPDBFile /usr/share/GeoIP/GeoIP.dat              ## GeoIP-Daten
  GeoIPDBFile /usr/share/GeoIP/GeoIP.dat MemoryCache  ## Speichercaching der Datenbank
  GeoIPDBFile /usr/share/GeoIP/GeoIP.dat CheckCache   ## Bevor die DB überprüft wird, prüft GeoIP die locale DB auf eine Änderung. Sollte dies der Fall sein, wird die lokale DB neugeladen ohne der Notwendigkeit den Webserver neu zu laden.
  GeoIPScanProxyHeaders On                            ## Per Standard, prüft dieses Modul nur die IP des Clients. Wird ein Proxy verwendet wird die IP des Proxys überprüft.

  SetEnvIf GEOIP_COUNTRY_CODE AE BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE AF BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE AL BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE AM BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE AZ BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE BA BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE BD BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE BG BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE BY BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE CD BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE CF BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE GR BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE HK BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE IL BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE IQ BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE IR BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE JO BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE KE BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE KG BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE KR BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE KZ BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE LB BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE LY BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE MA BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE MD BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE ME BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE MN BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE OM BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE PK BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE SA BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE SD BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE SN BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE SY BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE TJ BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE TM BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE TN BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE TW BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE UA BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE UZ BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE VN BlockCountry
</Ifmodule>

Zum Schluss muss man die gesetzte SetEnvIf Direktive im document-root /etc/apache2/sites-available/default setzen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<VirtualHost *:80>
        ServerAdmin root@meinedomain.net
        ServerName meinedomain.net
        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride FileInfo
                Order allow,deny
                allow from all
                Deny from env=BlockCountry
        </Directory>
....
...
..
.

Nach einem neuerlichen Laden der Konfiguration ist das Modul in gewünschter Weise aktiv:

sudo service apache2 restart
sudo service apache2 force-reload 

Kontrolle

Ruft man in einem beliebigen Browser die URL http://SERVER_IP_ODER_NAME/geoiptest.php auf, erhält man eine Ausgabe wie in etwa

Country code: US
Country name: United States
City name: Saginaw
Region: MI
Metro code: 513
Area code: 989
Latitude: 43.444099
Longitude: -84.025497
Postal code: 48603

Möchte man prüfen, ob der eigene Ländercode blockiert wird, editiert man gemäß dem eigenen Ländercode die geoip.conf. Man erhält bei einem neuerlichen Aufruf der geoiptest.php einen

"http 403 - access denied"

Problembehandlung

Dieses Modul arbeitet nur mit dem Webserver Apache. Fehler sind in den folgenden Log-Dateien ersichtlich: