Apache / SSLによるOpenVPNポートシェア


8

port-shareオプションを使用して、ポート443でリッスンするようにOpenVPNを設定し、すべてのHTTPSトラフィックをApacheに渡そうとしています。関連する構成スニペットは次のとおりです。

OpenVPN

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

SSLを使用するApache

Listen localhost:443

OpenVPNクライアントは問題なく接続できますが、HTTPS対応のページを開くとエラーが発生します。Firefoxさんのコメント:

SSLは、最大許容長を超えるレコードを受け取りました。

(エラーコード:ssl_error_rx_record_too_long)

カールは言う

curl:(35)エラー:140770FC:SSLルーチン:SSL23_GET_SERVER_HELLO:不明なプロトコル

エラーログに次のメッセージが表示されるため、リクエストはApacheで終了します。

[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

HTTPS接続のメッセージエントリは

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

httpd-2.2.3-43.el5.centosおよびopenvpn-2.1.1-2.el5を使用します。

ポート共有を機能させるにはどうすればよいですか?


アップデート:使用

port 443
port-share localhost 10443

そして

Listen localhost:10443

違いはありません。


更新2:いくつかのコマンド出力

[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       

回答:


8

このport-shareオプションは、他のアプリケーションがリスニングするポートを設定します。

あなたがしたいことは、設定することです

ポートシェア10443

そしてApacheをポート10443でリッスンするように設定します:

<your-public-ip>:10443を聞く

これは、2つのアプリケーションが同時に同じポートを開くことができないためです。


お返事をありがとうございます。OpenVPNはパブリックアドレスにバインドし、Apacheはローカルホストにバインドします。機会があればApacheポートを変更しますが、2つのアプリケーション異なるポートを使用している場合、同じポートにバインドできます。
ロバートムンテアヌ

はい、そうですが、openVPNはローカルホストではなく同じIPにリダイレクトする可能性があります(これは正気なことです)
Hubert Kario

実際に言うつもりだったport-share localhost 443。私は試しましたport-share localhost 10443が、それでも機能しませんでした、同じエラー。
ロバートムンテアヌ

ああ、申し訳ありませんが、私は1つのことを言っていて、もう1つの構成を示していました。私は、apacheがopenvpnがリッスンしているのと同じIP、つまりlocalhostではなくpublicでリッスンする必要があると思います。私の答えを更新しました。
Hubert Kario

もう1つ、openvpnのバージョンでこのオプションがサポートされていることを確認しますか?(で試してくださいopenvpn --help | grep port-share)。そして、あなたはApacheが設定されたポートでリッスンし、SSLが機能していることを確信していますか?
Hubert Kario

2

私のサーバーに合った答えを見つけると、誰もportshareがOpenVPN構成の機能について話しているのを見つけました。ただし、私の場合、ロギングやその他の機能のために実際のクライアントIPアドレスを知る必要があります。を使用するportshareと、サーバーのローカルIPがログに記録されることがわかりました。

これを修正するには、

  1. portshare [port]OpenVPN に機能を追加
  2. リッスンするようにApacheサーバーを設定する [port]
  3. https://github.com/roadrunner2/mod-proxy-protocolから入手可能なProxyProtocol拡張機能をインストールします(レポのreadmeの指示に従ってください)
  4. ProxyProtocol OnApache設定に行を追加します。

上記の目的で機能し、機能するはずです。これを投稿して、私がしたようなことをしたい人に役立つことを願っています。


1

OpenVPNのポート共有オプションを使用すると、通常のWebサーバーではなく、別のHTTPSサイトにトラフィックをリダイレクトできます。あなたが見ているエラー

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

SSL要求が非0SSLサイトに送信されると発生します。を使用してエラーを再現できます

  port-share localhost 80

(443の代わりに)HTTPSサイトを正しく設定すると、ポート共有が機能します。

HTH、

JJK


0

更新:Webサイト訪問者のIPアドレスは常に127.0.0.1Webサーバーログに記録されることに気付きました。これは、接続の発信元を知りたい場合や、などのツールを使用したい場合に問題になりますfail2ban。OpenVPN port-sharehttps://forums.openvpn.net/viewtopic.php?t=22599)を使用している場合、Apacheログに訪問者の実際のIPアドレスを含める方法がないように見えるため、SSLHツールを使用しました透過モード:https : //unix.stackexchange.com/questions/373717/how-does-sslhs-transparent-mode-work/532333#532333

元の答え:

誰かがOpenVPNアクセスサーバーを使用している場合は、/usr/local/openvpn_as/scripts/(例えばDebianで)にアクセスして、次のコマンドを実行する必要があります。

./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

ソース:

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

私の場合、キーに対してコマンドを実行する必要はなくvpn.server.port_share.service、のservice openvpnas restart代わりにコマンドを使用しました./sacli start

Apacheをポート4443でリッスンするように構成したので<LOCAL_IP>127.0.0.1とを交換しました。<PORT>4443

私のファイル/etc/apache2/ports.confは次のように構成されています:

Listen 80

<IfModule ssl_module>
        Listen 4443
</IfModule>

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

そして私のApache SSL設定/etc/apache2/sites-enabled/000-default.confは次のように始まります: <IfModule mod_ssl.c> <VirtualHost *:4443>

注:設定は簡単だったので、以前はOpenVPNアクセスサーバーを使用していました。OpenVPNをセットアップするための代替スクリプトもあります。これは、オープンソースであり、ユーザー数を制限しないという利点があります。例:https : //github.com/Nyr/openvpn-install

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.