Skip to main content
Skip table of contents

Stollen

Stunnel im Schulrouter Plus kann verwendet werden, um tcp-Verbindungen sicher mit TLS gegenseitiger Authentifizierung weiterzuleiten. Obwohl die Anwendung selbst die Authentifizierung auf Basis von Pre-Shared Keys unterstützt, unterstützt unser Plugin nur die zertifikatsbasierte Authentifizierung, die sicherer ist, aber mit mehr (Verbindungs-)Overhead verbunden ist (https://www.stunnel.org/perf.html).

Das obige Diagramm zeigt die grundlegende Funktionalität, wie sie von diesem Plugin bereitgestellt wird. Der Client-Teil (nicht von diesem Plugin geliefert) verbindet sich mit dem Server an einem vordefinierten Port und beginnt, lokal empfangene Pakete an das andere Ende des Tunnels weiterzuleiten.

Die Absicherung von http-Proxy-Verkehr ist einer der häufigsten Anwendungsfälle von stunnel.

Voraussetzungen

Bevor wir unseren neuen gesicherten Tunnel einrichten, müssen wir sicherstellen, dass wir eine Zertifizierungsstelle zusammen mit Zertifikaten zur Verfügung haben, die für beide Enden des Tunnels verwendet werden können.

Der einfachste Weg, eine CA zu erstellen, ist die Verwendung einer internen, selbstsignierten, die Sie unter System ‣ Sicherheit ‣ Aussteller vornehmen können. Wählen Sie als Methode „Create an internal Certificate Authority“ und geben Sie alle Details ein.

Wenn Sie eine CA zur Verfügung haben, können Sie ein Zertifikat für den Server (diesen Rechner) und den Client erstellen. Gehen Sie einfach auf System ‣ Sicherheit ‣ Zertifikate und erstellen Sie ein internes Zertifikat, wählen Sie den richtigen Typ (Server für dieses Ende des Tunnels) und wählen Sie die erstellte CA aus dem vorherigen Schritt. Der gemeinsame Name identifiziert beide Enden des Tunnels, Sie können hier einen voll qualifizierten Domänennamen für den Server und einen Benutzernamen für den Client wählen (zum Beispiel).

Das Beispiel-Setup geht davon aus, dass ein Proxy-Server bereits konfiguriert und funktionsfähig ist.

Das Plugin selbst kann über das Menü System ‣ Firmware ‣ Erweiterungen installiert werden (Suche nach stunnel).

Konfigurieren Sie den Server

Um einen neuen Tunnel hinzuzufügen, gehen Sie zu VPN ‣ Stunnel ‣ Konfiguration und klicken Sie auf das [+], um einen neuen Datensatz hinzuzufügen.

Hörende Adresse:

Die Adresse, an der gelauscht werden soll. Wir raten generell, hier eine Loopback-Schnittstelle zu verwenden und den Verkehr mit einem port forward an diese weiterzuleiten. Belassen Sie diese Vorgabe (127.0.0.1) für unser Beispiel.

Wenn Sie eine Nicht-Loopback-Schnittstelle wählen, stellen Sie sicher, dass Sie eine statische Schnittstelle verwenden.

Hörender Port:

Die Portnummer, auf der gelauscht werden soll (mit der sich der Stunnel-Client verbindet). Für unser Beispiel wählen wir hier 31280.

Ziel-Hostname:

Der Hostname oder die IP-Nummer des Dienstes, mit dem eine Verbindung hergestellt werden soll, in diesem Beispiel die interne IP-Adresse des Proxyservers.

Ziel-Port:

Port, den der Dienst verwendet, in diesem Fall wäre es 3128 (der standardmäßige Squid-Proxy-Port)

Zertifikat:

Dieses Serverzertifikat, wählen Sie das in den Voraussetzungen für den Server erstellte aus.

CA zur Validierung von Verbindungen zu:

Zertifizierungsstelle zu verwenden, akzeptiert dieser Tunnel nur Verbindungen, die ein von der gleichen CA ausgestelltes Zertifikat verwenden.

GRL aktivieren:

Aktivieren Sie Zertifikatssperrlisten, wenn ausgewählt, wird eine CRL mit dem Format XXXXXXXX.r0 im Verzeichnis (/var/run/stunnel/certs/) benötigt. Wenn Zertifikate von diesem Rechner aus verwaltet werden, werden alle angehängten CRLs automatisch generiert. Weitere Informationen zu dieser Option finden Sie unter CRLpath im Stunnels-Handbuch.

Wenn konfiguriert und keine gültige CRL vorhanden ist, werden alle Verbindungen verweigert. Ergänzungen erfordern möglicherweise einen Neustart von stunnel (wenn das Zertifikat bereits verwendet wurde).

Beschreibung:

Geben Sie hier eine benutzerfreundliche Beschreibung ein, um diesen Tunnel zu identifizieren, z. B. „Firmenproxy“.

Um Datenverkehr von Ihrer Schnittstelle wan an die Loopback-Adresse weiterzuleiten, gehen Sie zu Firewall ‣ NAT ‣ Portweiterleitung und fügen Sie eine neue Regel mit den folgenden Einstellungen hinzu: Schnittstelle WAN, Protokoll TCP, Ziel WAN address, Ziel-Portbereich 31280, Ziel-IP umleiten 127.0.0.1 und Ziel-Port umleiten 31280

Für zusätzliche Sicherheit können Sie den Modus chroot in VPN ‣ Stunnel ‣ Allgemein aktivieren, es gibt jedoch einen Nachteil bei der Verwendung dieser Funktion. Wenn aus irgendeinem Grund die Systemprotokollierungseinrichtung (syslog) neu gestartet wird, verliert stunnel die Verbindung zu dieser Einrichtung, was dazu führt, dass sie anschließend nicht mehr sichtbar ist.

Konfigurieren Sie den Client

Bevor Sie den Client konfigurieren, stellen Sie sicher, dass Sie stunnel für Ihre Plattform installieren, den öffentlichen Schlüssel Ihrer CA herunterladen und das Zertifikat für diesen Client erstellen.

PYTHON
[proxy]
client = yes
accept = 127.0.0.1:3128
connect = schule.address:31280
requireCert = yes
verifyChain = yes
cert = /path/to/client.pem
CAfile = /path/to/ca.pem

client.pem enthält sowohl den öffentlichen als auch den privaten Schlüsselteil des Zertifikats dieses Clients.

Test

Wenn die Tunnelverbindung hergestellt ist, sollten Sie mit den Proxy-Einstellungen Ihres Browsers eine Verbindung zu 127.0.0.1:3128 auf dem Verbindungsrechner herstellen können.

Identd freigeben

Unser stunnel-Plugin enthält einen zusätzlichen Dienst, der einen ident (RFC 1413) Protokolldienst bereitstellt. Dieser Dienst hängt von einem benutzerdefinierten Patch ab, den wir in stunnel ausliefern. Er stellt sicher, dass authentifizierte TLS-Sitzungen ordnungsgemäß protokolliert werden, damit unser ident-Dienst sie filtern kann, um einen Benutzer zu verfolgen, der zu einer stunnel-Sitzung gehört.

Wenn eine TLS-Sitzung authentifiziert wird, wird ein Protokolleintrag wie der unten stehende an das Syslog gesendet.

PYTHON
stunnel: LOG5[xxxxx]: IDENT Service [xx-xx-xx-xx-xx] from 127.0.0.2:11446 --> C=DE, ST=BE, L=Berlin, O=Schulrouter Plus, emailAddress=contact_at_domain, CN=test_client.schule.local

Unser Ident-Dienst interpretiert dies als 127.0.0.2 verbunden mit Quellport 11446 als test_client.schule.local (nur der CN-Teil wird zurückgegeben)

Da unser Einrückungsdienst sich an 0.0.0.0:113 bindet, ist er nicht kompatibel mit anderen ident-Diensten, die wahrscheinlich denselben Port verwenden. Daher ist es auch sehr ratsam, den Zugriff auf diesen Dienst von anderen Hosts als den Verbrauchern dieses Dienstes (was normalerweise die Firewall selbst ist) zu verweigern.

Diese Funktionalität kann leicht mit zwei Telnet-Sitzungen überprüft werden, wobei eine vom Stunnel-Client aus eine Sitzung offen hält und die andere sich mit ident mit demselben Host verbindet. Die obige Beispielprotokollzeile würde zu folgendem Anfrage/Antwort-Szenario führen:

PYTHON
# telnet 127.0.0.2 113
Trying 127.0.0.2...
Connected to schule.local.
Escape character is '^]'.
11446,3128
11446, 3128 : USERID : OTHER : test_client.schule.local
Connection closed by foreign host.

Bitte beachten Sie, dass der 127.0.0.2 -Host derselbe ist, auf dem der Dienst läuft, zu dem die Verbindung hergestellt wurde. Die Verwendung einer anderen Adresse, die an dieselbe Firewall angeschlossen ist, würde zu einem NO-USER -Fehler führen.

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.