nginx: SSL/TLS Hardening

Vor kurzem habe ich den Artikel Apache: Sichere SSL/TLS Settings geschrieben. Vor kurzem habe ich aber den Apache Webserver deinstalliert und verwende stattdessen nginx. Dieser Webserver hat bereits eine fast perfekte Einstellung in Bezug auf verschlüsselte Verbindungen. Ein bisschen kann man aber noch optimieren.

Kein SSL sondern nur TLS

Wie beim Apache 2 kann man auch nginx sagen, dass er kein SSL mehr akzeptieren soll. Anders als beim Apache kann man die zu verwendete TLS Version aber genauer spezifizieren. Für die maximalste Kompatibilität und trotzdem größtmögliche Sicherheit habe ich nur TLS erlaubt. Dazu habe ich in der Datei /etc/nginx/nginx.conf die Option ssl_protocols eingedampft:

http {
   [..]

   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

   [..]
}

Read More „nginx: SSL/TLS Hardening“

pfSense: IPv6 Delegation hinter Fritz!Box

Mein ISP ist die Deutsche Telekom. Dort bekomme ich für meinen VDSL 50 Vertrag eine dynamische IPv4 Adresse und ein dynamisches /56er IPv6 Prefix. An der TAE Dose hängt eine Fritz!Box, die für mich die Verbindung zum Internet managed jedoch sonst keinerlei Funktionen übernimmt. An dieser Fritz!Box hängt aber nicht sofort mein komplettes Heimnetzwerk.
Zwischen Fritz!Box und meinem LAN ist eine physische Patchung zu meinem Homeserver, auf der eine virtuelle pfSense Instanz läuft. Diese virtuelle Maschine hat zwei Interfaces: WAN und LAN abgebildet durch em0 und em1. Damit ich wirklich eine physische Trennung der Netze habe ist der WAN Port via PCI Passthrough an der virtuellen Maschine angedockt und entspricht sozusagen einem physischen Ethernet Port.

Der schematische Aufbau meines Netzwerkes:

heimnetzwerk

 

 

Das Problem: Ich würde gerne meine öffentlichen IPv6 Adressen in meinem LAN verwenden. Read More „pfSense: IPv6 Delegation hinter Fritz!Box“

Icinga 2: Notifications an Android Geräte schicken

Icinga 2 hat seine Benachrichtigungs-Logik so weit abstrahiert, dass diese über alle erdenklichen Wege transportiert werden können, zum Beispiel via E-Mail, SMS, Rauchzeichen oder Brieftaube. Bei den meisten Installationen ist Icinga 2 für den Versand via E-Mail konfiguriert.
Für mich war das aber keine Option, da ich ein erhöhtes E-Mail aufkommen habe und somit eine Nachricht vom Monitoring System eventuell nicht sofort gesehen wird. Deshalb wollte ich meine Nachrichten via Push-Notifications auf mein Android Handy.

Notify My Android

Ich benutze in anderen Setups von mir Notify My Android. Dieser Dienst hat eine öffentliche REST-API an die ich jede Art von Nachricht übergeben kann. Dieser Dienst übernimmt die Zustellung der Nachricht an mein Android Gerät. Auf diesem wird dann meine Nachricht in eine Push-Notification gewandelt.
Die Kommunikation ist nahezu in Echtzeit. Sollte mein Handy keine Verbindung zum Internet haben wird die Nachricht nicht verworfen, sondern gespeichert bis das Handy wieder ans Netz geht und danach zugestellt.

 

Man sollte bedenken, dass die Nachrichten nicht verschlüsselt sind. Lediglich die Verbindung zur API ist mit TLS abgesichert. Die Zustellung an das Android Gerät wird mit Hilfe von Google’s Cloud Messaging realisiert. Im Schlimmsten Fall liest also die NSA mit. Read More „Icinga 2: Notifications an Android Geräte schicken“

Fritz!Box Oberfläche durch eigenes Zertifikat absichern

Meine Fritz!Box strahlt zurzeit für die Wohnung unter mir ein WLAN Netzwerk aus. In diesem Netzwerk befindet sich eigentlich nur die WAN IP meiner Firewall. Hinter der Firewall beginnt erst mein gesichertes Netzwerk.
In der Wohnung unter mir wohnt für zwei Monate ein asiatisches Pärchen, die aktuell kein Internet haben. Deshalb haben sie mich gefragt, ob sie mein WLAN für die Zeit mitbenutzen dürfen. Da ich diese nicht in mein gesichertes Netzwerk lassen wollte, habe ich den Adressraum zwischen Fritz!Box und Firewall erweitert um Platz für die Untermieter zu schaffen.

Die Weboberfläche der Fritz!Box ist bei mir mit einem Passwort gesichert. Durch fehlende Verschlüsselung könnte aber jeder mit einfachsten Mitteln sich als Fritz!Box ausgeben und mein Passwort mitschneiden. Das wäre ungünstig, da ich dieses Passwort öfters verwende. Jaja, sollte man nicht machen, ist aber so.
Ich suchte also eine Möglichkeit meine Gegenstelle zu authentifizieren. Schön ist, dass die Fritz!Box den Einsatz eines eigenen SSL/TLS Zertifikats erlaubt.

Privater Schlüssel und das Zertifikat

Als erstes braucht man natürlich einen privaten RSA Schlüssel und ein passendes Zertifikat. Die Windows User müssen sich das Wissen selber ergoogeln. Die Linux-User haben es jetzt einfach, da sie einfach OpenSSL verwenden können:

:~$ openssl genrsa -out private.pem 2048
:~$ openssl req -new -key private.pem -out request.pem -sha256

Read More „Fritz!Box Oberfläche durch eigenes Zertifikat absichern“

nginx mit HHVM und PHP-FPM im Parallelbetrieb

 

Parallel zum Upgrade von Debian 7 auf Debian 8 habe ich meinen Apache Webserver durch nginx ausgetauscht. Der Grund: Ich hätte alle meine Konfigurationsdateien komplett neu entwickeln müssen (von Apache 2.2 auf Apache 2.4). Deshalb wollte ich den neuen Super-Webserver nginx ausprobieren.
Da ich schon Arbeiten an meiner Web-Struktur angefangen habe, wollte ich komplett aufräumen und meine PHP Umgebung sauber an nginx anbinden. Vorher hatte ich eine SuExec Umgebung mit FCGI-Wrapper-Script im Einsatz.

Letztens habe ich etwas über die Facebook Hip Hop Virtual Machine gelesen – ein PHP Ersatz mit besserer Performance. Da ich sowieso am neu aufsetzen der kompletten Logik war, wollte ich dieses Wunderding mal ausprobieren. Schnell stellte sich aber heraus, dass nicht alles mit der HHVM abbildbar ist, zum Beispiel die GnuPG Anbindung, die ich für meinen Proxychecker brauche. Also brauche ich ebenfalls eine native PHP Lösung. Und sowas strukturiert man am besten mit PHP-FPM.
Schön ist, dass beide Backends ein FastCGI Interface bieten und unabhängig voneinander installiert und betrieben werden können. Jeder nginx Server/(vHost) soll dann selbst entscheiden können, welches PHP Backend verwendet werden soll.

Das ganze soll so aussehen:

hhvm_php-fpm

Read More „nginx mit HHVM und PHP-FPM im Parallelbetrieb“

Eigene Zertifizierungsstelle (CA) mit Sub-Zertifizierungsstellen (Sub-CA’s)

Artikel zur Erstellung einer Zertifizierungsstelle mit nur einer Identität gibt es wie Sand am Meer. Die darin beschriebenen Methoden sind aber meistens sehr wage beschrieben oder verwenden veraltete Crypto.
Für die Arbeit habe ich eine neue PKI erstellen müssen. Im folgenden Artikel sind meine Erkenntnisse zusammengefasst.

Vorbereitung

Soll-Zustand

Als erstes sollte man sich Gedanken machen, wie die Struktur der Zertifizierungsstellen aussehen soll. Als Beispiel nehme ich in diesem Artikel die Example AG. Diese hat mehrere Abteilungen, zum Beispiel „Development“. Damit Unternehmensweit eine anständige Public-Key-Infrastruktur (PKI) verfügbar ist, soll eine unternehmensweite Zertifizierungsstelle (Root-CA) entstehen sowie eine Unter-Zertifizierungsstelle für jede Abteilung (Sub-CA).

Der Aufbau sieht also wie folgt aus:

ca_struktur

Warnung: Das ist kein Copy & Paste Tutorial! Bitte unbedingt mitdenken!

Bestandteile, die nicht behandelt werden

Einige Bestandteile covert dieser Artikel (noch) nicht:

  • Installation und Betrieb
    • des Servers, der die ganzen privaten Schlüssel hat
    • eines Verzeichnisdienstes
    • eines Validierungsdienst
  • Erstellung einer CRL mit passendem Eintrag in einer x509 Extension
  • Elliptic Curve anstelle von RSA

Read More „Eigene Zertifizierungsstelle (CA) mit Sub-Zertifizierungsstellen (Sub-CA’s)“