Estou tentando configurar o OpenVPN para escutar na porta 443 e depois passar todo o tráfego HTTPS para o Apache, usando a port-share
opção Os trechos de configuração relevantes são:
OpenVPN
local ${PUBLIC_IP}
port 443
port-share localhost 443
Apache com SSL
Listen localhost:443
Meu cliente OpenVPN se conecta muito bem, mas ao abrir a página habilitada para HTTPS, recebo erros. O Firefox diz:
O SSL recebeu um registro que excedeu o comprimento máximo permitido.
(Código de erro: ssl_error_rx_record_too_long)
Curl diz
curl: (35) erro: 140770FC: rotinas SSL: SSL23_GET_SERVER_HELLO: protocolo desconhecido
A solicitação termina no Apache, pois vejo nos logs de erro as seguintes mensagens:
[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
A entrada de mensagens para uma conexão 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
Usando httpd-2.2.3-43.el5.centos e openvpn-2.1.1-2.el5.
O que devo fazer para que o compartilhamento de portas funcione?
Atualização : Usando
port 443
port-share localhost 10443
e
Listen localhost:10443
Não faz diferença.
Atualização 2 : alguma saída de comando
[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
fonte
port-share localhost 443
. Eu tenteiport-share localhost 10443
, mas ainda não funcionou, mesmo erro.openvpn --help | grep port-share
). E você tem certeza de que o apache escuta na porta configurada e o SSL está funcionando?Ao encontrar uma resposta adequada ao meu servidor, encontrei todo mundo falando sobre a
portshare
função da configuração do OpenVPN. No entanto, no meu caso, preciso saber o endereço IP real do cliente para log e outras funções. Eu descobri que o usoportshare
faz com que o IP local do servidor seja registrado.Para consertar isso,
portshare [port]
função no OpenVPN[port]
ProxyProtocol On
na configuração do Apache.Deve funcionar e servir ao propósito acima. Acabei de postar isso e espero que ajude alguém que queira fazer algo como eu.
fonte
A opção de compartilhamento de porta do OpenVPN permite redirecionar o tráfego para outro site HTTPS, não para um servidor da Web comum; o erro que você está vendo
ocorre quando uma solicitação SSL é enviada para um site não 0SSL. Eu posso reproduzir o erro usando
(em vez de 443) Se você configurar seu site HTTPS corretamente, o compartilhamento de portas funcionará.
HTH,
JJK
fonte
Atualização: notei que o endereço IP dos visitantes do site sempre estará
127.0.0.1
nos logs do servidor web. Este é um problema se você deseja saber a origem de uma conexão ou deseja usar uma ferramenta como essafail2ban
. Parece que não há como ter o endereço IP real do visitante nos logs do Apache se estivermos usando o OpenVPNport-share
( https://forums.openvpn.net/viewtopic.php?t=22599 ), então usei a ferramenta SSLH no modo transparente: /unix/373717/how-does-sslhs-transparent-mode-work/532333#532333Resposta original:
Se alguém estiver usando o OpenVPN Access Server, você deverá acessar
/usr/local/openvpn_as/scripts/
(por exemplo, no Debian) e executar o seguinte comando:./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
Fonte:
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
No meu caso, não precisei executar o comando da chave
vpn.server.port_share.service
e usei o comando emservice openvpnas restart
vez de./sacli start
.I substituídos
<LOCAL_IP>
com127.0.0.1
e<PORT>
com4443
desde I configurado Apache para escutar a porta 4443.Meu arquivo
/etc/apache2/ports.conf
está configurado assim:E minha configuração SSL do Apache
/etc/apache2/sites-enabled/000-default.conf
começa assim:<IfModule mod_ssl.c> <VirtualHost *:4443>
Nota: Eu usei o OpenVPN Access Server no passado, pois era fácil de configurar. Também existem scripts alternativos para configurar o OpenVPN, que têm a vantagem de ser de código aberto e não limitar o número de usuários, por exemplo: https://github.com/Nyr/openvpn-install
fonte