Ubuntu 14.04 Trusty Tahr
Ubuntu 12.04 Precise Pangolin
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 .
Apache-Module sollte man immer in ihren /etc/apache2/mods-available/*.conf Dateien ändern, nie in ihren /etc/apache2/mods-enabled/*.load Dateien!
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.
mod_geoip2 ist direkt in den Paketquellen von Ubuntu enthalten. Benötigt wird folgendes Paket [4]:
libapache2-mod-geoip (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install libapache2-mod-geoip
sudo aptitude install libapache2-mod-geoip
Anschließend muss das Modul noch aktiviert werden. Dies geschieht am einfachsten mit den folgenden Befehlen im Terminal:
sudo a2enmod geoip
Zusätzliche Fremdquellen können das System gefährden.
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
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"
Dieses Modul arbeitet nur mit dem Webserver Apache. Fehler sind in den folgenden Log-Dateien ersichtlich:
/var/log/syslog
/var/log/apache2/access.log
/var/log/apache2/error.log
Diese Revision wurde am 24. Mai 2015 02:14 von ubot erstellt.