Proxy reverso SSL do relayd do OpenBSD para 3 servidores da web

2

Eu executo servidores virtuais atrás de um firewall em três máquinas diferentes (cada máquina armazena domínios diferentes, não é um CLUSTER). Para renovar Vamos criptografar certificados automaticamente Eu preciso do proxy para enviar pedidos para três servidores diferentes com base em nomes de domínio.

                        +--------+      +-------------+                      
                        |        +----->| domain1.com | 
                        |        |      +-------------+
                        |        |      +-------------+
domain1,2,3.com-->443-->| proxy  +----->| domain2.com |
                        |        |      +-------------+
                        |        |      +-------------+ 
                        |        +----->| domain3.com |
                        +--------+      +-------------+ 

O proxy é retransmitido no OpenBSD. Eu segui este guia (exatamente a mesma situação) para configurar serviços web regulares com HTTP: link

Mas parece diferente para SSL com HTTPS. Parece que tenho que instalar os certificados SSL no proxy e no servidor da Web que atende ao domínio.

  1. Alguém pode sugerir uma sintaxe adequada para isso?
  2. Posso servir as portas 80 e 443 ao mesmo tempo para as mesmas máquinas? Obrigado.
por Petr Topiarz 21.08.2017 / 15:27

1 resposta

2

Normalmente, em tais frontends, você instala o tráfego SSL no frontend e encaminha para o backend o tráfego HTTP normal sem criptografia.

          https                           http
       Internet -------->  relayd reverse proxy  ------->  internal LAN web server
                 port 443                        port 80

Como em man relayd :

The following configuration would add a relay to forward secure HTTPS connections to a pool of HTTP webservers using the loadbalance mode (TLS acceleration and layer 7 load balancing). The HTTP protocol definition will add two HTTP headers containing address information of the client and the server, set the “Keep-Alive” header value to the configured session timeout, and include the “sessid” variable in the hash to calculate the target host:

http protocol "https" {
match header set "X-Forwarded-For" \
value "$REMOTE_ADDR"
match header set "X-Forwarded-By" \
value "$SERVER_ADDR:$SERVER_PORT"
match header set "Keep-Alive" value "$TIMEOUT"

match query hash "sessid"
match hash "sessid"

pass
block path "/cgi-bin/index.cgi" value "command="

tls { no tlsv1.0, ciphers "HIGH" }
}

relay "tlsaccel" {
listen on www.example.com port 443 tls
protocol "https"
forward to port 8080 mode loadbalance check tcp
}

Se o ssl ou tls key estiver presente, ele tentará localizar os arquivos de acordo com o endereço IP ao qual o vhost está associado. Quanto aos certificados X.509, relayd tentará encontrá-los em /etc/ssl/private para a chave privada e /etc/ssl para a (s) chave (s) pública (s) do certificado.

De Proxy de retransmissão

If the ssl keyword is present, like in our line "listen on $relayd_addr port $relayd_port ssl", the relay will accept connections using the encrypted SSL protocol. The relay will look up a private key in /etc/ssl/private/address.key and a public certificate in /etc/ssl/address.crt, where address is the specified IP address of the relay to listen on.

So, the name of the files must be the same as the address relayd is listening on. In our example relayd.conf, we are listening on "relayd_addr=127.0.0.1" so our files MUST be named 127.0.0.1.key, 127.0.0.1.csr and 127.0.0.1.crt.

Para servir a porta 80, basta adicionar a sintaxe normal como um proxy HTTP à configuração acima. Ambos podem coexistir ao mesmo tempo.

    
por 21.08.2017 / 16:58