2 servidores, 1 IP público - Redirecionar subdomínio internamente

6

Eu tenho dois servidores da Web SSL e um endereço IP público.

Eu possuo um TLD (example.com), o que eu gostaria de fazer é redirecionar server1.example.com para o servidor interno A e server2.example.com para o servidor interno B.

Como eu vou fazer isso? Os servidores Web não são IIS ou Apache, mas são aplicativos da Web de gerenciamento que usam as portas 443.

    
por Chris 30.07.2017 / 22:12

2 respostas

13

Você deve usar um proxy reverso (por exemplo, HAProxy, nginx, squid ...) na frente desses dois servidores. Vincule o endereço IP público ao frontend de proxy e, em seguida, use a extensão SSL SNI para rotear o tráfego pelo nome de domínio para os servidores de backend.

Exemplo HAProxy ( link ):

# Adjust the timeout to your needs
defaults
  timeout client 30s
  timeout server 30s
  timeout connect 5s

# Single VIP 
frontend ft_ssl_vip
  bind 10.0.0.10:443
  mode tcp

  tcp-request inspect-delay 5s
  tcp-request content accept if { req_ssl_hello_type 1 }

  default_backend bk_ssl_default

# Using SNI to take routing decision
backend bk_ssl_default
  mode tcp

  acl application_1 req_ssl_sni -i application1.domain.com
  acl application_2 req_ssl_sni -i application2.domain.com

  use-server server1 if application_1
  use-server server2 if application_2
  use-server server3 if !application_1 !application_2

  option ssl-hello-chk
  server server1 10.0.0.11:443 check
  server server2 10.0.0.12:443 check
  server server3 10.0.0.13:443 check
    
por 30.07.2017 / 23:34
3

Como foi indicado pelo user373333 , você precisaria usar algo para ouvir na borda e fazer proxy na rede .

Eles usaram haproxy , eu prefiro nginx porque você pode servir SSL individualmente, controlar os certs um pouco melhor e há menos caos porque você pode configurar sites individualmente. Isso, e eu tenho muito mais familiaridade com nginx do que haproxy para isso - nós tivemos que ter tal implantação em um software específico que implantamos onde tínhamos um endereço IP de entrada para o tráfego da web, e foi isso, mas tínhamos oito ou nove páginas de administração da Web em servidores endereçados IP internos.

Dependendo do seu SO em relação ao que eu chamaria de um sistema dedicado externo, você instalaria nginx .

Adicione as seguintes estrofes ao final da seção nginx.conf http , que teoricamente deve estar em /etc/nginx ; atualize-as de acordo com seus domínios:

# First Server
server {
    listen 443 ssl;

    server_name server1.example.com;

    ssl_certificate /path/to/SSL/cert;
    ssl_certificate_key /path/to/SSL/cert/privkey;

    # Secure SSL configs
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:AES128+EECDH:AES128+EDH";
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off; # Requires nginx >= 1.5.9
    ssl_dhparam /etc/ssl/dhparam.2048.pem; # To protect against LOGJAM

    location / {
        add_header X-Forwarded-For $remote_ip
        add_header X-Forwarded-Proto https;
        add_header X-Content-Type-Options nosniff;
        add_header X-Frame-Options SAMEORIGIN;
        add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
        proxy_pass https://internal.ip.address.1:443/;
    }
}

# Second Server
server {
    listen 443 ssl;

    server_name server2.example.com;

    ssl_certificate /path/to/SSL/cert;
    ssl_certificate_key /path/to/SSL/cert/privkey;

    # Secure SSL configs
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:AES128+EECDH:AES128+EDH";
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off; # Requires nginx >= 1.5.9
    ssl_dhparam /etc/ssl/dhparam.2048.pem; # To protect against LOGJAM

    location / {
        add_header X-Forwarded-For $remote_ip
        add_header X-Forwarded-Proto https;
        add_header X-Content-Type-Options nosniff;
        add_header X-Frame-Options SAMEORIGIN;
        add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
        proxy_pass https://internal.ip.address.2:443/;
    }
}

# Catch all for all other responses, return 410 GONE message.
server {
    listen 80 default_server;
    listen 443 default_server;

    server_name server1.example.com;

    ssl_certificate /path/to/a/bogus/self-signed/SSL/cert;
    ssl_certificate_key /path/to/a/bogus/self-signed/SSL/cert/privkey;

    # Secure SSL configs
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:AES128+EECDH:AES128+EDH";
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off; # Requires nginx >= 1.5.9
    ssl_dhparam /etc/ssl/dhparam.2048.pem; # To protect against LOGJAM

    return 410;
}

Você precisará executar openssl dhparam -out /etc/ssl/dhparam.2048.pem 2048 como superusuário ou com sudo , dependendo do sistema, mas depois de fazer isso e ter criado o arquivo dhparam.2048.pem , você poderá reiniciar o processo NGINX seu sistema e testar seus sites. Certifique-se de que todo o tráfego da porta 80 e 443 seja encaminhado para este sistema, de modo que possa ser entregue adequadamente aos sistemas internos.

    
por 31.07.2017 / 14:11

Tags