Com o nginx, como restringir o acesso a recursos TCP com proxy por nome de host pré-carregado ou upstream?

3

Os nginx docs e mostram que você pode realizar listas de permissões / blacklists baseadas em IP dentro de um bloco stream .

No entanto, não consigo descobrir como allow / deny conexões baseadas em ip, apenas para determinados nomes de host que são lidos usando ssl preread.

Situação

Eu tenho uma caixa nginx que faz proxy para muitos serviços em uma rede privada. Alguns desses serviços devem ser expostos fora da rede, enquanto outros não. Esta caixa nginx está fazendo o proxy das conexões internas e externas.

# TCP proxying with SSL passthrough & vhosts
stream {
        map $ssl_preread_server_name $name {
            public.example.com      public;
            private.example.com     private;
            default                 default_upstream;
        }

        upstream public {
                server 10.0.0.2:443;
        }

        upstream private {
                server 10.0.0.3:443;
        }

        upstream default_upstream {
                server 10.0.0.4:443;
        }

        server {
                listen      443;
                proxy_pass  $name;
                ssl_preread on;
        }
}

Como posso aplicar o bloqueio baseado em ip apenas para conexões com private.example.com ?

    
por Casey 24.05.2017 / 09:54

1 resposta

2

Encontrei uma maneira simples de resolver seu problema. Você deve usar o bloco server adicional para filtrar IPs. Então, sua configuração deve se parecer com esta:

# TCP proxying with SSL passthrough & vhosts
stream {
        map $ssl_preread_server_name $name {
            public.example.com      public;
            private.example.com     private;
            default                 default_upstream;
        }

        upstream public {
                server 10.0.0.2:443;
        }

        upstream private {
                #server 10.0.0.3:443;
                server 127.0.0.1:444;
        }

        upstream default_upstream {
                server 10.0.0.4:443;
        }

        server {
                listen      444;
                proxy_pass  10.0.0.3:443;
                ssl_preread on;
                deny  192.168.1.1;
                allow 192.168.1.0/24;
                allow 10.1.1.0/16;
                deny  all;
        }

        server {
                listen      443;
                proxy_pass  $name;
                ssl_preread on;
        }
}
    
por 02.06.2017 / 20:33

Tags