Mozilla SSL Server Konfigurator - Die richtigen TLS/SSL Einstellungen für Apache, Nginx oder HAProxy automatisch generieren

Die letzten Wochen ging es teilweise um die Analyse von SSL Verbindungen, heute soll es mal wieder um die dazugehörigen Einstellungen gehen.
Ich hatte in der Vergangenheit zwar schon Artikel zu SSL Einstellungen für Nginx, Apache oder Postfix geschrieben. Dennoch will ich mal auf den Mozilla SSL Konfigurations Generator hinweisen.
Das Webtool bietet zusammen mit dem ausführlichen Wiki Artikel über Server Side TLS Security  genau die richtige Kombination, um Webserver mit SSL zu konfigurieren.

mozilla-wiki
SSL Einstellungen per Klick erzeugen

Der webbasierte Mozilla SSL Konfigurator unterstützt neben den am weitesten verbreiteten Servern Apache und Nginx auch HA Proxy. 
Ich persönlich vermisse eine Option für Postfix, da es sich dabei aber um keinen reinen Webserver handelt, ist das auch nachvollziehbar.

Das Tool stellt neben verschiedenen Server und SSL Varianten drei Auswahlmöglichkeiten in puncto Sicherheit zur Verfügung (modern, intermediate und old).
Praktischerweise wird bei jedem Modus auch die Unterstützung für Browser oder Systeme eingeblendet. So weiß jeder Anwender direkt, ob die enthaltenen CypherSuites für das eigene Projekt nützlich sind oder nicht.
Welche SSLCipherSuites genau in der jeweiligen Einstellung verwendet werden, lässt sich in dem oben erwähnten Mozilla Wiki Artikel nachlesen.

ssl-config-generator

Leider müssen einzelne Server Versionen von Hand eingegeben werden, der Konfigurator erkennt diese aber ohne Probleme. 
Wie Stichproben gezeigt haben, nimmt das Tool OCSP Stapling automatisch aus der Config, wenn ein Wechsel von Apache 2.4 zu 2.2 erfolgt. (Diese Funktion wird erst seit 2.3 unterstützt).

Wie der Name des Tools vermuten lässt, wird nur eine Konfiguration generiert, diese muss in die geweilige ".conf" Datei auf einem Server kopiert werden.

Fazit

Nicht nur Administratoren finden mit dem Tool eine praktische Hilfe, wenn es um die Konfiguration von TLS auf einem Server geht. 
Auch der Heimanwender, kann sich mit Hilfe des dazugehörigen Wiki Artikel das nötige Wissen zu TLS/SSL aneignen und mit dem SSL Konfigurator schnell und einfach umsetzen. 

Aktuellen Rhythmbox Player auf Ubuntu Desktop installieren und Zugriff auf eine Synology Diskstation einrichten

Rhythmbox auf Ubuntu installieren und Zugriff auf Synology Diskstation einrichten

Ein bekannter Medienplayer auf Ubuntu Desktop Installationen ist Rhythmbox. Neben dem VLC Player gehört er auch bei mir zu den meistgenutzten Playern.
Da in vielen Haushalten inzwischen ein NAS (Network Attached Storage) für die zentrale Verwaltung von Medien im Betrieb ist, will ich kurz zeigen wie sich der Zugriff darauf mit Rhythmbox verwirklichen lässt.
Ausgangslage ist ein Ubuntu Desktop 14.04 und eine Synology Diskstation mit aktiviertem DLNA

Installation des aktuellen Rhythmbox Players

Ubuntu bringt eine Version des Players mit, es kann aber nicht schaden eine aktuelle Version zu installieren.


sudo add-apt-repository ppa:fossfreedom/rhythmbox
sudo apt-get update
sudo apt-get install rhythmbox

Installation des Rhythmbox Plugins

Der Player unterstützt eine Reihe von Plugins, welche die Bedienung und das Verhalten verbessern. Für das Streaming werden diese nicht zwingend benötigt, aber ein Tray Icon oder ein Equalizer kann nie schaden

sudo add-apt-repository ppa:fossfreedom/rhythmbox-plugins
sudo apt-get update
sudo apt-get install rhythmbox-plugin-complete

rhythmbox-plugin

Installation von Grilo zur Unterstützung von UPnP/DLNA Streaming

Für die DLNA Unterstützung habe ich mich für Grilo entschieden. Das Open Source Framework unterstützt neben UPnP/DLNA diverse Video Dienste. Darüber hinaus lässt es sich Dank PPA einfach als Plugin in Rhythmbox integrieren.

sudo add-apt-repository ppa:grilo-team/ppa
sudo apt-get update
sudo apt-get install grilo-plugins-0.2

Aktivierung des Grilo Plugins in der Rhythmbox

Als letzter Schritt muss lediglich das Plugin im Player aktiviert werden. Danach sollten die Synology Diskstation und andere unterstützte Geräte in der Menüleiste auftauchen. Voraussetzung dafür ist, dass die Geräte sich im selben Netz befinden und konfiguriert sind.

Gespielte Songs auf Twitter teilen

Als kleine Dreingabe habe ich ein Plugin auftreiben können, welches die gespielten Songs auf Twitter teilt. Also nicht das MP3, nur den Interpret und den Song wink Falls jemand der Welt seine Musiksammlung mitteilen möchte, der klicke hier.

Calomel SSL Validation - SSL Verbindungen per Firefox Addon überprüfen

Vor ein paar Tagen hatte ich das Python Script SSLyze vorgestellt, mit welchem es möglich ist SSL Einstellungen von Servern zu testen. In eine leicht andere Richtung schlägt das Firefox Add-on Calomel SSL Validation.

Calomel SSL Validation - Die Sicherheitsampel für den Browser

Das Add-on überprüft die Sicherheit der SSL Verbindung zwischen Browser und Webseite. Je nach Sicherheitsstufe wird eine Ampel neben der Adressleiste grün, blau, gelb oder rot dargestellt. 

Dies hat den Vorteil, das der Anwender schnell erkennen kann, ob beispielsweise eine Verbindung zu einer Bankenwebseite mangelhafte Sicherheit stellt.

Als Beispiel eine nicht ganz so sichere Verbindung

calomel

Die Sicherheit erreicht laut Addon nur einen Anteil von 33%, was unter anderem auf ein nicht aktiviertes Perfect Forward Secrecy zurückzuführen ist. Diese Einstellung würde das nachträgliche Entschlüsseln verhindern, ist also durchaus relevant. Aber auch auf die verwendete TLS Version, die mit TLS 1.0 nicht die aktuellste, aber auch nicht zu den veralteten und sehr unsicheren wie SSL 2/3 zählt, wird bemängelt.

Ein großer Punkteabzug wir ebenfalls durch die Verwendung von RSA verbucht. Laut FAQ würde Calomel hier ECDHE, DHE oder ECDH besser passen, denn mit Diffie Hellmann und Eliptischen Kurven wäre Schnelligkeit und  PFS gewährleistet.

Als Gegenansicht nun ein positives Beispiel

calomel

Hier wird zwischen Server und Client eine sichere Verbindung mit ECDHE zum Schlüsselaustausch hergestellt, das aktivierte PFD sammelt zusätzlich Punkte, was zu einer grünen Ampel und 100% Sicherheit führt. 100% Sicherheit ist hier wohl etwas schlecht formuliert, maximal mögliche Sicherheit würde wohl besser passen.

Fazit

Das Tool informiert sehr gut über eine bestehende SSL Verbindung zu einem Server und stellt dank der Farbunterscheidung auch für Laien gut erkennbar die gegebene Sicherheit dar. Gleiches gilt für die Punktewertung, die auch ohne tiefere Kenntnis Aussagen zur Sicherheit darstellt.

Dennoch sollte bedacht werden, dass die Verbindung zwischen Server und Browser nicht wirklich etwas über die Sicherheit des Servers selbst aussagt, sondern nur über die Verbindung ansich.

Eine blaue Ampel heißt nicht, dass der Server selbst schlecht konfiguriert ist, es kann sich genauso um einen alten Server handeln, der neue Techniken noch nicht unterstützt und dennoch für seine Verhältnisse die maximale Sicherheitseinstellungen aufweist.

Als Ergänzung zu anderen Tools, welche SSL Verbindungen oder Einstellungen unter die Lupe nehmen, ist Calomel SSL Validation eine willkommene Erweiterung.

Calomel

PostgreSQL 9.4 Server auf Ubuntu installieren und mit der neuen SQL Funktion ALTER SYSTEM konfigurieren

Heute wird ein kleiner Ausflug in die Datenbank Welt gemacht.
Grund dafür ist die neue Version der Open Source Datenbank PostgreSQL Version 9.4., welche Ende 2014 veröffentlicht wurde.
Neben zahlreichen Verbesserungen bietet diese mit "ALTER SYSTEM" die Möglichkeit die Systemkonfiguration direkt aus der SQL Konsole vorzunehmen.
Mit dieser Neuerung lassen sich alle Systemeinstellungen der postgresql.conf mit Hilfe einer postgresql.conf.auto überschreiben.
Die postgresql.auto.conf wird beim Start als letztes geladen und enthält die mit "ALTER SYSTEM" gesetzten Werte.

Zunächst ist aber etwas Vorarbeit notwendig.
Referenzsystem ist wie immer Ubuntu Server 14.04

postgresql


Installieren des PostgreSQL Servers 9.4

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql

Einloggen in die PostgreSQL Konsole

Zunächst sollte das Passwort geändert werden

sudo -u postgres psql postgres
postgres=#
             \password
                        Enter new password:
                        Enter it again:
            \q

Erfolgt ein Login nicht direkt auf dem Localhost, sind weitere Konfiguration notwendig

Die Konfiguration der Zugriffsrechte erfolgen unter "/etc/postgresql/9.4/main/pg_hba.conf"

Verbindungsinformationen anzeigen

postgres=# \conninfo
You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".

Anlegen eines neuen Benutzers mit Superuser Rechten

Dieser Schritt dient der Übersicht, für die Verwendung des SYSTEM ALTER Befehls kann auch der Standardbenutzer "postgres" verwendet werden.
Superuser Rechte sind aber zwingend notwendig.

sudo -u postgres createuser -s -D -P yolo

Erklärung der Befehle

  • -D, --no-createdb         role cannot create databases (default)
  • -P, --pwprompt            assign a password to new role
  • -s, --superuser              role will be superuser

Alternativ kann ein Benutzer auch interaktiv angelegt werden

sudo -u postgres createuser --interactive yolo2

Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n

Datenbank in PostgreSQL anlegen

Auch dieser Schritt dient nur der Übersicht. Für die Systemkonfiguration muss dies vorgenommen werden.

sudo -u postgres createdb -O yolo datenbank

Erklärung des Befehls

  • -O, --owner=OWNER            database user to own the new database

Eingerichtete Benutzer und Rechte anzeigen

postgres=# \du

List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication | {}
 yolo      | Superuser                                      | {}


   


PostgreSQL mit ALTER SYSTEM konfigurieren

Nach ein paar Grundlagen nun der Schritt zur Konfiuration via ALTER SYSTEM
Im Folgenden möchte ich ein paar Werte setzen, die bei einer Grundinstallation gerne anfallen.
Als Grundlage habe ich pgTune genommen (siehe Artikel)

Folgende Werte sollen mit SQL Kommandos angepasst werden

max_connections = 200
shared_buffers = 512MB
effective_cache_size = 1536MB
work_mem = 2621kB
maintenance_work_mem = 128MB
checkpoint_segments = 64
checkpoint_completion_target = 0.9
wal_buffers = 16MB


Zunächst muss ein Login erfolgen, danach können Befehle mit der Kombination ALTER SYSTEM SET abgesetzt werden.

sudo -u postgres psql postgres

postgres=# ALTER SYSTEM SET max_connections TO 200;
postgres=# ALTER SYSTEM SET shared_buffers TO 512;
postgres=# ALTER SYSTEM SET effective_cache_size = '1536MB';
postgres=# ALTER SYSTEM SET work_mem = '2621kB';
postgres=# ALTER SYSTEM SET checkpoint_segments TO 64;
postgres=# ALTER SYSTEM SET wal_buffers ='16MB';
postgres=# ALTER SYSTEM SET checkpoint_completion_target TO 0.9;
postgres=# ALTER SYSTEM SET wal_buffers = '16MB';

Neuladen der Konfiguration

Wichtig: Die Änderungen werden erst wirksam, sobald die Konfiguration neu eingelesen wurde.

Die Konfiguration lässt sich mit dem folgenden Kommando neu einlesen, ohne das ein Datenbankverbindung verloren geht.

postgres=# SELECT pg_reload_conf();

Hier ist zu bedenken das manche Einstellungen, wie z.B. "max_connections" einen richtigen Server Neustart benötigen, bevor sie greifen

sudo service postgres restart

Kontrolle der vorhanden Werte

Gesetzte Konfigurationen lassen sich ebenfalls schnell und einfach per SQL Kommando auslesen. Der Aufruf vor und nach einer Änderung bietet sich an.

postgres=# SHOW shared_buffers;
 shared_buffers
----------------
 400MB
(1 row)

Einzelne Systemwerte auf Standard zurücksetzen

postgres=# SHOW checkpoint_completion_target;
 checkpoint_completion_target
------------------------------
 0.9
(1 row)

postgres=# ALTER SYSTEM SET checkpoint_completion_target TO DEFAULT;
ALTER SYSTEM

postgres=# SELECT pg_reload_conf();
 pg_reload_conf
----------------
 t
(1 row)

postgres=# SHOW checkpoint_completion_target;
 checkpoint_completion_target
------------------------------
 0.5
(1 row)

Alle Werte der postgresql.auto.conf zurücksetzen

postgres=# ALTER SYSTEM RESET ALL;

Wie bereits oben erwähnt, werden die gesetzten Konfigurationen in eine postgresql.auto.conf geschrieben.
Diese befindet sich nicht im Verzeichnis der postgresql.conf sondern unter

nano /var/lib/postgresql/9.4/main/postgresql.auto.conf

    # Do not edit this file manually!
    # It will be overwritten by ALTER SYSTEM command.
    wal_level = 'hot_standby'
    shared_buffers = '512'
    max_connections = '200'
    effective_cache_size = '1536MB'
    work_mem = '2621kB'
    checkpoint_segments = '64'
    wal_buffers = '16MB'


Troubleshooting

Im Log taucht folgende Meldung auf:

LOG:  parameter "wal_buffers" cannot be changed without restarting the server
LOG:  configuration file "/var/lib/postgresql/9.4/main/postgresql.auto.conf" contains errors; unaffected changes were applied

Wie die Fehlermeldung selbst erklärt, ist ein Neustart des Servers mit "sudo service postgresql restart" notwendig.

Fazit

Die neue Möglichkeit in 9.4 ein System im laufenden Betrieb zu konfigurieren, ist wirklich praktisch, besonders für diejenigen die eine SQL Konsole ihre Heimat nennen. Dennoch ist Vorsicht geboten, denn auf den ersten Blick ist nicht ersichtlich, ob eine postgresql.auto.conf geladen wird und Konfigurationen in der postgresql.conf nicht beachtet werden.