Chia sẻ cổng OpenVPN với Apache / SSL


8

Tôi đang cố gắng thiết lập OpenVPN để nghe trên cổng 443 và sau đó chuyển tất cả lưu lượng HTTPS cho Apache, bằng cách sử dụng port-sharetùy chọn. Các đoạn cấu hình có liên quan là:

OpenVPN

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

Apache với SSL

Listen localhost:443

Ứng dụng khách OpenVPN của tôi kết nối tốt, nhưng khi mở trang kích hoạt HTTPS, tôi gặp lỗi. Firefox nói:

SSL nhận được một bản ghi vượt quá độ dài tối đa cho phép.

(Mã lỗi: ssl_error_rx_record_too_long)

Curl nói

curl: (35) lỗi: 140770FC: Các thói quen SSL: SSL23_GET_SERVER_HELLO: giao thức không xác định

Yêu cầu kết thúc trên Apache, vì tôi thấy trong lỗi ghi lại các thông báo sau:

[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

Mục nhập tin nhắn cho kết nối HTTPS là

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

Sử dụng httpd-2.2.3-43.el5.centos và openvpn-2.1.1-2.el5.

Tôi nên làm gì để chia sẻ công việc cổng?


Cập nhật : Sử dụng

port 443
port-share localhost 10443

Listen localhost:10443

không có sự khác biệt


Cập nhật 2 : một số đầu ra lệnh

[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       

Câu trả lời:


8

các port-sharetùy chọn thiết lập cảng khác ứng dụng đang lắng nghe.

Những gì bạn muốn làm là cấu hình

chia sẻ cổng 10443

và đặt Apache để nghe trên cổng 10443:

Nghe <your-public-ip>: 10443

Đó là bởi vì hai ứng dụng không thể mở cùng một cổng.


Cảm ơn vì đã trả lời. OpenVPN liên kết trên địa chỉ công cộng, trong khi Apache liên kết trên localhost. Tôi sẽ thay đổi cổng Apache khi tôi có cơ hội, nhưng hai ứng dụng có thể liên kết trên cùng một cổng, với điều kiện là chúng sử dụng các địa chỉ khác nhau.
Robert Munteanu

đúng, đúng, nhưng có khả năng openVPN sẽ chuyển hướng đến cùng một IP, không phải localhost (đó sẽ là điều lành mạnh phải làm)
Hubert Kario

Tôi thực sự muốn nói port-share localhost 443. Tôi đã thử port-share localhost 10443, nhưng nó vẫn không hoạt động, cùng một lỗi.
Robert Munteanu

ah, xin lỗi, tôi đã nói một điều và hiển thị cấu hình cho điều khác. Tôi đoán rằng apache phải nghe trên cùng một IP openvpn đang lắng nghe, nghĩa là, công khai, không phải localhost. Cập nhật câu trả lời của tôi.
Hubert Kario

Một điều nữa, bạn có chắc rằng phiên bản openvpn của bạn không hỗ trợ tùy chọn này? (thử với openvpn --help | grep port-share). Và bạn có chắc rằng apache lắng nghe trên cổng được cấu hình và SSL hoạt động không?
Hubert Kario

2

Trong khi tìm câu trả lời phù hợp với máy chủ của mình, tôi thấy mọi người đang nói về portsharechức năng của cấu hình OpenVPN. Tuy nhiên, trong trường hợp của tôi, tôi cần biết địa chỉ IP của máy khách thực tế để ghi nhật ký và các chức năng khác. Tôi thấy rằng việc sử dụng portsharekhiến IP cục bộ của máy chủ được ghi lại.

Để khắc phục điều này,

  1. Thêm portshare [port]chức năng trong OpenVPN
  2. Đặt máy chủ Apache để nghe [port]
  3. Cài đặt tiện ích mở rộng ProxyProtocol (làm theo hướng dẫn trong repo readme), có sẵn từ: https://github.com/roadrunner2/mod-proxy-protatio
  4. Thêm dòng ProxyProtocol Ontrong cấu hình Apache.

Nó nên làm việc và phục vụ các mục đích trên. Chỉ cần đăng bài này và hy vọng nó có thể giúp ai đó muốn làm điều gì đó như tôi đã làm.


1

Tùy chọn chia sẻ cổng của OpenVPN cho phép bạn chuyển hướng lưu lượng truy cập đến một trang web HTTPS khác, không phải đến một máy chủ web thông thường; lỗi bạn đang thấy

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

xảy ra khi một yêu cầu SSL được gửi đến một trang web không phải 0SSL. Tôi có thể tái tạo lỗi bằng cách sử dụng

  port-share localhost 80

(thay vì 443) Nếu bạn thiết lập trang web HTTPS chính xác thì việc chia sẻ cổng sẽ hoạt động.

HTH

JJK


0

Cập nhật: Tôi nhận thấy rằng địa chỉ IP của khách truy cập trang web sẽ luôn 127.0.0.1ở trong nhật ký máy chủ web. Đây là một vấn đề nếu bạn muốn biết nguồn gốc của một kết nối hoặc muốn sử dụng một công cụ như thế nào fail2ban. Có vẻ như không có cách nào để có địa chỉ IP thực sự của khách truy cập trong nhật ký Apache nếu chúng tôi đang sử dụng OpenVPN port-share( https://forums.openvpn.net/viewtopic.php?t=22599 ), vì vậy tôi đã sử dụng công cụ SSLH ở chế độ trong suốt: /unix/373717/how-does-sslhs-transparent-mode-work/532333#532333

Câu trả lời gốc:

Nếu ai đó đang sử dụng OpenVPN Access Server, bạn phải truy cập /usr/local/openvpn_as/scripts/(ví dụ trên Debian) và thực hiện các lệnh sau:

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

Nguồn:

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

https://openvpn.net/vpn-server-resource/managing-sinstall-for-the-web-service-from-the-command-line/#Change_the_web_service_forwarding_sinstall

Trong trường hợp của tôi, tôi không cần thực hiện lệnh cho khóa vpn.server.port_share.servicevà tôi đã sử dụng lệnh service openvpnas restartthay vì ./sacli start.

Tôi thay thế <LOCAL_IP>với 127.0.0.1<PORT>với 4443kể từ khi tôi cấu hình Apache để lắng nghe trên cổng 4443.

Tập tin của tôi /etc/apache2/ports.confđược cấu hình như thế này:

Listen 80

<IfModule ssl_module>
        Listen 4443
</IfModule>

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

Và cấu hình SSL Apache của tôi /etc/apache2/sites-enabled/000-default.confbắt đầu như thế này: <IfModule mod_ssl.c> <VirtualHost *:4443>

Lưu ý: Trước đây tôi đã sử dụng OpenVPN Access Server vì nó rất dễ thiết lập. Ngoài ra còn có các tập lệnh thay thế để thiết lập OpenVPN có lợi thế là nguồn mở và không giới hạn số lượng người dùng, ví dụ: https://github.com/Nyr/openvpn-install

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.