secure.ping.de

Das für PING bei einer verbreiteten CA gekaufte Zertifikat dient zur Absicherung einiger zentraler Dienst.

secure.ping.de (83.97.42.25) als IPv4-Host existiert dabei als Alias-Interface auf lucy.ping.de.

Die abzusichernden Dienste laufen dabei Verteilt auf Lucy und Lilly und müssen über eine IP-Adresse ansprechbar sein. Hierfür „leitet“ Lucy entsprechende Anfragen, die an 83.97.42.25 ankommen an lokal auf Lucy laufende Dienste oder an Lilly weiter.

Aufgrund der alten OpenSSL-Version auf Lilly, die sich auch nicht ohne großen Aufwand aktualisieren lässt, übernimmt Lucy dabei die Verschlüsslung der Daten. Hierdurch ist die Kommunikation der auf Lilly laufenden Dienste zwischen Lucy und Lilly unverschlüsselt. Deswegen ist es dringend erforderlich, dass die unverschlüsselten Daten nicht von Dritten mitgelesen werden können. Dies wird dadurch ermöglicht, dass Lucy und Lilly über eine private Ethernet-Verbindung kommunizieren. Dabei ist auf dem Host-System PING09, auf den beide VMs ausgeführt werden, eine private Bridge mit dem Namen lillysslnetz angelegt.

Die Verschlüsselung wird auf Lucy durch den SSL-Proxy stunnel durchgeführt. Stunnel (Debian-Paket stunnel4 nutzt dabei die OpenSSL-Version des Systems und erhält damit alle Sicherheitsupdates. Des Weiteren wird unter Debian Jessie auch Perfect Forward Secrecy (PFS) unterstützt, wodurch Verbindungen mit Client-Programme, die PFS unterstützen, noch sicherer werden.

Stunnel nimmt die Verschlüsselten Verbindungen an und baut von sich aus wieder eine unverschlüsselte Verbindung zu Lilly auf. Dabei verwendet Stunnel den Transparent proxy support (auch tproxy) Mechanismus des Linux-Kernels. Hierdurch sehen die auf Lilly eingehenden Verbindungen so aus, als würden sie vom ursprünglichen Client aus aufgebaut. Die ermöglicht es, dass die Logfiles auf Lilly auf den Client schließen lassen. Auch Funktionalität, wie SMTP-After-POP ist so möglich. Die Antwortpakete von Lilly müssen aber auf den Rückweg wieder Lucy passieren, sodass Lucy die Daten wieder verschlüsseln kann. Hierfür wird auf Lilly eine Policy-Route eingesetzt, die Pakete, die als Absender die IP-Adresse 83.97.47.186 tragen über die lillysslnetz-Bridge wieder an Lucy als Gateway zu schicken.

Des Weiteren müssen auf Lilly alle Dienste, die über secure.ping.de erreicht werden sollen, ohne Verschlüsselung erreichbar sein. Grund hierfür ist die fehlende Option des Stunnels in beide Richtungen zu verschlüsseln.

Stunnel

Stunnel wird auf Lucy durch die Konfigurationsdatei /etc/stunnel/lilly.conf für die Dienste auf Lilly konfiguriert. Dabei besteht die Konfigurationsdatei aus einem allgemeinen Bereich mit Parametern für's Logging, SSL-Schlüssel und -Zertifikate und Optionen für die OpenSSL-Bibliothek, die für alle Dienste gleichermaßen genutzt werden. Hierbei sind die Einträge für options und ciphers die wichtigsten.

options = SINGLE_ECDH_USE
options = SINGLE_DH_USE
options = CIPHER_SERVER_PREFERENCE

ciphers = HIGH+kEECDH:HIGH+kEDH:HIGH:!PSK:!SRP:!DES:!3DES:!aNULL:!RC4:!CAMELLIA

Die Option CIPHER_SERVER_PREFERENCE weißt dabei OpenSSL an beim Aushandeln der verwendeten Verschlüsselungsalgorithmen auf die eigene Reihenfolge zu bestehen. Dies ist deswegen wichtig, da einige Clients zwar PFS (hier insbesondere HIGH+kEECDH und HIGH+kEDH) unterstützen, aber in der eigenen Sortierung diese nicht bevorzugen würden. Als ciphers wird eine Folge von Verschlüsselungsalgorithmen aufgeführt, die auch in dieser Reihenfolge ausgehandelt wird. Dabei werden schon einige Ciphers von OpenSSL gar nicht mehr angeboten, andere, wie 3DES und RC4 werden hier deaktiviert, um, nach aktuellem Stand, nur sichere Verschlüsselung anzubieten.

Nach dem allgemeinen Bereich folgen die Dienste im Format von DOS-INI-Datei-Blöcken. Die Form ist dabei für jeden Dienst gleich und die einzelnen Dienste unterscheiden sich dabei nur durch die Ports.

[pop3s]
accept  = 995
connect = 83.97.47.186:110
transparent = source

Am Beispiel des pop3s-Dienstes ist zu erkennen, dass mit der Option accept der Port auf Lucy angegeben wird, an dem Stunnel auf neue Verbindungen lauscht. Dabei kann auch optional eine durch einen Doppelpunkt getrennte IP angegeben werden, an die dann gebunden wird. Da auf Lucy auf den entsprechenden Ports keine Dienste lauschen, kann hier allerdings durch das Weglassen einer IP ein spezifisches Binden ausbleiben. Die Option connect gibt an, wohin sich Stunnel verbinden soll. Dabei sind diese Verbindungen nicht verschlüsselt. Dies ist auch der Grund, warum für die Dienste uucps, pop3s und imaps die unverschlüsselten Ports auf Lilly genutzt werden. Beim Dienst https wird ein auf Lilly unverschlüsselter Port 443 genutzt, da der Apache auf Lilly differenzieren können muss, ob eine Verbindung, wo auch immer, verschlüsselt wird oder unverschlüsselt zum Client geht. Die Option transparent = source aktiviert eine Funktion in Stunnel, wodurch die ausgehenden Verbindungen zu Lilly die IP-Adresse des Clients als Quelle behalten.

Bridge lillysslnetz auf DOM0

Auf der DOM0, auf der Lucy und Lilly ausgeführt werden, muss ein Bridge-Interface angelegt werden. Dies geschieht über die Konfigurationsdatei /etc/network/interfaces wie folgt:

auto lillysslnetz
iface lillysslnetz inet manual
        bridge_ports none
        bridge_stp off
        bridge_fd 0

/!\ : Nach dem anlegen hinzufügen mit ifup lillysslnetz auch hochfahren.

Policy-Route auf Lilly

Auf lilly.ping.de werden im Normalfall Pakete in Richtung Internet über das Interface eth0 an das Default-Gateway 83.97.42.1 gesendet.

Im Fall von Paketen, die zu einer über secure.ping.de laufenden Verbindung gehören, müssen diese allerdings wieder den Weg zurück über die lillysslnetz-Bridge, die über das Interface eth2 auf Lilly erreichbar ist, nehmen. Dies wird über eine Policy-Route erreicht, die auf Lilly beim starten über die Datei /etc/rc.local eingerichtet wird.

Die relevanten Zeilen sind dabei:

# lilly-ssl ueber eth2 rules

/sbin/ip rule add from 83.97.47.186 table 43

/sbin/ip route add default via 83.97.47.185 dev eth2 table 43

Dabei wird über ip rule [...] die alternative Routingtabelle 43 für alle Pakete, die als Src-Adresse die 83.97.47.186 tragen, ausgewählt. In der ip route [...] wird anschließend eine Route in diese Tabelle eingetragen, die als Gateway mit 83.97.47.185 Lucys IP im lillysslnetz trägt.

Dienste auf Lilly

http(s)

Der für HTTP zuständige Apache auf Lilly unterscheidet zwischen Verbindungen über HTTP und HTTPS. Der Vebindungstyp wird dabei auch von einigen CGIs ausgewertet.

In /etc/httpd/conf/httpd.conf wird HTTPS dabei als VirtualHost implementiert. Für das Stunnel-Setup wird daher der vorhandene Virtualhost <VirtualHost _default_:443> kopiert und die Verschlüsselungsoptionen deaktiviert. Anschließend sind im neuen Virtualhost folgende Zeile zu ergänzen:

# Add https for CGIs; Apache does not know the connection was once encrypted
SetEnv HTTPS on

uucp(s)

Die ursprünglichen UUCP- und UUCPS-Dienste unterscheiden sich ausschließlich in der Verschlüsselung, sodass Stunnel einfach den unverschlüsselten Dienst connected.

pop3(s)

Die ursprünglichen POP3- und POP3S-Dienste unterscheiden sich ausschließlich in der Verschlüsselung, sodass Stunnel einfach den unverschlüsselten Dienst connected.

imap(s)

Bei IMAP unterscheiden sich die verschlüsselte und unverschlüsselte Variante darin, dass die unverschlüsselte Variante Starttls unterstützt aber plain auth verbietet. Da z.B. webmail2.ping.de mit plain auth auf IMAPS zugreift, kann Stunnel nicht einfach auf den unverschlüsselten Dienst zugreifen. Aus diesem Grund wird eine spezielle Version des unverschlüsselten IMAP-Dienstes auf die IP 83.97.47.186 gebunden, die über eine eigene Konfigurationsdatei /etc/opt/bincimap/bincimap-fakessl.conf konfiguriert wird. Hier wird Starttls deaktiviert und plain auth erlaubt.

Systeme/secure.ping.de (zuletzt geändert am 2016-12-21 14:22:10 durch DanielHess)