OpenVPN-Portfreigabe mit Apache / SSL


8

Ich versuche, OpenVPN so einzurichten, dass es Port 443 überwacht und dann den gesamten HTTPS-Verkehr mithilfe der port-shareOption an Apache weiterleitet. Relevante Konfigurations-Snippets sind:

OpenVPN

local ${PUBLIC_IP}
port 443
port-share localhost 443

Apache mit SSL

Listen localhost:443

Mein OpenVPN-Client stellt eine gute Verbindung her, aber beim Öffnen der HTTPS-fähigen Seite werden Fehler angezeigt. Firefox sagt:

SSL hat einen Datensatz erhalten, der die maximal zulässige Länge überschritten hat.

(Fehlercode: ssl_error_rx_record_too_long)

Sagt Curl

Curl: (35) Fehler: 140770FC: SSL-Routinen: SSL23_GET_SERVER_HELLO: Unbekanntes Protokoll

Die Anfrage endet bei Apache, da ich in den Fehlerprotokollen die folgenden Meldungen sehe:

[Wed Oct 06 01:10:20 2010] [error] [client 127.0.0.1] Invalid method in request \x16\x03\x01
[Wed Oct 06 01:11:04 2010] [error] [client 127.0.0.1] Invalid method in request \x16\x03\x01
[Wed Oct 06 01:11:51 2010] [error] [client 127.0.0.1] Invalid method in request \x16\x03\x01

Der Nachrichteneintrag für eine HTTPS-Verbindung lautet

Oct  6 01:13:21 ns1 openvpn[20154]: Re-using SSL/TLS context
Oct  6 01:13:21 ns1 openvpn[20154]: LZO compression initialized
Oct  6 01:13:21 ns1 openvpn[20154]: Control Channel MTU parms [ L:1544 D:140 EF:40 EB:0 ET:0 EL:0 ]
Oct  6 01:13:21 ns1 openvpn[20154]: Data Channel MTU parms [ L:1544 D:1450 EF:44 EB:135 ET:0 EL:0 AF:3/1 ]
Oct  6 01:13:21 ns1 openvpn[20154]: Local Options hash (VER=V4): 'c0103fa8'
Oct  6 01:13:21 ns1 openvpn[20154]: Expected Remote Options hash (VER=V4): '69109d17'
Oct  6 01:13:21 ns1 openvpn[20154]: TCP connection established with ${CLIENT_IP}:56203
Oct  6 01:13:21 ns1 openvpn[20154]: TCPv4_SERVER link local: [undef]
Oct  6 01:13:21 ns1 openvpn[20154]: TCPv4_SERVER link remote: ${CLIENT_IP}:56203
Oct  6 01:13:21 ns1 openvpn[20154]: ${CLIENT_IP}:56203 Non-OpenVPN client protocol detected
Oct  6 01:13:21 ns1 openvpn[20154]: TCP/UDP: Closing socket

Verwenden von httpd-2.2.3-43.el5.centos und openvpn-2.1.1-2.el5.

Was muss ich tun, damit die Portfreigabe funktioniert?


Update : Verwenden

port 443
port-share localhost 10443

und

Listen localhost:10443

macht keinen Unterschied.


Update 2 : Einige Befehlsausgaben

[root@ns1 ~]# openvpn --help | grep port-share
--port-share host port : When run in TCP mode, proxy incoming HTTPS sessions
[root@ns1 ~]# netstat -nltp | grep 443
tcp        0      0 127.0.0.1:10443             0.0.0.0:*                   LISTEN      20088/httpd         
tcp        0      0 ${PUBLIC_IP}:443             0.0.0.0:*                   LISTEN      20066/openvpn       

Antworten:


8

Die port-shareOption setzt den Port auf den anderen Anwendung überwacht.

Was Sie tun möchten, ist zu konfigurieren

Port-Share 10443

und stellen Sie Apache so ein, dass Port 10443 abgehört wird:

Hören Sie <Ihr-Publikum-IP>: 10443

Dies liegt daran, dass zwei Anwendungen nicht denselben Port gleichzeitig öffnen können.


Danke für deine Antwort. OpenVPN bindet an die öffentliche Adresse, während Apache an localhost bindet. Ich werde den Apache-Port ändern, wenn ich die Möglichkeit dazu habe, aber zwei Anwendungen können an denselben Port binden, da sie unterschiedliche Adressen verwenden.
Robert Munteanu

Ja, stimmt, aber es ist wahrscheinlich, dass openVPN auf dieselbe IP umleitet, nicht auf localhost (das wäre vernünftig)
Hubert Kario,

Ich wollte eigentlich sagen port-share localhost 443. Ich habe es versucht port-share localhost 10443, aber es hat immer noch nicht funktioniert, der gleiche Fehler.
Robert Munteanu

ah, sorry, ich habe eins gesagt und config für das andere gezeigt. Ich würde vermuten, dass Apache dieselbe IP-Adresse abhören muss, die openvpn abhört, dh öffentlich, nicht localhost. Meine Antwort wurde aktualisiert.
Hubert Kario

Sind Sie sicher, dass Ihre Version von openvpn diese Option unterstützt? (versuchen Sie es mit openvpn --help | grep port-share). Und sind Sie sicher, dass Apache den konfigurierten Port überwacht und SSL funktioniert?
Hubert Kario

2

Als ich eine Antwort fand, die zu meinem Server passt, fand ich alle, die über die portshareFunktion der OpenVPN-Konfiguration sprachen . In meinem Fall muss ich jedoch die tatsächliche Client-IP-Adresse für die Protokollierung und andere Funktionen kennen. Ich habe festgestellt, dass bei Verwendung portsharedie lokale IP des Servers protokolliert wird.

Um dies zu beheben,

  1. Hinzufügen portshare [port] Funktion in OpenVPN
  2. Stellen Sie den Apache-Server so ein, dass er abgehört wird [port]
  3. Installieren Sie die ProxyProtocol- Erweiterung ( gemäß den Anweisungen in der Repo-Readme- Datei ), verfügbar unter: https://github.com/roadrunner2/mod-proxy-protocol
  4. Fügen Sie die Zeile ProxyProtocol Onin der Apache-Konfiguration hinzu.

Es sollte funktionieren und dem oben genannten Zweck dienen. Habe das gerade gepostet und hoffe, es kann jemandem helfen, der etwas tun möchte, wie ich es getan habe.


1

Mit der Port-Share-Option von OpenVPN können Sie Datenverkehr auf eine andere HTTPS-Site und nicht auf einen normalen Webserver umleiten. der Fehler, den Sie sehen

[error] [client 127.0.0.1] Invalid method in request \x16\x03\x01

tritt auf, wenn eine SSL-Anforderung an eine Nicht-0SSL-Site gesendet wird. Ich kann den Fehler mit reproduzieren

  port-share localhost 80

(anstelle von 443) Wenn Sie Ihre HTTPS-Site korrekt eingerichtet haben, funktioniert die Portfreigabe.

HTH,

JJK


0

Update: Ich habe festgestellt, dass sich die IP-Adresse der Website-Besucher immer 127.0.0.1in Webserver-Protokollen befindet. Dies ist ein Problem, wenn Sie den Ursprung einer Verbindung kennen oder ein Tool wie verwenden möchten fail2ban. Es sieht so aus, als ob es keine Möglichkeit gibt, die echte IP-Adresse des Besuchers in Apache-Protokollen zu haben, wenn wir OpenVPNs verwenden port-share( https://forums.openvpn.net/viewtopic.php?t=22599 ), also habe ich das Tool SSLH verwendet im transparenten Modus: /unix/373717/how-does-sslhs-transparent-mode-work/532333#532333

Ursprüngliche Antwort:

Wenn jemand OpenVPN Access Server verwendet, müssen Sie zu /usr/local/openvpn_as/scripts/(zum Beispiel unter Debian) gehen und diesen Befehl ausführen:

./sacli --key "vpn.server.port_share.enable" --value "true" ConfigPut ./sacli --key "vpn.server.port_share.service" --value "custom" ConfigPut ./sacli --key "vpn.server.port_share.ip_address" --value <LOCAL_IP> ConfigPut ./sacli --key "vpn.server.port_share.port" --value <PORT> ConfigPut ./sacli start

Quelle:

https://forums.openvpn.net/viewtopic.php?p=78630#p78630

https://openvpn.net/vpn-server-resources/managing-settings-for-the-web-services-from-the-command-line/#Change_the_web_service_forwarding_settings

In meinem Fall musste ich den Befehl für den Schlüssel nicht ausführen vpn.server.port_share.serviceund habe service openvpnas restartstattdessen den Befehl verwendet ./sacli start.

Ich habe <LOCAL_IP>mit 127.0.0.1und <PORT>mit ersetzt, 4443seit ich Apache so konfiguriert habe, dass er Port 4443 überwacht.

Meine Datei /etc/apache2/ports.confist folgendermaßen konfiguriert:

Listen 80

<IfModule ssl_module>
        Listen 4443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 4443
</IfModule>

Und meine Apache SSL-Konfiguration /etc/apache2/sites-enabled/000-default.confbeginnt wie folgt: <IfModule mod_ssl.c> <VirtualHost *:4443>

Hinweis: Ich habe in der Vergangenheit OpenVPN Access Server verwendet, da die Einrichtung einfach war. Es gibt auch alternative Skripte zum Einrichten von OpenVPN, die den Vorteil haben, Open Source zu sein und die Anzahl der Benutzer nicht zu begrenzen, zum Beispiel: https://github.com/Nyr/openvpn-install

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.