OpenVPN port-share dengan Apache / SSL


8

Saya mencoba mengatur OpenVPN untuk mendengarkan pada port 443, dan kemudian meneruskan semua lalu lintas HTTPS ke Apache, dengan menggunakan port-shareopsi. Cuplikan konfigurasi yang relevan adalah:

OpenVPN

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

Apache dengan SSL

Listen localhost:443

Klien OpenVPN saya terhubung dengan baik, tetapi ketika membuka halaman yang diaktifkan HTTPS, saya mendapatkan kesalahan. Firefox mengatakan:

SSL menerima catatan yang melebihi panjang maksimum yang diizinkan.

(Kode kesalahan: ssl_error_rx_record_too_long)

Curl berkata

curl: (35) error: 140770FC: rutinitas SSL: SSL23_GET_SERVER_HELLO: protokol tidak dikenal

Permintaan berakhir di Apache, karena saya melihat di log kesalahan pesan berikut:

[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

Entri pesan untuk koneksi HTTPS adalah

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

Menggunakan httpd-2.2.3-43.el5.centos dan openvpn-2.1.1-2.el5.

Apa yang harus saya lakukan agar berbagi port berfungsi?


Pembaruan : Menggunakan

port 443
port-share localhost 10443

dan

Listen localhost:10443

tidak ada bedanya.


Pembaruan 2 : beberapa output perintah

[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       

Jawaban:


8

yang port-sharepilihan menetapkan pelabuhan lainnya aplikasi mendengarkan.

Yang ingin Anda lakukan, adalah mengkonfigurasi

port-share 10443

dan atur Apache untuk mendengarkan pada port 10443:

Dengarkan <your-publik-ip>: 10443

Itu karena dua aplikasi tidak dapat membuka port yang sama sekaligus.


Terima kasih untuk balasan Anda. OpenVPN mengikat pada alamat publik, sedangkan Apache mengikat pada localhost. Saya akan mengubah port Apache ketika saya memiliki kesempatan, tetapi dua aplikasi dapat mengikat pada port yang sama, mengingat mereka menggunakan alamat yang berbeda.
Robert Munteanu

ya, benar, tetapi kemungkinan openVPN akan mengalihkan ke IP yang sama, bukan localhost (itu akan menjadi hal yang waras untuk dilakukan)
Hubert Kario

Sebenarnya aku bermaksud mengatakannya port-share localhost 443. Saya mencoba port-share localhost 10443, tetapi masih tidak berhasil, kesalahan yang sama.
Robert Munteanu

ah, maaf, saya mengatakan satu hal dan menunjukkan konfigurasi untuk yang lain. Saya kira apache harus mendengarkan openvpn IP yang sama dengan mendengarkan, yaitu publik, bukan localhost. Memperbarui jawaban saya.
Hubert Kario

Satu hal lagi, apakah Anda yakin versi openvpn Anda mendukung opsi ini? (coba dengan openvpn --help | grep port-share). Dan apakah Anda yakin bahwa apache mendengarkan pada port yang dikonfigurasi dan memiliki SSL yang berfungsi?
Hubert Kario

2

Ketika menemukan jawaban yang sesuai dengan server saya, saya menemukan semua orang berbicara tentang portsharefungsi konfigurasi OpenVPN. Namun, dalam kasus saya, saya perlu mengetahui alamat IP klien aktual untuk pencatatan dan fungsi lainnya. Saya menemukan bahwa menggunakan portsharemenyebabkan IP lokal dari server akan dicatat.

Untuk memperbaikinya,

  1. Tambahkan portshare [port]fungsi di OpenVPN
  2. Atur server Apache untuk mendengarkan [port]
  3. Instal ekstensi ProxyProtocol (mengikuti instruksi dalam repo readme), tersedia di: https://github.com/roadrunner2/mod-proxy-protocol
  4. Tambahkan baris ProxyProtocol Ondi konfigurasi Apache.

Itu harus bekerja dan melayani tujuan di atas. Baru saja memposting ini dan berharap ini dapat membantu seseorang yang ingin melakukan sesuatu seperti yang saya lakukan.


1

Opsi port-share OpenVPN memungkinkan Anda untuk mengarahkan lalu lintas ke situs HTTPS lain, bukan ke server web biasa; kesalahan yang Anda lihat

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

terjadi ketika permintaan SSL dikirim ke situs non-0SSL. Saya dapat mereproduksi kesalahan dengan menggunakan

  port-share localhost 80

(bukan 443) Jika Anda mengatur situs HTTPS Anda dengan benar maka berbagi port akan berfungsi.

HTH,

JJK


0

Pembaruan: Saya perhatikan bahwa alamat IP pengunjung situs web akan selalu ada 127.0.0.1di log server web. Ini adalah masalah jika Anda ingin mengetahui asal koneksi atau ingin menggunakan alat seperti fail2ban. Sepertinya tidak ada cara untuk memiliki alamat IP sebenarnya dari pengunjung di log Apache jika kita menggunakan OpenVPN port-share( https://forums.openvpn.net/viewtopic.php?t=22599 ), jadi saya menggunakan alat SSLH dalam mode transparan: /unix/373717/how-does-sslhs-transparent-mode-work/532333#532333

Jawaban asli:

Jika seseorang menggunakan OpenVPN Access Server, Anda harus pergi ke /usr/local/openvpn_as/scripts/(misalnya pada Debian) dan menjalankan perintah ini:

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

Sumber:

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

Dalam kasus saya, saya tidak perlu melakukan perintah untuk kunci vpn.server.port_share.servicedan saya menggunakan perintah service openvpnas restartsebagai gantinya ./sacli start.

Saya diganti <LOCAL_IP>dengan 127.0.0.1dan <PORT>dengan 4443sejak saya mengkonfigurasi Apache untuk mendengarkan pada port 4443.

File saya /etc/apache2/ports.confdikonfigurasi seperti ini:

Listen 80

<IfModule ssl_module>
        Listen 4443
</IfModule>

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

Dan konfigurasi Apache SSL saya di /etc/apache2/sites-enabled/000-default.confmulai seperti ini: <IfModule mod_ssl.c> <VirtualHost *:4443>

Catatan: Saya menggunakan OpenVPN Access Server di masa lalu karena mudah diatur. Ada juga skrip alternatif untuk mengatur OpenVPN yang memiliki keunggulan menjadi open source dan tidak membatasi jumlah pengguna, misalnya: https://github.com/Nyr/openvpn-install

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.