Starke und sichere SSL Verschlüsselung mit NGINX

idee

Verschlüsselung ist gut – sichere Verschlüsselung ist besser!

In diesem Artikel werden wir unsere Verschlüsselung unter NGINX verstärken und somit sicherer machen. Wir werden so umstellen, dass nur noch Protokolle, Cipher Suites und Verschlüsselungsalgorithmen genutzt werden, welche – Stand Heute – als sicher gelten, also keine Schwachstellen vorhanden sind.

Ziel ist es, Angriffe wie Heartbleed, BEAST, Poodle und Konsorten zu verhindern,  wir werden nur Cipher Suites verwenden, welche Forward Secrecy bieten und SSL v3 und älter unterbinden.

Wir möchten als Ergebnis ein A+ Rating beim SSL Labs Test erhalten.

Bitte beachtet, dass ihr damit möglicherweise einige veraltete Browser von eurer Webseite ausschließt, z.B. Internet Explorer 8 und älter unter Windows XP. Diese Browser unterstützen in der Regel aber sowieso kein SNI (virtuelles SSL Hosting). Im Sinne der Sicherheit sollte das akzeptabel sein.

Ausgangslage

Zum Start nehmen wir eine Webseite auf einem vServer welche mittels EasyEngine eingerichtet wurde.

Die URL dieser Seite werfen wir in den SSL Labs Test und erhalten folgendes Ergebnis:

SSL Repost Ausgangslage

Als Overall Rating erhalten wir ein ‚B‘ – wobei wir schon sehen könne, dass unser Zertifikat 100% erreicht, die Protokoll Unterstützung sowie die Cipher Stärke sehr gut bewertet sind.

Auf Grund des schwachen Diffie-Hellman Schlüssel Austausches, wird die Bewertung aber auf ‚B‘ begrenzt. Dieses wollen wir durch unsere Anpassungen ‚korrigieren‘.

Wir nehmen Änderungen an der Konfiguration eures Servers vor – bitte legt euch ein Backup aller Konfigurationsdateien an – und immer daran denken: Alle Änderungen auf eigene Gefahr!

NGINX Anpassen

Dieses HowTo basiert auf einer Einrichtung mit EasyEngine – lässt sich aber auf alle NGINX Einrichtungen anwenden, die Pfade sind dann allerdings möglicherweise abweichend!

Grundsätzlich bestehen 2 Möglichkeiten die Einstellungen anzupassen:

  1. Global für alle per NGINX bedienten Domains
  2. Für jede Domain einzeln

Wenn ihr das Global einstellen möchtet, dann ändert ihr die Einstellungen in der NGINX Konfigurationsdatei unter /etc/nginx/nginx.conf

Einige der hier im HowTo besprochenen Anpassungen sind bei EasyEngine bereits voreingestellt!

Solltet ihr das per Domain anpassen, dann ändert ihr das in der Konfigurationsdatei der jeweiligen Domain, und zwar im { server } Block,  die Anpassungen werden im SSL Teil vorgenommen!

Ihr findet die Konfigurationsdatei hier: /var/www/domain.de/conf/nginx/ssl.conf – bitte domain.de gegen eure Domain austauschen.
Bei Debian Standard Einrichtung unter /etc/nginx/sites-available/domain.de – bei CentOS unter /etc/nginx/nginx.conf.

Der Inhalt der Konfiguration sieht wie folgt aus:

Diese Konfiguration passen wir nun an:

SSLv2 und SSLv3 abschalten

SSLv2 und SSLv3 sind unsicher, wir werden diese abschalten und nur die Protokolle TLS v1 v1.1 und v1.2 unterstützen, dazu fügen wir folgende Zeile zur Konfiguration hinzu:

TLSv1 kann von einem Angreifer auf SSL v3 heruntergestuft werden – das ist allerdings kein Problem, da wir SSL v3 nicht unterstützen. Man kann auch überlegen TLSv1 aus der Konfiguration zu entfernen.

Bei EasyEngine kann dieser Punkt übersprungen werden, außer ihr möchtet TLSv1 entfernen!

Cipher Suites anpassen

Die Cipher Suites bestimmen, welche Algorithmen zum Aufbau eine SSL Verbindung verwendet werden sollen, mit der folgenden Änderung beschränken wir die Aushandlung zwischen Client und Server auf Cipher Suites welche Forward Secrecy unterstützen.

Mittels ssl_prefer_server_ciphers on stellen wir außerdem sicher, dass beim Verbindungsaufbau die Server Wünsche bzgl. Cipher Suite benutzt werden. Nnormalerweise werden die des Clients genutzt, aber das möchten wir verhindern.

Die Cipher Suites in EasyEngine sind bereits gut konfiguriert, wenn gewünscht, dann kann man diese noch weiter einschränken

Bei nicht EasyEngine Installationen bitte noch diese beiden Parameter einstellen bzw. überprüfen:

Wenn ihr ältere Clients unterstützen möchtet, dann könnt ihr, dem Mozilla SSL Konfigurator folgen und die folgenden Cipher Suites Verwenden (was auch der Default Einstellung bei Easy Engine entspricht!)

Diffie Hellman Schlüssel anpassen

Wir richten nun einen 4096bit langen Diffie Hellman Schlüssel ein, damit passen wir die Schlüssellänge so an, dass ein mindestens gleichlanger Schlüssel wie in den Zertifikaten verwendet wird – und gleichzeitig ersetzen wir den mitgelieferten Schlüssel durch unseren eigenen.

Man kann auch einen 2048bit langen Schlüssel erstellen, dann einfach 4096 durch 2048 ersetzen

Die Generierung dauert ziemlich lange – genug Zeit für einen Kaffee!

Diesen Schlüssel definieren wir dann in der globalen NGINX Konfigurationsdatei!
Hier fügen wir im SSL Settings Teil die folgende Zeile hinzu

HSTS – HTTP Strict Transport Security einstellen

Mittels HSTS teilt der Server dem Browser beim Verbindungsaufbau mit, dass er innerhalb einer angegebenen Zeit (max-age), nur noch verschlüsselt mit dem Server kommunizieren soll.

Daraufhin wird jede unverschlüsselte Verbindung, sowie jede Verbindung mit einem ungültigen Zertifikat abgebrochen. Dadurch lassen sich Man in the Middle Attacken vermeiden.

Der max-age Parameter gibt in Sekunden an, wie lange der Browser noch nur verschlüsselt kommunizieren soll.
Wir konfigurieren ein max-age von 6 Monaten.

Diese Einstellung nehmen wir per Domain vor, also bitte in der /var/www/domain.de/conf/nginx/ssl.conf eintragen!

Solltet ihr planen, die Webseiten wieder per HTTP auszuliefern, dann bitte einige Zeit vor dieser Umstellung das max-age auf 1 Sekunde einstellen, ansonsten kann ein wiederkehrender Besucher erst nach Ablauf der max-age wieder auf die Webseite zugreifen!

Abschluss und erneuter SSL Labs Test

Die Konfiguration ist nun fertig und wir starten NGINX neu. Danach besuchen wir die SSLABS Testseite um den Erfolg unserer Anpassungen zu überprüfen. Das Ergebnis sollte nun so aussehen:

SSL Labs Ende

Ihr solltet jetzt auch bei einem A+ Rating gelandet sein, wenn nicht, dann stimmt an eurer Konfiguration etwas nicht 🙂

Damit sind wir am Ende angelangt – Viel Erfolg bei euren Anpassungen!

WordPress Installation – NGINX – HHVM – HTTP/2 – Pagespeed – SSL mit Easy Engine

idee

Ihr möchtet eine hoch performante WordPress Installation für eure Webseite – mit Nutzung von neuesten Techniken und kostenfreiem SSL Zertifikat?

Ich zeige euch Heute, wie ihr diese Installation, mit Hilfe von Easy Engine , schnell und einfach durchführen könnt. Wir nutzen aktuelle Techniken für diese Webseite, wie NGINX, NGINX Pagespeed ModulHHVM und HTTP/2.

Alles was ihr benötigt ist ein Dedizierter oder vServer, am Besten einer, auf dem bisher noch nichts weiter installiert ist – ein How To zur Einrichtung eines solchen Servers findet ihr HIER.

Ihr benötigt als OS Ubuntu 12.04/14.04 oder Debian 7 oder 8! Wenn ihr HTTP/2 benutzen möchtet, dann könnt ihr kein Debian 7 nutzen!

Easy Engine?

Was handelt sich bei Easy Engine (ee) um ein python basiertes Kommandozeilen Tool um NGINX auf Debian und Ubuntu aufzusetzen und HTML, PHP, MySQL, HHVM, Pagespeed und WordPress zur Verfügung zu stellen. Desweiteren könnt ihr mit ee auch z.B. Postfix installieren – aber das lasse ich hier und jetzt mal weg.

Easy Engine bietet 15 verschiedene Möglichkeiten WordPress zu installieren, Single Site – Multisite mit Unterverzeichnis – Multisite mit Subdomain. Diese jeweils ohne Cache, mit WP Super Cache, W3 Total Cache, Nginx Cache oder Redis Cache.

Super Tool – super einfach, aber eine Warnung:

Wenn ihr euch mit dem Verwalten eines Linux Servers nicht auskennt, dann beauftragt lieber jemanden, der das kann, denn ihr selbst seid für die Sicherheit des Servers verantwortlich.

Easy Engine installieren

Ihr wählt euch mit eurem SSH Client (Putty oder ähnliches) auf euren Server ein und führt zur Installation von Easy Engine den folgenden Befehl aus:

Damit ladet ihr das Installationsskript herunter und startet dieses, in der Folge werden benötigte Pakete vom System Installer heruntergeladen und installiert.
Während der Paketinstallation müsst ihr noch euren Namen und eure e-Mail Adresse angeben – das war alles, Easy Engine ist nun installiert und lauffähig.

NGINX Mainline installieren

Da wir ja auch in den Genuß von HTTP/2 kommen möchten, müssen wir nun die Mainline Version von NGINX installieren, denn erst ab NGINX Version 1.9.5 wird HTTP/2 angeboten

Ihr erhaltet im Verlaufe der Installation einen Usernamen und ein Passwort – diese sind für das Webinterface der Easy Engine gedacht, bitte notieren!

WordPress installieren

Mit dem folgenden Befehl installiert ihr WordPress für domain.de (Kleiner Tip: domain.de durch euren Domainnamen ersetzen 🙂 )
Wir nutzen für die Seite HHVM, Pagespeed und Verschlüsselung

Bitte achtet darauf, dass eure Domain im DNS mit und ohne www auf die IP des Servers verweist, ansonsten erhaltet ihr einen Fehler!

Dieses Kommando übernimmt die komplette Arbeit der Installation von WordPress, dem Setup der Datenbank, der Einrichtung von HHVM und Pagespeed sowie die Beantragung und Einrichtung eines Zertifikates. Auch die Weiterleitungen von http nach https werden automatisch eingerichtet. Ihr müsst hier noch bestätigen, dass es sich bei HHVM und Pagespeed um experimentelle Features handelt und einige Plugins möglicherweise nicht arbeiten.

Im Verlauf der Installation erhaltet ihr den Usernamen und ein Passwort für die WordPress Installation – auch diese bitte notieren!

Bitte beachtet, dass die Installation von WordPress in Englisch erfolgt – ihr müsst dann noch unter den Einstellungen Allgemein auf Deutsch umstellen.

Funktionen nach installieren

Wenn ihr möchtet, dann könnt ihr mit Easy Engine auch Funktionen nachinstallieren.
Der folgende Befehl installiert z.B. W3 Total Cache nach

Pagespeed einrichten

Nach der Installation einer Seite müsst ihr noch die Pagespeed Konfiguration vornehmen, im Default sind keine Filter eingeschaltet!

HHVM von einer Domain entfernen

für den Fall, dass ihr auf Probleme mit HHVM stoßt, dann könnt ihr HHVM mit dem folgenden Befehl von einer Domain entfernen, diese Webseite läuft dann mit Standard PHP

Seiteninfo anzeigen lassen

Mit dem folgenden Kommando könnt ihr euch Informationen über eine Webseite anzeigen lassen, ihr müsst allerdings als root eingeloggt sein um dieses Kommando nutzen zu können

Die Ausgabe enthält Informationen zur Funktionen der Webseite sowie Angaben zur Datenbank

Easy Engine Info

Firewall einrichten

Ihr müsst noch ggf. folgende Ports in eurer Firewall freigeben

  • 22/TCP Inbound & Outbound: SSH
  • 80/TCP Inbound & Outbound: HTTP
  • 443/TCP Inbound & Outbound: HTTPS
  • 22222/TCP Inbound: EasyEngine Administrations Tools
  • 11371/TCP Outbound: GPK Schlüssel Server

Ihr solltet in jedem Fall auch nochmal einen Blick auf die Kommandozeilen Parameter Liste bei Easy Engine werfen – dort erhaltet ihr viele weitere Tips für dieses Tool. Bei Problemen gibt es auch einen Community Support auf der Seite.

Nun viel Spaß mit eurer schnellen, neuen WordPress Seite!

Vultr vServer mit Debian 8 installieren

idee

vServer erstellen

In diesem How To zeige ich euch, wie ihr einen vServer mit Debian 8 installieren könnt.
Ich installieren diesen Server beim Anbieter VULTR, hier könnt ihr ab 5 USD pro Monat ziemlich schnelle vServer erhalten. Alle vServer bei Vultr laufen auf SSD Speicher, die Installation kann an 14 verschiedenen Standorten rund um die Welt statt finden – und ihr habt viele vorgefertigte Betriebssysteme zur Auswahl.

Ich möchte anmerken, dass man einen vServer nur dann installieren und betreiben sollte, wenn man zumindest Grundlegend Ahnung von einem solchen System hat – ansonsten würde ich dazu raten, die Installation und Betreuung von vServern einem Fachmann zu übertragen. Immer daran denken, im Zweifel haftet man für den Mist! Ich setze daher in diesem How To diese Grundkenntnisse voraus und werde nicht jeden Punkt im Detail erklären!

Account anlegen

Zunächst müsst ihr bei Vultr Account anlegen, dazu könnt ihr gerne meinen Affiliate Link: Bei Vultr anmelden nutzen (vielen Dank dafür!) – oder ihr nutzt den folgenden nicht Affiliate Link: Vultr.com

Neuen vServer erstellen

Sobald ihr einen Account angelegt habt, loggt ihr euch ein und erstellt unter dem Menüpunkt Deploy einen neuen vServer, hierfür wählt ihr Compute Instances, eine Location, ein Operating System (Debian in diesem Fall) und eine Server Size – in diesem Fall die kleinste Maschine.

Vultr Setup

Die optionalen Features benötigen wir für diese Installation nicht.
Ihr könnt hier allerdings – was ich empfehlen möchte – einen SSH Key für den Server hinterlegen. Diesen könnt ihr in eurem Account unter My Servers anlegen und verwalten

Vultr SSH Key

Ihr könnt euch in den FAQ ansehen, wie ein solcher Schlüssel erstellt wird, ich werde jetzt hier nicht weiter auf diesen Punkt eingehen – solltet ihr aber in jedem Fall in Erwägung ziehen.

Jetzt müsst ihr dem Kind noch einen Namen geben, diesen tragt ihr bei Server Label ein – und dann klickt ihr auf Place Order und der Server wird installiert.

Vultr Setup

In der Übersicht unter My Servers seht ihr dann den Fortschritt eurer Bestellung

Vultr Setup

Nach Abschluss der Installation erhaltet ihr eine Mail mit der IP Adresse des installierten Servers und einer Zusammenfassung der Installation. Unter My Servers steht jetzt ebenfalls die IP Adresse, ihr könnt hier auch die Kosten für diesen Server für diesen Monat sehen – mit der Installation beginnt der Zeitraum der Bezahlung.

Vultr Setup

Außerdem könnt ihr den Server von hier aus Verwalten (Manage) – was ihr auch jetzt machen müsst, damit ihr an das Root Passwort kommt. Aus Sicherheitsgründen solltet ihr dieses dann ändern. Ihr habt hier auch weitere Angaben wir Verbrauchsdaten und könnt Snapshots erstellen.
Von hier aus könnt ihr euch auch eine Konsole anzeigen lassen, damit könntet ihr euren Server verwalten – ich empfehle aber, dieses per SSH Client (Putty oder ähnliches) zu machen.

Vultr Setup

Und genau das werden wir jetzt machen, notiert euch die IP Adresse sowie das Passwort des Servers, diese Angaben benötigen wir für den nächsten Schritt.

Server Setup mit SSH Client

Ihr benötigt jetzt einen SSH Client – Putty ist hierfür sehr gut geeignet, ich selbst verwende MobaXterm und es gibt noch viele weitere.

Wenn ihr Putty startet, dann gebt ihr im Feld Host Name (or IP address) die IP Adresse eures Servers ein und klickt dann auf Open, ihr werdet nun mit dem Server verbunden

Vultr Putty

Ihr erhaltet dann eine Warnmeldung, dass der Host Key nicht bekannt ist – was logisch erscheint, und daher von euch bestätigt wird. Ihr seid dann im Login, als Usernamen gebt ihr root ein, sowie das Passwort aus eurem Server Manager. Ihr seid nun als root auf dem Server eingeloggt und solltet im Fenster root@vultr: sehen können.

Server Name (Hostname)

Der Server sollte einen Namen haben – dieser sollte zu einer Domain gehören, welche sich in eurem Besitz befindet und die IP Adresse sollte im DNS für diese Domain zu diesem Namen eingetragen sein.
Nachdem ihr also in eurem DNS Server einen passenden A Record für den gewählten Servernamen eingetragen habt, werden wir diesen Namen auf dem Server eintragen, dazu editieren wir die Datei /etc/hostname

und ersetzen hier den Eintrag vultr.guest durch den gewünschten Namen.

Hier wird nur der Servername eingetragen – nicht die Domain!

Nun ändern wir noch die Datei /etc/hosts

und ersetzen auch hier den Eintrag vultr.guest mit dem Hostnamen, Dann fügen wir noch eine Zeit ein mit der IP Adresse und dem Hostname gefolgt vom Domainnamen.

Vultr Setup

System Update

Wir führen nun ein System Update durch, um auf den neues Stand zu kommen

Es müssen noch ein paar Einstellungen angepasst werden, z.B. die Region in der ihr euch befindet

Hier wählt ihr Europa und die Zeitzone für Berlin aus.

Ich würde euch auch raten die locale zu ändern – dieser Schritt ist optional!

Hier wählt ihr de_DE.UTF-8 aus und en_US.UTF-8 ab

Vultr Setup

auch als Default locale wählt ihr de_DE.UTF-8 aus.

Danach booten wir das System neu, damit wird dann auch der geänderte Hostname aktiv.

Bei dieser Installation sind noch keine Dienste wie Webserver oder MySQL Server eingerichtet. Ihr habt ’nur‘ das Grundsystem auf dem ihr aufbauen könnt.

Ihr solltet in jedem Fall noch die folgenden Schritte in Erwägung ziehen:

  • Root Passwort ändern
  • SSH Keys für Zugriff einrichten, den SSH Dienst so ändern, dass kein Zugriff ohne Schlüssel mehr möglich ist.
  • Lokale Firewall installieren – ich empfehle hier einen Blick auf CSF
  • Einrichten einer Benachrichtigung bei SSH Login
  • Apticron einrichten für automatische Systemupdates

Das sind so die Grundeinrichtungen mit denen ihr den Server absichert.

Viel Spaß nun mit eurem neuen Server!