Seite wählen

GeoIP2 mit NGINX unter Debian 10

Das Problem

Die oft genutzte GeoIP-Datenbank von MaxMind ist schon seit Anfang des Jahres zu­guns­ten der GeoIP2-Datenbanken eingestellt worden.

Die GeoIP2-Datenbanken laufen allerdings mit den alten, bisher genutzten Webserver-Modulen nicht mehr, was darin resultiert, dass man entweder die alten – nicht mehr aktuellen – Datenbanken nutzen oder aber den Webserver selbst kompilieren muss. Natürlich ist es sehr unschön, an der Paketverwaltung vorbei zu arbeiten; die alten Daten will aber auch niemand mehr nutzen.

Nach vielen erfolglosen Recherchen bei der Suchmaschine meiner Wahl, bin ich nicht fündig geworden und war schon sehr kurz davor, den NGINX händisch an der Paketverwaltung vorbei zu kompilieren – wenn auch mit einem unguten Gefühl.

Ein Dilemma…

Die Lösung

deb.sury.org! Sehr bekannt für seine PHP-Pakete betreibt er auch noch weitere Repositories – darunter auch eins für NGINX und dazugehörige Module.

Die Installation

Zu Beginn binden wir das angesprochene Repository ein. Hierzu installieren wir erst ein paar Abhängigkeiten, um danach den GPG-Key zu installieren und dann das Repository hinzuzufügen.

apt-get -y install apt-transport-https lsb-release ca-certificates
wget -q httpss://packages.sury.org/nginx/apt.gpg -O- | apt-key add -
echo "deb https://packages.sury.org/nginx/ buster main" | tee /etc/apt/sources.list.d/nginx-mainline.list
apt-get update

Nun steht uns die ganze Welt des schönen Repository offen und wir können das GeoIP2-Modul installieren:

apt-get install libnginx-mod-http-geoip2

Zack, das war’s schon. Natürlich muss jetzt noch der NGINX entsprechend konfiguriert und die GeoIP2-Datenbanken heruntergeladen werden, das überlasse ich aber wieder dem geneigten Leser. Weitere Informationen zum Modul findet man hier.

Proxmox: ungenutzte Kernel entfernen

Heute nur ein Kurztipp zum Sonntag!

Jeder Admin kennt das: man nutzt seinen Proxmox-Server schon ein paar Monate und es sammeln sich immer mehr ungenutzte Kernelversionen an… möchte man diese nun entfernen, kann man das natürlich händisch mit dpkg, apt oder aptitude machen – einfacher ist es aber mit pvekclean!

pvekclean ist ein kleines Skript von Jordan Hillis, das man gratis bei Github bekommt. Die Installation ist sehr simpel:

git clone https://github.com/jordanhillis/pvekclean.git
cd pvekclean
chmod +x pvekclean.sh

Fertig!

Beim ersten Start fragt das Skript, ob es sich zum einfacheren Aufruf in den Ordner /usr/local/sbin kopieren darf; kann man halten wie man möchte, ich finde es ganz angenehm. Hat man die Nachfrage bestätigt, kann man das Script ganz einfach via

pvekclean

aufrufen. Die Ausgabe bei mir sah so aus:

█▀▀█ ▀█ █▀ █▀▀   █ █ █▀▀ █▀▀█ █▀▀▄ █▀▀ █
█  █  █▄█  █▀▀   █▀▄ █▀▀ █▄▄▀ █  █ █▀▀ █
█▀▀▀   ▀   ▀▀▀   ▀ ▀ ▀▀▀ ▀ ▀▀ ▀  ▀ ▀▀▀ ▀▀▀

█▀▀ █   █▀▀ █▀▀█ █▀▀▄ █▀▀ █▀▀█
█   █   █▀▀ █▄▄█ █  █ █▀▀ █▄▄▀   ⎦˚◡˚⎣ v1.2
▀▀▀ ▀▀▀ ▀▀▀ ▀  ▀ ▀  ▀ ▀▀▀ ▀ ▀▀
By Jordan Hillis [contact@jordanhillis.com]
___________________________________________

Usage: pvekclean [OPTION]

  -f,   --force         Remove all old PVE kernels without confirm prompts
  -s    --scheduler     Have old PVE kernels removed on a scheduled basis
  -v,   --version       Shows current version of pvekclean
  -r    --remove        Uninstall pvekclean from the system
___________________________________________

OS: Debian GNU/Linux 9 (stretch)
Boot Disk: 74% full [342M/488M used, 121M free]
Current Kernel: pve-kernel-4.15.18-16-pve
___________________________________________

[*] Boot disk space used is healthy at 74% capacity (121M free)
[-] Searching for old PVE kernels on your system...
[*] "pve-kernel-4.15.18-10-pve" has been added to the kernel remove list
[*] "pve-kernel-4.15.18-11-pve" has been added to the kernel remove list
[*] "pve-kernel-4.15.18-12-pve" has been added to the kernel remove list
[*] "pve-kernel-4.15.18-13-pve" has been added to the kernel remove list
[*] "pve-kernel-4.15.18-14-pve" has been added to the kernel remove list
[*] "pve-kernel-4.15.18-15-pve" has been added to the kernel remove list
[-] PVE kernel search complete!
[!] Would you like to remove the 6 selected PVE kernels listed above? [y/N]: Y
[*] Removing 6 old PVE kernels...DONE!
[*] Updating GRUB...DONE!
[-] Have a nice day ⎦˚◡˚⎣

Natürlich sollte man, bevor man die Abfrage zum endgültigen Löschen bestätigt, sicher sein, dass der aktuelle Kernel nicht entfernt wird. Führt man das Skript nun in regelmäßigen Abständen aus, bleibt die Kernelliste auf dem Server immer schön sauber!

Zabbix: Fehler nach Upgrade auf 4.2

Fehler im Zabbix-Frontend

„The frontend does not match Zabbix database. Current database version (mandatory/optional): 4010005/4010005. Required mandatory version: 40200000. Contact your system administrator.“

Diese nette Fehlermeldung hat mich heute nach dem Upgrade meines Zabbix Server auf Version 4.2 begrüßt.

Im Log des Servers habe ich dann den entscheidenden Hinweis gefunden, wieso das automatische Upgrade der Datenbank nicht funktioniert hatte:

[Z3005] query failed: [1071] Specified key was too long; max key length is 767 bytes [create unique index lld_macro_path_1 on lld_macro_path (itemid,lld_macro)]

Letzten Endes hatte ich offenbar beim damaligen Erstellen der Datenbank für Zabbix nicht gut genug aufgepasst und das Charset/die Kollation falsch gesetzt. Sollte euch das auch passiert sein: keine Panik!

Ihr könnt die Datenbank mit zwei einfachen Befehlen auf die empfohlenen Optionen utf8/utf8_bin umstellen, vorher sollte natürlich unbedingt ein Backup der Datenbank stattfinden!

# Herausfinden, ob das falsche Charset gewählt ist
SELECT default_character_set_name FROM information_schema.SCHEMATA S WHERE schema_name = "zabbix";

# Alle Tabellen der Datenbank "zabbix" umstellen
mysql --database=zabbix -B -N -e "SHOW TABLES" | awk '{print "SET foreign_key_checks = 0; ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin; SET foreign_key_checks = 1; "}' | mysql --database=zabbix

# Die eigentliche Datenbank "zabbix" umstellen
ALTER DATABASE zabbix CHARACTER SET utf8 COLLATE utf8_bin;

Wurden die Befehle korrekt ausgeführt, könnt ihr den Zabbix Server neugestartet werden und das Log sollte nun das korrekt gelaufene Datenbank-Upgrade ausspucken – und das Frontend wieder erreichbar sein.

Hetzner und Proxmox: IPv6 mit Router-VM nutzen

For a english version of this article follow this link.

Nachdem meine Anleitung zur Einrichtung einer pfSense-Router-VM bei Hetzner so gut angekommen ist, möchte ich heute erläutern, wie man mit dieser VM auch das von Hetzner zugewiesene IPv6 nutzen kann.

Vorwort

Ich habe inzwischen dem pfSense-Projekt den Rücken gekehrt und bin voll auf OPNSense umgestiegen. Die Gründe hierfür sind vielfältig, in erster Linie gefällt mir aber das Interface der OPNSense einfach viel besser. Ob man nun aber eine pfSense- oder eine OPNSense-VM nutzt, dürfte völlig unerheblich sein – einzig die Menüpunkte könnten an unterschiedlichen Orten zu finden sein.

Hetzner weist jedem dedizierten Server ein /64-IPv6-Netzwerk zu, das man frei auf seine MAC-Adressen routen lassen kann. Hierzu muss man im Robot auf den kleinen Computer hinter dem IPv6-Subnet klicken. Hier stellen wir das Routing um auf die MAC-Adresse der Router-VM.

Konfiguration WAN-Interface

Die Konfiguration des WAN-Interface ist sehr einfach, daher möchte ich nur einen Screenshot vorzeigen:

Konfiguration des WAN-Interface für IPv6
Konfiguration des WAN-Interface für IPv6

Wie man sieht nutzen wir hier DHCP6 und lassen uns die IP-Adressse für das WAN von Hetzner zuweisen. Bei mir war ein Neustart der VM nötig, nachdem ich IPv6 auf dem WAN aktiviert habe. Im Dashboard sieht man die frisch zugewiesene IPv6-Adressen am WAN-Interface – in meinem Fall war das die fe80::250:56ff:fe00:222c.

Die DHCPv6-Client-Konfiguration (Request only an IPv6 prefix, Send IPv6 prefix hint und Use IPv4 connectivity) müssen unbedingt gesetzt werden – ohne diese Optionen hatte ich keinen Erfolg.

Konfiguration LAN-Interface

Auch hier möchte ich einen Screenshot nutzen, um die Konfiguration zu zeigen.

Konfiguration des LAN-Interface für IPv6
Konfiguration des LAN-Interface für IPv6

Als IPv6-Adresse nutzt ihr am besten die erste IPv6-Adresse aus dem von Hetzner zugewiesenen Subnet (bei mir: 2a01:4f9:2a:129e:: / 64). Weitere Einstellungen sind hier nicht notwendig!

Gateway-Konfiguration

Bei mir kam die OPNSense dann leider nicht immer nicht per IPv6 nach außen, weshalb ich noch einige Zeit gerätselt habe, was da nun los ist.

Unter System -> Gateways war dann der Fehler versteckt. Hier habe ich das Gateway entsprechend angepasst:

Konfiguration des Gateway für IPv6
Konfiguration des Gateway für IPv6

Ber mir war das Gateway nicht als Default Gateway gesetzt und ich habe die statische IPv6-Adresse eingetragen, statt das Gateway auf „dynamic“ zu belassen – das eigentliche Problem resultierte aber aus dem fehlenden Default Gateway.

Nach Abschluss der Arbeiten habe ich einen Neustart der OPNSense durchgeführt und erneut die IPv6-Erreichbarkeit getestet: mit Erfolg.

Konfiguration einer VM

Abschließend möchte ich noch zeigen, wie man eine Ubuntu- bzw. Windows-VM in diesem Setup per IPv6 erreichbar macht. Ich habe mich gegen die Nutzung von DHCP6 im internen Netz entschieden und konfiguriere die virtuellen Maschinen statisch.

Konfiguration Ubuntu/Debian

Die Konfiguration einer Ubuntu-/Debian-VM ist gewohnt einfach zu bewerkstelligen. Hierzu fügen wir in der Datei /etc/network/interfaces unseren IPv6-Konfigurationsblock ein:

iface ens18 inet6 static
    address 2a01:4f9:2a:129e::2 # frei wählbare IPv6-Adresse
    netmask 64
    gateway 2a01:4f9:2a:129e::1 # IPv6-Adresse der pfSense/OPNSense

Ziemlich simpel, nicht?

Konfiguration Windows

Auch die Konfiguration der Windows-VM ist ausnahmsweise ziemlich simpel. Man aktiviert in den Adaptereinstellungen IPv6, falls das noch nicht geschehen ist, und trägt dort die selben Daten ein, wie unter Linux:

  • Adresse: frei wählbare IPv6-Adresse aus dem Subnet
  • Subnetzmaske: /64
  • Gateway: IPv6-Adresse der pfSense/OPNSense

Bei beiden Konfigurationen muss man womöglich noch einen oder mehrere IPv6-Nameserver eintragen, damit die Namensauflösung ordentlich klappt.

Fazit

Im Internet liest man viele Horrorgeschichten über die Konfiguration von IPv6 bei Hetzner – beschäftigt man sich allerdings mal mit dem ganzen Setup ist die Einrichtung letztlich gar nicht schwierig und ziemlich flott erledigt.

Gerne beantworte ich Fragen oder nehme Hinweise zu meinem Setup entgegen. Perfekt ist es sicher nicht, das weiß ich, aber es funktioniert bei mir zuverlässig, weshalb ich darüber eigentlich ganz glücklich bin. Sollte dennoch jemand einen guten Tipp parat haben: gerne ab in die Kommentare damit!

Übrigens: diese Website ist nun auch per IPv6 erreichbar… 😉

ISPProtect Web Scanner – „Virenscanner“ für Webserver

Security auf Webservern ist auch bei meinen Kunden ein immer wichtiger werdendes Thema.

Mit der stetig wachsenden Zahl an Sicherheitslücken in Web-Applikationen ist es umso wichtiger, auch die Content Management-Systeme und ihre Plugins aktuell zu halten.

Was aber tun, wenn man keinen Zugriff auf die Systeme der Kunden hat und nur via SSH auf dem Server arbeitet? Hier kommt der ISPProtect Web Scanner ins Spiel!

(mehr …)