Usando o Apache como um servidor HTTPS de proxy reverso na frente do servidor Gateway de Área de Trabalho Remota

5

Eu tenho um pequeno servidor que executa várias máquinas virtuais, alguns servidores da Web e também um servidor do Gateway de Área de Trabalho Remota do Windows 2008 R2. A intenção é ter um servidor Apache2 rodando no Ubuntu 11.10, que irá atuar como um servidor proxy reverso para encaminhar pedidos para o servidor correspondente com base no nome do host que é usado.

Eu tenho este trabalho para vários outros servidores Ubuntu Apache2 e para o servidor IIS7 em execução no meu servidor 2008 R2 RD Gateway.

Com o trabalho, quero dizer que posso acessar todos esses servidores Web via HTTP e HTTPS com base no nome do host que estou visitando com um navegador da Web.

O que não funciona, no entanto, é usar a funcionalidade de gateway de desktop remoto, para conectar-se de um cliente externo a um servidor RDP interno.

Eu sei que o servidor de gateway RD está configurado corretamente porque se eu redirecionar o tráfego HTTPS externo diretamente para o seu IP (ignorando o servidor proxy apache2), tudo funcionará bem. Quando coloco o proxy apache2 no meio e tento estabelecer uma conexão RDP de uma fonte externa, recebo o seguinte erro no proxy apache error.log:

[error] (70007)The timeout specified has expired: proxy: prefetch request body failed     to 192.168.2.172:443 (rdpgw.internal.domain.com) from xx.xx.xx.xx ()

Onde xx.xx.xx.xx é o IP do meu cliente externo.

O cliente de área de trabalho remota no cliente remoto fornecerá um erro de tempo limite genérico e, no servidor do Gateway RD, tudo parece bem. Ao conectar-se diretamente ao servidor de gateway RD, posso ver isso no arquivo de log do IIS:

2012-01-26 11:54:13 192.168.2.172 RPC_IN_DATA /rpc/rpcproxy.dll localhost:3388 443 - xx.xx.xx.xx MSRPC 401 1 2148074254 15
2012-01-26 11:54:13 192.168.2.172 RPC_OUT_DATA /rpc/rpcproxy.dll localhost:3388 443 - xx.xx.xx.xx MSRPC 401 1 2148074254 15

E ao conectar-se por meio do proxy do apache2, posso ver:

2012-01-26 11:54:53 192.168.2.172 RPC_IN_DATA /rpc/rpcproxy.dll localhost:3388 443 - 192.168.2.170 MSRPC 401 1 2148074254 46
2012-01-26 11:54:53 192.168.2.172 RPC_OUT_DATA /rpc/rpcproxy.dll localhost:3388 443 - 192.168.2.170 MSRPC 401 1 2148074254 31

Portanto, a conexão no segundo caso é proveniente do proxy apache2. caso contrário, as conexões parecem ser as mesmas.

Sobre uma coisa que não sei ao certo como deve ser a configuração, estão os certificados nos dois servidores. Entendo que o HTTPS não pode ser "interceptado" e encaminhado pelo servidor proxy, portanto, se estiver correto, há duas conexões SSL separadas aqui envolvidas: 1 do cliente remoto para o proxy do apache e uma do apache proxy para o servidor de gateway RD. Imaginei que seria melhor se o cliente remoto não visse a diferença, então usei o mesmo certificado autoassinado e chave privada no proxy do apache e no servidor de gateway RD.

Há o conteúdo do arquivo de configuração vhsot apache2 correspondente:

<VirtualHost *:443>
   ServerName rdgw.externaldomainname.com

   ProxyRequests off
   ProxyPreserveHost on
   ProxyPass / https://rdgw.internal.domain.com/
   ProxyPassReverse / https://rdgw.internal.domain.com/

   SSLEngine on
   SSLProxyEngine on
   RequestHeader set Front-End-Https "On"

   SSLCertificateFile /etc/apache2/certs/rdgw.externaldomainname.com.crt
   SSLCertificateKeyFile /etc/apache2/certs/rdgw.externaldomainname.com.key
</VirtualHost>

Espero que alguém saiba como isso pode ser feito? Deve ser possível que eu tenha encontrado este artigo do MS que descreve como configurar exatamente essa configuração, apenas com o MS ISA como um servidor proxy em vez do Ubuntu / Apache2

    
por Alex 26.01.2012 / 13:14

2 respostas

1

Infelizmente, a compatibilidade RPC sobre HTTP no Apache parece "não consertar". Seu comportamento não combina com o modo como o mod_proxy lida com a comunicação, e eles não estão inclinados a retroceder pelo comportamento HTTP não padrão da Microsoft.

Veja aqui . Destaque:

If it fails to comply with HTTP, it isn't HTTP, and the ASF HTTP Server project is unlikely to pay attention; particularly if it masquerades as HTTP and is not.

[snip]

In the interim, after lengthy consideration, this is not an httpd proxy flaw.

Se não há outro motivo para você estar olhando especificamente para o Apache, talvez veja uma alternativa - o HAProxy pode ser um bom ajuste?

    
por 26.01.2012 / 19:44
0

Pelo menos, encontramos uma solução para compatibilidade de RPC sobre HTTP no Apache link

Funciona com o Outlook e o MS RDS (Serviços de Área de Trabalho Remota) no WindowsServer2012R2

Muito obrigado ao autor Micha Lenk, também conhecido como bombadil!

    
por 30.03.2016 / 16:52