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 |
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 |
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 ( |
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.
[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.
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:
# 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.