Ich beschreibe euch wie ihr einen eigenen IP-Info oder auch „wie-ist-meine-ip“ Dienst nur mit NGINX und GeoIP2 betreiben könnt.
So wurde auch der adminForge Service: ipwho.de konfiguriert.
Aufbau des Setups:
- Ubuntu 18.04 LTS als Betriebssystem
- NGINX Webserver: HTTP Port 80, HTTPS Port 443
- MaxMind GeoIP: GeoLite2-City und GeoLite2-ASN Datenbanken
Punkt 1: NGINX Repository hinzufügen
Als ersten Schritt installieren wir unter Ubuntu 18.04 LTS das PPA Repo von Ondřej Surý.
Es kann auch jedes andere NGINX Repo verwendet werden, es sollte nur libnginx-mod-http-geoip2
enthalten sein!
1 2 |
add-apt-repository ppa:ondrej/nginx apt-get update |
Punkt 2: NGINX mit GeoIP2 installieren
Jetzt kann nginx
installiert werden, dabei wir automatisch libnginx-mod-http-geoip2
mit installiert und geladen.
1 |
apt-get install nginx |
Punkt 3: NGINX vHost erstellen
Wir erstellen den vHost. Passt bitte den server_name
sowie ssl_certificate
und ssl_certificate_key
an! Den Footer könnt ihr natürlich auch anpassen.
Wie ihr ein SSL Zertifikat erstellt beschreibe ich im Let’s Encrypt via acme.sh für Apache und Nginx Tutorial.
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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
real_ip_header X-Real-IP; set_real_ip_from 10.0.0.0/8; set_real_ip_from 172.16.0.0/12; set_real_ip_from 192.168.0.0/16; geoip2 /usr/share/GeoIP/GeoLite2-City.mmdb { auto_reload 1d; $ip_country_code source=$remote_addr country iso_code; $ip_country_name source=$remote_addr country names en; $ip_city_name source=$remote_addr city names en; } geoip2 /usr/share/GeoIP/GeoLite2-ASN.mmdb { auto_reload 1d; $ip_asn source=$remote_addr autonomous_system_number; $ip_aso source=$remote_addr autonomous_system_organization; } server { listen 80; listen [::]:80; server_name DOMAIN.de; access_log off; error_log off; default_type text/plain; add_header Cache-Control no-cache; expires off; # Let's Encrypt location /.well-known/acme-challenge { root /var/www/letsencrypt; default_type text/plain; try_files $uri =404; } add_header X-Powered-By "adminForge.de" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-XSS-Protection "1; mode=block" always; add_header X-Content-Type-Options "nosniff" always; add_header Referrer-Policy "no-referrer-when-downgrade" always; add_header Content-Security-Policy "default-src 'none'; img-src 'self'" always; set $ip_country "$ip_country_code / $ip_country_name / $ip_city_name"; set $ip_as "AS$ip_asn / $ip_aso"; set $footer "--- help ---\ncurl 4.ipwho.de/ip --> 8.8.8.8\ncurl 6.ipwho.de/ip --> 2001:4860:4860::8888\ncurl ipwho.de/json\n\nipwho.de proudly presented by adminForge.de. GeoLite2 data created by MaxMind.com."; location /ip { return 200 "$remote_addr\n"; } location / { return 200 "$remote_addr\n$ip_country\n$ip_as\n\n$http_user_agent\n\n$footer\n"; } location /json { default_type application/json; return 200 "{\"ip\":\"$remote_addr\",\"country_code\":\"$ip_country_code\",\"country_name\":\"$ip_country_name\",\"city_name\":\"$ip_city_name\",\"asn\":\"$ip_asn\",\"as_desc\":\"$ip_aso\",\"user_agent\":\"$http_user_agent\"}\n"; } } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name DOMAIN.de; access_log off; error_log off; default_type text/plain; add_header Cache-Control no-cache; expires off; ssl_certificate /etc/ssl/private/DOMAIN.de_ecc/fullchain.cer; ssl_certificate_key /etc/ssl/private/DOMAIN.de_ecc/ipwho.de.key; add_header X-Powered-By "adminForge.de" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-XSS-Protection "1; mode=block" always; add_header X-Content-Type-Options "nosniff" always; add_header Referrer-Policy "no-referrer-when-downgrade" always; add_header Content-Security-Policy "default-src 'none'; img-src 'self'" always; set $ip_country "$ip_country_code / $ip_country_name / $ip_city_name"; set $ip_as "AS$ip_asn / $ip_aso"; set $footer "--- help ---\ncurl 4.ipwho.de/ip --> 8.8.8.8\ncurl 6.ipwho.de/ip --> 2001:4860:4860::8888\ncurl ipwho.de/json\n\nipwho.de proudly presented by adminForge.de. GeoLite2 data created by MaxMind.com."; location /ip { return 200 "$remote_addr\n"; } location / { return 200 "$remote_addr\n$ip_country\n$ip_as\n\n$http_user_agent\n\n$footer\n"; } location /json { default_type application/json; return 200 "{\"ip\":\"$remote_addr\",\"country_code\":\"$ip_country_code\",\"country_name\":\"$ip_country_name\",\"city_name\":\"$ip_city_name\",\"asn\":\"$ip_asn\",\"as_desc\":\"$ip_aso\",\"user_agent\":\"$http_user_agent\"}\n"; } } |
Wir aktivieren den vHost. Starten NGINX aber noch nicht neu!
1 2 |
cd /etc/nginx/sites-enabled ln -s /etc/nginx/sites-available/ip.conf |
Punkt 4: Installation der MaxMind Datenbank
Ich fasse mich gewohnt kurz, es kann auch gerne nach der offiziellen Anleitung von MaxMind vorgegangen werden.
Wir aktivieren das Repository und installieren geoipupdate
.
1 2 3 |
add-apt-repository ppa:maxmind/ppa apt update apt install geoipupdate |
Punkt 5: MaxMind Account erstellen und Lizenzkey
Um die MaxMind GeoLite2 Datenbanken nutzen zu können benötigen wir einen Account. Wir erstellen uns hier einen MaxMind Account. Wer sein Postfach sauber halten möchte, darf gerne unseren Trash Mailer verwenden.
Anschließend können wir uns hier einen Lizenzkey generieren.
Die Account/User ID und den License key fügen wir in diese Datei ein. Die EditionIDs Zeile kann so übernommen werden.
1 2 3 4 5 6 |
[..] AccountID 123456 LicenseKey xxxxxxxxxxxxx [..] EditionIDs GeoLite2-ASN GeoLite2-City GeoLite2-Country [..] |
Punkt 6: geoipupdate
Wir lassen geoipupdate einmalig laufen und legen uns einen Cronjob an.
1 2 3 |
# geoipupdate # crontab -e 18 7 * * 6 /usr/bin/geoipupdate |
Punkt 7: NGINX Config prüfen
Wir prüfen ob unsere NGINX Konfiguration korrekt ist.
1 2 3 |
# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful |
Sollte alles passen starten wir NGINX neu.
1 |
systemctl restart nginx.service |
Punkt 8: Testen
Wenn alles richtig verlaufen ist sollte nun eine Ausgabe wie diese kommen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
% curl DOMAIN.de 87.78.xxx.xx DE / Germany / Troisdorf AS8422 / NetCologne Gesellschaft fur Telekommunikation mbH curl/7.69.0 --- help --- curl 4.ipwho.de/ip --> 8.8.8.8 curl 6.ipwho.de/ip --> 2001:4860:4860::8888 curl ipwho.de/json ipwho.de proudly presented by adminForge.de. GeoLite2 data created by MaxMind.com. |
Unterstütze unsere Arbeit mit einer Spende. |