Debian 9 Upgrade mit nginx und PHP 7.2

Ich habe nun alle meine Debian Systeme auf die neueste Version „Stretch“ ohne größere Probleme aktualisieren können.

Da ich in den letzten Jahren allerdings immer größere Probleme hatte und weiß, dass eine gute Anleitung hilfreich sein kann, möchte ich hier meine Vorgehensweise anhand eines Webservers mit Debian 8 beschreiben.

Hintergrund

Gerade bei Webservern ist eine Aktualisierung wichtig, da Sicherheitslücken den Server schnell zu einer Virenschleuder verwandeln können.

Sollte PHP auf dem Webserver verwendet werden, führt kaum ein Weg an einem Upgrade vorbei, da Debian 8 keine aktuelle PHP-Version ausliefert. (Debian 9 zwar auch nicht wirklich aber dazu später mehr …)

Vorbereitung

Folgende Punkte führe ich immer vor einer Webserver-Aktualisierung durch:

  • Wartungsmodus in WordPress / anderen CMS aktivieren
    • Bei größeren Projekten die Nutzer über das Upgrade informieren
  • Wichtige Verzeichnisse sichern (sollte man generell regelmäßig machen), z.B.:
    • Webserver-Verzeichnis (/var/www)
    • /opt Verzeichnis (bei manuell hinzugefügter Software)
    • /home Verzeichnisse (Daten der Unix-Nutzer)
  • Wichtige Dateien sichern
    • z.B.: /etc/crontab mit regelmäßig ausgeführten Skripten
  • Alle Datenbanken sichern

Aktuelle Pakete herunterladen

Mit

apt update

und danach

apt upgrade

aktualisiert man die aktuellen Pakete.

Alte Sources sichern

Damit man bei Problemen schnell wieder auf Debian Jessie wechseln kann, ist eine Sicherung der alten Sources List hilfreich:

cp /etc/apt/sources.list /etc/apt/sources.list_backup

Wichtig: Sollte es auch Dateien unter /etc/apt/sources.list.d geben, ist auch eine Sicherung dieser Dateien nicht überflüssig!

Neue Sources pflegen

Nun sollte man den Namen der alten Version durch den Namen der neuen Version in der Sources.list und allen anderen Dateien unter z.B.: /etc/apt/sources.list.d aktualisieren. sed ist für solche Aufgaben perfekt geeignet:

sed -i 's/jessie/stretch/g' /etc/apt/sources.list

Pakete aktualisieren

Nachdem wir nun die Quellen auf die neue Version geändert haben, können wir die Paketquellen mit den folgenden Befehl aktualisieren:

apt update

Anschließend aktualisieren wir die Pakete wieder mit:

apt upgrade

Hier kann es sein, dass wir den Befehl mehrmals ausführen müssen und gefragt werden, ob wir die aktuellen Konfigurationsdateien behalten wollen oder neue Konfigurationsdateien übernehmen (letzteres sollte nur gemacht werden, wenn nichts an den Konfigurationen geändert wurde).

Systemupgrade abschließen

Mit den bisherigen Befehlen wurden noch nicht alle Pakete aktualisiert. Um das Systemupgrade abzuschließen, benötigen wir eine Ausführung des folgenden CLI-Befehls:

apt dist-upgrade

Systemupgrade prüfen

Nach einem großen Upgrade empfiehlt sich ein Neustart, welcher mit

reboot

durchgeführt werden kann.

Um festzustellen, ob wir die gewünschte Version haben, kann man diese mit cat ausgeben lassen:

cat /etc/issue

PHP aktualisieren

Zum Zeitpunkt dieses Posts gibt es noch keinen mir bekannten Weg, um PHP direkt von den Debian Sources zu beziehen. Deshalb müssen für PHP 7.2 Fremdquellen genutzt werden. Bei Fremdquellen sollte immer auch auf das Sicherheitsrisiko geschaut werden.

Vorerst sollten wir PHP deinstallieren:

apt purge php*

Anschließend den Schlüssel des fremden Repos importieren:

wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add -

Um dann die Quelle in eine Sources List zu speichern:

sudo echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list

Die Paketquellen aktualisieren wir wieder mit:

apt update

Nun können wir endlich die neue Version von PHP installieren:

sudo apt install php7.2

(hier können natürlich auch noch weitere Pakete wie php7.2-imap gewählt werden)

nginx anpassen

Da ich gerne nginx als Webserver verwende, musste ich für die neue PHP-Version auch den Socket in den sites-available aktualisieren.

Dafür wechseln wir erst in das Verzeichnis der virtual Hosts:

cd /etc/nginx/sites-available/

Danach bearbeiten wir die gewünschte Website mit einem Editor unserer Wahl – z.B.: nano.

Wir suchen erst nach fastcgi_pass und passen die Zeile dann wie folgt an:

fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;

Um die Änderung aktiv zu schalten, müssen wir den Webserver noch neu starten:

systemctl restart nginx.service

Ich hoffe, meine Erklärung des Debian Upgrades war hilfreich. Wenn ihr zukünftig Tutorials zu Themen wie Debian Webserver erhalten möchtet, könnt ihr mir gerne auf Twitter folgen.

nginx: upstream sent too big header

Beim Einloggen in einen WordPress Blog hatte ich vor Kurzem nach einem Upgrade von Debian und PHP einen 502 Bad Gateway Error. Dieser wurde von einem „upstream sent too big header“ Fehler ausgelöst.

Da ich zu diesem Fehler nur englische Beiträge gefunden habe, möchte ich hier mal einen Lösungsweg auf Deutsch teilen.

In der nginx Error Log, welche man unter Debian unter /var/log/nginx/error.log finden kann, fand ich die folgende Zeile:

[error] upstream sent too big header while reading response header from upstream, client: ***.***.***.***, server: *****.***, request: "GET /wp-login.php

(Domain und IP-Adresse aus Datenschutzgründen unkenntlich gemacht)

Eine Lösung, um diesen Fehler zu beheben, ist unter Debian die /etc/nginx/fastcgi.conf zu bearbeiten und die folgenden Zeilen hinzuzufügen, um die Buffer Size festzulegen:

fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;

(Stack Overflow Post dazu)

Natürlich muss man selbst ermitteln bzw. wissen, welche Buffergrößen notwendig sind. Nginx selbst hat hierzu auch eine gute Dokumentation online: http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_buffer_size

MECSA: SPF, DKIM und DMARC bei Mailservern

Ich bin gestern über das Projekt My Email Communications Security Assessment (MECSA) der Europäischen Union gestoßen. Mit dem Online-Dienst, welcher unter https://mecsa.jrc.ec.europa.eu/ erreichbar ist, kann man die Sicherheit der E-Mail-Kommunikation zwischen Providern testen.

Da ich meinen Mailserver gestern umgezogen habe und dessen Bewertung bei anderen Providern verbessern sowie den E-Mail-Verkehr sichern wollte, fand ich dieses Tool recht hilfreich.

Im Grunde sind drei Verfahren / Techniken für eine gute Bewertung bei MECSA wichtig. Diese Verfahren müssen alle als TXT-Records beim DNS-Server der jeweiligen Domain eingerichtet werden.

SPF

Sender Policy Framework – gibt aus, welche Server E-Mails für die Domain versenden dürfen. In den meisten Fällen reicht der folgende TXT-Record hierfür völlig aus:

@                   IN TXT     "v=spf1 mx ~all"

Wer sich mehr damit befassen will, sollte am besten einfach mal seine Suchmaschine verwenden.

DKIM

DomainKeys Identified Mail –  hiermit will man im Grunde sicherstellen, dass die E-Mails auch wirklich von angegeben Absender kommen und nichts verändert wurde. Hierfür gibt es einen privaten und einen öffentlichen Schlüssel. Den öffentlichen Schlüssel hinterlegt man als TXT-Record auf den DNS-Server und der private Schlüssel wird auf dem Mailserver verstaut.

Manche Mailserversoftware wie z.B.: Mailcow haben zur Erzeugung der Schlüssel eine grafische Benutzeroberfläche.

DMARC

DMARC ist im Endeffekt das Verbindungsstück von  SPF und DKIM. Man gibt damit an, was passieren soll, wenn die E-Mail nicht SPF und DKIM entspricht und wer über die E-mail informiert werden soll.

MXToolBox bietet einen guten Generator die Erzeugung des TXT-Records an: https://mxtoolbox.com/DMARCRecordGenerator.aspx

Übrigens verwenden aktuell GMX, Web und 1&1 sowie viele andere deutsche Provider kaum die in diesem Post veröffentlichen Methoden und haben daher eine eher schlechte MECSA Bewertung.

Gitea Update

Gitea ist im Grunde etwas wie GitHub, nur selbst gehostet. (Ähnlich zu GitLab nur nicht so intensiv im Verbrauch von RAM und CPU)

Gitea ist ein Fork von Gogs – allerdings mit einer offeneren Mentalität der Community als Gogs …

Nun verwende ich diese Software auf einem meiner Server und wollte es heute aktualisieren. Bei einer „normalen“ Anwendung klickt man dazu einfach auf einen Button wie „Update suchen“. Leider gibt es diesen Button bei Gitea aktuell nicht.

Was also tun?

Ich habe das gemacht, was man an der Stelle wahrscheinlich oft als Erstes macht: Googeln!

Google brachte mir das Ergebnis: https://geeklabor.de/archives/207-Gitea-source-update.html

Dieses Ergebnis brauchte mich aber nicht weiter, da ich nicht einmal die Programmiersprache Go auf meinem System installiert hatte … (Ich erwähne es hier trotzdem, vielleicht hilft es ja jemand weiter ….)

Die Lösung!

Ich hatte Gitea als Binary auf meinem Server installiert. Gitea bietet auf GitHub neue Versionen auch als Binary an.

Die Lösung war also recht einfach: Neue Binary mit wget ziehen, mit mv umbenennen, die Berechtigungen mit chmod und chown ändern und wie gewohnt ausführen!

Vor solchen Updates sollte man übrigens mit ./gitea dump eine Sicherung erstellen …

Tutorial: Einen Debian Server absichern

In letzter Zeit werden immer wieder Server für Projekte von „Wronnay“ eingerichtet. Um das Ganze etwas bequemer zu machen, wurde von mir ein Bash-Script erstellt, dass die Grundeinrichtung etwas vereinfacht. Ich möchte jetzt eine kleine Anleitung veröffentlichen, die die Verwendung dieses Scripts erklärt.

Informationen über das Script:

  • Es steht unter der GNU General Public License
  • Es aktualisiert die installieren Pakete
  • Es installiert folgende Pakete: ufw rkhunter fail2ban nano sudo htop whois
  • Es setzt einen Cronjob für tägliche Paket-Updates
  • Es erstellt eine Grundkonfiguration für die Firewall „ufw“
  • Es erstellt einen neuen Benutzer
  • Der Standard-Port für SSH wird geändert und der Login mit dem „root“ – User verboten

Verwendung:

Bevor das Script heruntergeladen werden kann, müssen erst die nötigen Pakete zur Verwendung installiert werden:

Zuerst benötigen wir Root-Rechte:

su

Jetzt installieren wir die benötigten Pakete:

apt-get install nano git

Nun können wir das Script downloaden:

git clone https://github.com/CMiksche/DebianServerBasicConfig.git

Anschließend wechseln wir in das Verzeichnis:

cd DebianServerBasicConfig

Und geben in der config.sh – Datei unsere gewünschten Daten (Benutzername, Passwort, SSH-Port) ein:

nano config.sh

Nach dem Abspeichern der Datei geben wir der Install-Datei noch die passenden Rechte:

chmod 0777 install.sh
chown root install.sh

So. Jetzt können wir die Datei auch ausführen:

./install.sh

Danach müssen wir nur noch das Script löschen:

cd ..
rm -R DebianServerBasicConfig

Fertig. Bei dem nächsten Einloggen über SSH ist jetzt nur noch zu beachten, das man den neuen Port, Benutzer und das neue Passwort verwenden muss.

Vorerst keine Suche mehr

Die bisherige Suchmaschine unter „Wronnay.net“ gibt es vorerst nicht mehr. Das dürfte allerdings auch kaum jemanden interessieren, da die Suche sowieso sehr unbekannt war.

Weil die Funktion so unbekannt war, habe ich auch auf dem Server ein Upgrade auf Debian Jessie („8“) ausprobiert, was allerdings schief lief. Deshalb gibt es seit gestern unter „Wronnay.net“ meine ehemalige Projektübersicht.

Die Suche wird vielleicht bald wieder auferstehen, wenn ich eine Lösung gefunden habe, wie ich meine Anpassungen am Server auf die neue Version von Debian umstellen kann. Vielleicht werde ich die Suche aber trotzdem nicht wieder aktivieren – der Dienst wurde so gut wie nie genutzt, hatte allerdings eine sehr hohe Serverauslastung …

Server: Umzug

Der Server, der 2014 für die meisten Projekte verwendet wurde, wird jetzt nicht mehr verwendet. Im Januar sind die ersten Projekte des alten Servers auf einem neuen umgezogen und die restlichen Projekte sind in den letzten Tagen auf einen anderen, neuen Server umgezogen.

Die zwei neuen Server haben jeweils mehr Leistung als der alte Server. Der Standort (Frankfurt am Main) bleibt und auch sonst hat sich nicht viel mehr geändert, außer dass jetzt mehr als die doppelte Leistung des alten Servers verfügbar ist.

Insgesamt werden im Netzwerk von Wronnay.net 4 Server in 3 Ländern verwendet.

Vorschau: 2015

Hier eine kurze Übersicht, was 2015 alles passieren könnte bzw.: wird:

Umzüge

ForenHosting.net und WebPage4.Me sind schon auf einem neuen Server umgezogen, Wronnay.net wird wahrscheinlich um Februar auf einen neuen Server umziehen. Grund dafür sind die billigeren Preise eines neuen Anbieters und die gleichbleibenden Preise des alten Anbieters. Der Speicherplatz wird mehr als dreimal so groß wie vorher und der RAM mehr als doppelt so groß wie bei dem alten Server.

Werbenetzwerk

Ich arbeite schon längere Zeit an ein System für ein neues Werbenetzwerk namens AnaAds.de, dieses Jahr könnte dies veröffentlicht werden.

Aktien

Es könnte sein, dass „Wronnay Shares“ – ein System zur Analyse von Aktien veröffentlicht wird.

Hosting

Wie schon erwähnt, gibt es 2015 mehr Speicherplatz für Projekte – es könnte sein, dass die Hosting-Plattform „Wronnay Hosting“ erstellt wird.

Gründung einer Firma

Damit kostenpflichtige Leistungen (z.B.: „Verkauf von Werbeplätzen“ oder „Verkauf von Domains“) angeboten werden können, könnte es sein, dass eine Firma gegründet wird.

Bestehende Projekte werden natürlich auch dieses Jahr verbessert werden.

PS: Das ist der 100. Beitrag auf diesem Blog.

Vorübergehender vierter Server

Bis Ende Januar wird ein vierter Server getestet, wenn dieser die Anforderungen erfüllt, wird vermutlich ein Umzug einiger Webseiten auf den Server stattfinden und dafür ein anderer Server eingestellt werden.

Es wäre sogar möglich, dass der teuerste Server abgeschafft wird und dafür zwei kleinere angeschafft werden.

Änderungen an der Infrastruktur

Da die beiden wichtigsten Server im Wronnay.net / ForenHosting.net / WebPage4.Me – Netzwerk in letzter Zeit immer wieder Schluckauf hatten, werden jetzt mehrere Änderungen durchgeführt, die die Zuverlässigkeit verbessern sollen:

  • CloudFlare wurde schon die ganze Zeit zur DNS-Verwaltung genutzt, jetzt wird der Dienst auch teilweise als DDoS-Schutz eingesetzt.
  • Wenn die Server ausfallen, sendet ein externer Dienst jetzt automatisch eine E-Mail an die Administration
  • Die Domains waren hauptsächlich bei einem Provider, jetzt werden sie auf mehrere Provider aufgeteilt