Bisakah Reverse Proxy menggunakan SNI dengan SSL melewatinya?

18

Saya perlu melayani beberapa aplikasi melalui https menggunakan satu alamat ip eksternal.

Sertifikat ssl tidak boleh dikelola pada proksi terbalik. Mereka diinstal pada server aplikasi.

Dapatkah proxy terbalik dikonfigurasi untuk menggunakan SNI dan lulus ssl melalui untuk penghentian di titik akhir?

Apakah ini mungkin menggunakan sesuatu seperti Nginx atau Apache? Seperti apa konfigurasi itu?

pengguna319862
sumber

Jawaban:

14

Ini mungkin dengan Haproxy. Anda dapat mengatur proxy TCP dan mengekstrak SNI dan melakukan routing berdasarkan pada SNI. Ini sebuah contoh:

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

Sangat penting untuk menunda permintaan sampai Anda mendapatkan SSL halo, jika tidak haproxy akan mencoba membuat koneksi sebelum menerima tajuk SNI.

Saya menggunakan server dengan bobot 0 karena, dalam konfigurasi saya saat ini, saya hanya memiliki satu server yang berjalan untuk setiap SNI dan saya tidak ingin mereka menerima permintaan acak. Anda mungkin dapat menemukan cara yang lebih baik untuk bermain dengan ini.

Saya harap ini membantu.

Florin Asăvoaie
sumber
Bisakah Anda mengarahkan saya ke dokumentasi apa pun ini atau cuplikan konfigurasi sehingga saya dapat menerima jawabannya?
user319862
3
@ user319862 Saya menemukan tutorial yang bagus ini yang tampaknya menjadi apa yang sedang dibahas.
Michael Hampton
1
Betulkah? Mengapa ada orang yang menurunkan jawaban ini?
Florin Asăvoaie
Masalah dengan ini adalah bahwa alamat IP klien tidak diteruskan, sehingga server hanya melihat lalu lintas yang datang dari proxy.
Kyle
@ Gaya Tentu saja. Itu adalah proksi TCP. Satu-satunya hal yang dapat Anda lakukan tentang hal ini adalah jika Anda mengkonfigurasi dan mengatur haproxy sebagai router untuk server dan menggunakan tproxy.
Florin Asăvoaie
5

Anda dapat menggunakan sniproxy: https://github.com/dlundquist/sniproxy

Contoh konfigurasi:

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
}
mick
sumber
Terima kasih telah memposting tentang proyek itu. Saya tidak menyadarinya
user319862
@mick Hai mick ketika menjalankan SNI sebagai proxy transparan itu memecah beberapa situs dengan kesalahan SSL. Bagaimana memperbaikinya ?
gripenfighter
1

Ini tentu saja mungkin, bahkan sekarang di tahun 2019 dengan TLS 1.3 yang akan datang! Banyak server web atau proksi terbalik khusus menyediakan fungsi ini di luar kotak:

  • Nginx ≥ 1.11.5 (Debian ≥ buster atau stretch-backports)
  • HAProxy ≥ 1.5 (Debian ≥ jessie)
  • Sniproxy (Debian ≥ buster)
  • dll.

Ini adalah contoh konfigurasi untuk Nginx, yang merupakan pilihan yang sangat populer untuk pengaturan yang memerlukan proxy terbalik:

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

Modul Nginx yang relevan adalah stream_coredan stream_ssl_preread. Manual:

vog
sumber