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.
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.
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:
Anda dapat menggunakan sniproxy: https://github.com/dlundquist/sniproxy
Contoh konfigurasi:
sumber
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:
Ini adalah contoh konfigurasi untuk Nginx, yang merupakan pilihan yang sangat populer untuk pengaturan yang memerlukan proxy terbalik:
Modul Nginx yang relevan adalah
stream_core
danstream_ssl_preread
. Manual:sumber