2 Server, 1 öffentliche IP - Subdomain intern umleiten

7

Ich habe 2 SSL-Webserver und 1 öffentliche IP-Adresse.

Ich besitze eine TLD (example.com). Ich möchte server1.example.com auf den internen Server A und server2.example.com auf den internen Server B umleiten.

Wie würde ich das machen? Die Webserver sind nicht IIS oder Apache, sondern Verwaltungswebanwendungen, die die Ports 443 verwenden.

Chris
quelle
Wenn Sie nicht bereit sind, alternative Portnummern zu verwenden, ist die folgende Antwort möglicherweise alles, was Sie haben.
Appleoddity
@Appleoddity Ich füge eine Nginx-Antwort hinzu, die keinen HA-Proxy verwendet, aber als Alternative zu HAproxy fungiert und trotzdem "funktioniert". Sobald ich an einen Computer komme, natürlich ..
Thomas Ward
1
Übrigens: IPv6 existiert.
Monica wieder herstellen - M. Schröder

Antworten:

14

Sie sollten einen Reverse-Proxy (z. B. HAProxy, Nginx, Squid ...) vor diesen beiden Servern verwenden. Binden Sie die öffentliche IP-Adresse an das Proxy-Frontend und leiten Sie den Datenverkehr mithilfe der SSL-SNI-Erweiterung über den Domänennamen an die Backend-Server weiter.

HAProxy-Beispiel ( https://www.haproxy.com/blog/enhanced-ssl-load-balancing-with-server-name-indication-sni-tls-extension/ ):

# 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
user373333
quelle
4

Wie von user373333 angegeben , müssen Sie etwas verwenden, um den Edge und den Proxy im Netzwerk abzuhören.

Sie werden verwendet haproxy, ich bevorzuge, nginxweil Sie SSL einzeln bereitstellen, Zertifikate etwas besser steuern können und es weniger Chaos gibt, weil Sie Websites einzeln konfigurieren können. Das, und ich bin viel besser damit vertraut nginxals haproxydafür - wir mussten eine solche Bereitstellung auf einer bestimmten Software durchführen, die wir bereitgestellt hatten, wobei wir eine Eingangs-IP-Adresse für den Webverkehr hatten, und das war es, aber wir hatten acht oder neun Webverwaltungsseiten auf internen IP-adressierten Servern.

Abhängig von Ihrem Betriebssystem, das ich als dediziertes externes System bezeichnen würde, würden Sie es installieren nginx.

Fügen Sie die folgenden Strophen bis zum Ende Ihrer nginx.conf‚s httpAbschnitt, die theoretisch in sein sollte /etc/nginx; Aktualisieren Sie diese entsprechend für Ihre Domains:

# 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;
}

Sie müssen je nach System openssl dhparam -out /etc/ssl/dhparam.2048.pem 2048entweder als Superuser oder mit sudoausgeführt werden. Sobald Sie dies getan und die dhparam.2048.pemDatei erstellt haben, können Sie den NGINX-Prozess auf Ihrem System neu starten und Ihre Sites testen. Stellen Sie sicher, dass der gesamte Datenverkehr von Port 80 und 443 an dieses System weitergeleitet wird, damit er ordnungsgemäß an interne Systeme übergeben werden kann.

Thomas Ward
quelle