Чи може зворотний проксі використовувати SNI з SSL?


18

Мені потрібно обслуговувати кілька додатків через https, використовуючи одну зовнішню ip-адресу.

Сертифікатами ssl не слід керувати на зворотному проксі. Вони встановлюються на серверах додатків.

Чи може бути налаштований зворотний проксі-сервер для використання SNI та передачі ssl для завершення в кінцевій точці?

Це можливо, використовуючи щось на зразок Nginx або Apache? Як виглядає конфігурація?

Відповіді:


14

Це можливо з Haproxy. Ви можете налаштувати проксі-сервер TCP і витягнути SNI і зробити маршрутизацію на основі SNI. Ось приклад:

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, інакше haproxy спробує встановити з'єднання перед отриманням заголовка SNI.

Я використовую сервери вагою 0, оскільки в моїй поточній конфігурації у мене працює лише один сервер для кожного SNI, і я не хочу, щоб вони отримували випадкові запити. Напевно, ви можете знайти кращі способи пограти з цим.

Я сподіваюся, що це допомагає.


Чи можете ви вказати мені будь-яку документацію цього фрагмента чи фрагмент конфігурації, щоб я міг прийняти відповідь?
користувач319862

3
@ user319862 Я знайшов цей приємний підручник, який, здається, те, про що йде мова.
Майкл Хемптон

1
Дійсно? Чому хтось спростував цю відповідь?
Florin Asăvoaie

Проблема з цим полягає в тому, що IP-адреса клієнта не передається, тому сервер бачить лише трафік, що надходить з проксі.
Кайл

@Kyle Звичайно. Це проксі-сервер TCP. Єдине, що ви можете зробити для цього - це налаштувати та встановити haproxy як маршрутизатор для сервера та використовувати tproxy.
Флорін Асевойе

5

Ви можете використовувати сніпрокси: https://github.com/dlundquist/sniproxy

Приклад конфігурації:

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
}

Дякуємо за повідомлення про проект. Я про це не знав
користувач319862

@mick Привіт Мік, коли запускається SNI як прозорий проксі, він порушує деякі сайти з помилками SSL. Як це виправити?
gripenfighter

1

Це, безумовно, можливо навіть зараз у 2019 році з майбутнім TLS 1.3! Багато веб-серверів або спеціалізовані зворотні проксі надають цю функціональність нестандартно:

  • Nginx ≥ 1.11.5 (Debian ≥ buster або стретч-спинки)
  • HAProxy ≥ 1,5 (Debian ≥ jessie)
  • Sniproxy (Debian ≥ buster)
  • тощо.

Це приклад конфігурації для Nginx, який є дуже популярним вибором для установок, які потребують зворотного проксі:

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

Відповідними модулями Nginx є stream_coreі stream_ssl_preread. Посібники:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.