Я хочу создать tcp-прокси на основе SNI. Серверная часть восходящего потока - это кластер openshift, и я хочу заблокировать доступ к определенным проектам по IP.
поэтому идея состоит в том, чтобы использовать прокси-сервер tcp с несколькими VIP.
Использовать или разрешить ...
VIP1; если SNI = *. openshift.acme.com И не находится в других VIP (по умолчанию)
VIP2; если SNI = * -project1.openshift.acme.com
VIP3; если SNI = * -project2.openshift.acme.com
VIP-адреса находятся за брандмауэром, который определяет, кто может получить доступ к каким VIP-адресам.
он предназначен для предотвращения использования VIP1 для доступа к другим проектам путем изменения SNI на VIP с помощью записи hosts. И VIP2 и VIP3 должны пересылать только те SNI, которые соответствуют фильтру регулярных выражений.
Я попытался записать рабочую логику на основе модуля потока nginx с логикой и реальным сочетанием кода.
stream {
upstream openshift-backend {
server infra-node1:443;
server infra-node2:443;
server infra-node3:443;
}
server {
listen 192.168.0.1:443;
proxy_pass $upstream;
ssl_preread on;
if $ssl_preread_server_name = ".openshift.acme.com" AND "not in other server blocks";
}
server {
listen 192.168.0.2:443;
proxy_pass $upstream;
ssl_preread on;
if $ssl_preread_server_name = = ~(*.-project1)\.openshift\.acme\.com$;
}
server {
listen 192.168.0.3:443;
proxy_pass $upstream;
ssl_preread on;
if $ssl_preread_server_name = = ~(*.-project2)\.openshift\.acme\.com$;
}
Я бы предпочел использовать nginx и сквозную передачу. Но если это невозможно, я открыт для любого другого решения.
Большое спасибо