Ters Proxy, SSL geçişli SNI kullanabilir mi?


18

Bir harici ip adresi kullanarak https üzerinden birkaç uygulama sunmam gerekiyor.

SSL sertifikaları ters proxy üzerinde yönetilmemelidir. Uygulama sunucularına yüklenir.

Ters proxy, SNI kullanacak ve uç noktada sonlandırma için ssl'yi geçirecek şekilde yapılandırılabilir mi?

Nginx veya Apache gibi bir şey kullanmak mümkün mü? Yapılandırma neye benziyor?

Yanıtlar:


14

Bu Haproxy ile mümkündür. Bir TCP proxy kurabilir ve SNI'yi ayıklayabilir ve SNI'yi temel alarak yönlendirme yapabilirsiniz. İşte bir örnek:

backend be.app1
    mode tcp
    no option checkcache
    no option httpclose
    tcp-request inspect-delay 5s
    tcp-request content accept if { req.ssl_hello_type 1 }
    tcp-request content reject
    use-server server1 if { req.ssl_sni -m beg app1. }
    server server1 server1:8443 check id 1 weight 0

SSL merhaba alıncaya kadar isteği ertelemek önemlidir, aksi takdirde haproxy SNI üstbilgisini almadan önce bir bağlantı kurmaya çalışır.

Geçerli yapılandırmamda, her SNI için çalışan yalnızca bir sunucum olduğu için rasgele istekleri almalarını istemediğim için 0 ağırlığı olan sunucular kullanıyorum. Bununla oynamak için muhtemelen daha iyi yollar bulabilirsiniz.

Umarım bu yardımcı olur.


Cevabımı kabul edebilmem için beni bunun herhangi bir dokümantasyonuna veya bir konfigürasyon snippet'ine yönlendirebilir misiniz?
user319862

3
@ user319862 Tartışılan şey bu güzel öğretici buldum .
Michael Hampton

1
Gerçekten mi? Birisi bu cevabı neden küçümseyesin ki?
Florin Asăvoaie

Buradaki sorun, istemcinin IP adresinin iletilmemesidir, bu nedenle sunucu yalnızca proxy'den gelen trafiği görür.
Kyle

@Kyle Elbette. TCP proxy'sidir. Bu konuda yapabileceğiniz tek şey, haproxy'yi sunucu için bir yönlendirici olarak yapılandırıp ayarlayıp tproxy kullanmanızdır.
Florin Asăvoaie

5

Sniproxy kullanabilirsiniz: https://github.com/dlundquist/sniproxy

Örnek bir yapılandırma:

listener 0.0.0.0:443 {
    protocol tls
    table TableHTTPS
    fallback 127.0.0.1:8443
}

listener 0.0.0.0:80 {
    protocol http
    table TableHTTP
    fallback 127.0.0.1:8080
}

table TableHTTPS {
    domain1.com backend1:443
    domain2.org backend2:443
}

table TableHTTP {
    domain1.com backend1:80
    domain2.org backend2:80
}

Bu proje hakkında yayın gönderdiğiniz için teşekkür ederiz. Farkında
değildim

@mick Merhaba mick şeffaf bir proxy olarak SNI çalıştırırken SSL hataları ile bazı siteleri kırmak. Nasıl düzeltebilirim?
gripenfighter

1

Bu, 2019'da bile yaklaşan TLS 1.3 ile kesinlikle mümkün! Birçok web sunucusu veya özel ters proxy, bu işlevselliği kutudan çıkarır:

  • Nginx ≥ 1.11.5 (Debian ≥ buster veya streç backport'lar)
  • HAProxy ≥ 1.5 (Debian ≥ jessie)
  • Sniproxy (Debian ≥ tanımlama)
  • vb.

Bu, ters proxy gerektiren kurulumlar için çok popüler bir seçim olan Nginx için örnek bir yapılandırmadır:

stream {
  map $ssl_preread_server_name $selected_upstream {
    example.org upstream_1;
    example.net upstream_2;
    example.com upstream_3;
    default upstream_4;
  }
  upstream upstream_1 { server 10.0.0.1:443; }
  upstream upstream_2 { server 10.0.0.2:443; }
  upstream upstream_3 { server 10.0.0.3:443; }
  upstream upstream_4 { server 10.0.0.4:443; }
  server {
    listen 10.0.0.5:443;
    proxy_pass $selected_upstream;
    ssl_preread on;
  }
}

İlgili Nginx modülleri stream_coreve stream_ssl_preread. Kılavuzlar:

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.