Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Sessões de NETCONF e Shell em HTTPS de saída aprimorado

RESUMO Os aplicativos do cliente podem estabelecer sessões de protocolo de configuração de rede (NETCONF) e sessões de shell usando HTTPS de saída aprimorado em dispositivos Junos suportados.

Entendendo as sessões de NETCONF e Shell em HTTPS de saída aprimorado

Benefícios das sessões netconf e shell em HTTPS de saída

  • Habilite o NETCONF ou os aplicativos de clientes shell para gerenciar dispositivos que não são acessíveis por meio de outros protocolos.

  • Habilite o gerenciamento remoto de dispositivos usando autenticação baseada em certificados para o cliente HTTPS de saída.

Visão geral da NETCONF e Shell sobre HTTPS de saída

Você pode estabelecer sessões netconf e shell sobre HTTPS de saída entre dispositivos Junos suportados e um sistema de gerenciamento de rede. Uma SESSÃO NETCONF ou shell sobre HTTPS de saída permite que você gerencie dispositivos que podem não estar acessíveis remotamente por meio de outros protocolos, como o SSH. Isso pode acontecer, por exemplo, se o dispositivo estiver por trás de um firewall, e o firewall ou outra ferramenta de segurança bloquear esses protocolos. O HTTPS, por outro lado, usa uma porta padrão, que normalmente é permitida a saída na maioria dos ambientes.

Em dispositivos suportados, a imagem do software Junos inclui um aplicativo Juniper Extension Toolkit (JET) que oferece suporte ao estabelecimento de uma sessão NETCONF ou shell usando HTTPS de saída. O aplicativo JET usa a estrutura gRPC para se conectar ao cliente HTTPS de saída, que consiste em um servidor gRPC em execução no sistema de gerenciamento de rede. gRPC é uma estrutura de chamada de procedimento remoto (RPC) agnóstica e de código aberto. A Figura 1 ilustra a configuração DE HTTPS de saída em sua forma mais simples.

Figura 1: Sessões de NETCONF e Shell sobre HTTPS NETCONF and Shell Sessions over Outbound HTTPS de saída

Nesse cenário, o servidor gRPC atua como o cliente NETCONF/shell, e o aplicativo JET é o cliente gRPC e o servidor NETCONF/shell. O servidor gRPC ouve as solicitações de conexão na porta especificada, que é padrão para a porta 443. Você configura o aplicativo JET como um serviço de extensão. As informações relevantes de conexão e autenticação são passadas para o script. Enquanto o script é executado, ele tenta automaticamente se conectar ao servidor gRPC no host e porta configurados.

O aplicativo JET e o servidor gRPC estabelecem uma conexão HTTPS persistente em uma sessão de gRPC criptografada por TLS. O aplicativo JET autentica o servidor gRPC usando um certificado digital X.509 e, se a autenticação for bem sucedida, a sessão netconf ou shell solicitada é estabelecida sobre essa conexão. As operações do NETCONF e os comandos de shell são executados sob os privilégios de conta do usuário configurado para o aplicativo de serviço de extensão.

A conexão HTTPS de saída usa um certificado digital X.509 para autenticar o servidor gRPC. Um certificado digital é um meio eletrônico para verificar sua identidade por meio de um terceiro confiável, conhecido como autoridade de certificado ou autoridade de certificação (CA). Uma autoridade de certificado emite certificados digitais, que podem ser usados para estabelecer uma conexão segura entre dois endpoints por validação de certificados. O padrão X.509 define o formato do certificado. Para estabelecer uma sessão NETCONF ou shell sobre HTTPS de saída em dispositivos Junos suportados, o servidor gRPC deve ter um certificado X.509 válido.

O HTTPS de saída aprimorado oferece suporte para:

  • Conectando-se a vários clientes HTTPS de saída

  • Configuração de vários servidores gRPC de backup para cada cliente HTTPS de saída

  • Estabelecendo várias sessões simultâneas de NETCONF e shell com um determinado cliente

  • Autenticando o cliente HTTPS de saída usando certificados digitais X.509 auto-assinados ou assinados por CA

  • Autenticando o dispositivo Junos usando um segredo compartilhado

Fluxo de trabalho de conexão para sessões em HTTPS de saída aprimorado

Em uma sessão netconf ou shell sobre HTTPS de saída, o servidor gRPC em execução no sistema de gerenciamento de rede atua como o cliente NETCONF/shell, e o aplicativo JET no dispositivo Junos é o cliente gRPC e servidor NETCONF/shell. Você pode configurar vários clientes HTTPS de saída e configurar um ou mais servidores gRPC de backup para cada cliente. O aplicativo JET se conecta a apenas um servidor gRPC na lista de servidores do cliente a qualquer momento.

O cliente e o servidor gRPC executam as seguintes ações para estabelecer uma SESSÃO NETCONF ou shell sobre HTTPS de saída:

  1. O servidor gRPC ouve as conexões de entrada na porta especificada, ou se nenhuma porta for especificada, na porta padrão 443.

  2. O cliente gRPC inicia uma conexão TCP/IP com o servidor e a porta gRPC configurados. Se você configurar um cliente HTTPS de saída com um ou mais servidores gRPC de backup, o cliente gRPC tenta se conectar a cada servidor da lista até que ele estabeleça uma conexão.

  3. O cliente gRPC envia uma mensagem de TLS ClientHello para iniciar o processo de aperto de mão do TLS.

  4. O servidor gRPC envia uma ServerHello mensagem e seu certificado.

  5. O cliente gRPC verifica a identidade do servidor gRPC.

  6. O cliente gRPC envia o ID do dispositivo e o segredo compartilhado configurado para esse cliente HTTPS de saída para o servidor gRPC.

  7. O cliente HTTPS de saída solicita uma sessão NETCONF ou shell, e o servidor gRPC usa o ID do dispositivo e segredo compartilhado para autenticar o dispositivo Junos. Se a autenticação for bem sucedida, a sessão será estabelecida.

  8. Se uma sessão netconf for solicitada, o servidor e o cliente trocam mensagens NETCONF <hello> .

  9. O aplicativo NETCONF ou shell client realiza as operações conforme necessário.

O cliente gRPC inicia outra conexão TCP/IP com o mesmo servidor gRPC, e o cliente e servidor gRPC repetem o processo, o que permite que o cliente HTTPS de saída estabeleça várias sessões netconf e shell com o dispositivo de rede.

Como estabelecer sessões de NETCONF e Shell em HTTPS de saída aprimorado

Você pode usar o aplicativo JET que está incluído como parte da imagem do software Junos para estabelecer sessões NETCONF e shell sobre HTTPS de saída entre sistemas de gerenciamento de rede (NMS) e dispositivos Junos suportados. O aplicativo JET, configurado como um serviço de extensão, inicia uma conexão a um servidor gRPC em execução em um NMS e estabelece uma conexão HTTPS persistente em uma sessão gRPC criptografada por TLS. A sessão netconf ou shell é executado por essa conexão HTTPS. Nesse cenário, o servidor gRPC é o cliente NETCONF/shell, e o aplicativo JET é o cliente gRPC e o servidor NETCONF/shell.

O hardware e o software a seguir são necessários para estabelecer sessões em HTTPS de saída aprimorado:

  • Sistema de gerenciamento de rede que executa Python 3.5 ou posterior

  • Dispositivo que executa o Junos OS Evolved ou dispositivo que executa o Junos OS com versão FreeBSD atualizada 20.3 ou posterior que também oferece suporte à execução de aplicativos JET

    Nota:

    Para dispositivos compatíveis, veja Feature Explorer.

A Figura 2 ilustra a configuração mencionada nas tarefas a seguir. O nome da interface de gerenciamento no dispositivo Junos varia dependendo da plataforma e do SO.

Figura 2: NETCONF sobre topologia NETCONF over Outbound HTTPS Topology HTTPS de saída

Antes que o cliente e o servidor possam estabelecer uma netconf ou sessão de shell sobre HTTPS de saída, você deve satisfazer os requisitos discutidos nas seguintes seções:

Obtenha um certificado X.509 para o servidor gRPC

A conexão HTTPS de saída usa um certificado de chave pública X.509 para autenticar a identidade do servidor gRPC em execução no sistema de gerenciamento de rede. A pilha de gRPC oferece suporte ao formato de certificado x.509 v3.

Os requisitos para o certificado do servidor gRPC são:

  • O certificado pode ser autoassinado ou assinado por uma autoridade de certificado (CA).

  • O certificado deve definir o nome de host do servidor gRPC no campo nome comum (CN), ou deve definir o endereço IP do servidor gRPC no campo endereço IP SubjectAltName (SAN). O dispositivo Junos deve usar o mesmo valor para estabelecer a conexão com o servidor. Se o certificado definir o campo endereço IP SubjectAltName, o dispositivo ignorará o campo Nome Comum durante a autenticação.

  • O certificado deve ser codificado por PEM e usar uma extensão .crt .

  • O certificado e sua chave devem ser nomeados servidor.crt e server.key, respectivamente.

Usar o OpenSSL para obter um certificado:

  1. Gere uma chave privada e especifique o comprimento da chave em bits.
    Nota:

    Recomendamos o uso de 3072 bits ou superior para o tamanho da chave privada. O comprimento da chave não deve exceder 4096 bits.

  2. Se você estiver se conectando ao endereço IP do servidor gRPC, atualize seu arquivo de configuração aberto.cnf ou equivalente para definir a subjectAltName=IP extensão com o endereço do servidor gRPC.
  3. Gere uma solicitação de assinatura de certificado (CSR), que contém a chave pública e as informações da entidade sobre sua identidade.
  4. Gere o certificado fazendo um dos seguintes:
    • Envie o CSR a uma autoridade de certificado para solicitar um certificado X.509 e forneça o arquivo de configuração para incluir quaisquer extensões adicionais.

    • Assine o CSR com um CA para gerar o certificado do cliente e inclua a opção -extfile se você precisar consultar seu arquivo de configuração e extensões.

    • Assine o CSR com a chave do servidor para gerar um certificado de cliente auto-assinado e inclua a opção -extfile se você precisar consultar seu arquivo de configuração e extensões.

  5. Verifique se o campo e as extensões de nome comum (CN), se fornecidos, estão corretos.

Configure o servidor gRPC

O sistema de gerenciamento de rede requer o seguinte software:

  • Python 3.5 ou posterior

O sistema de gerenciamento de rede e o aplicativo JET no dispositivo Junos usam a estrutura gRPC para estabelecer uma conexão HTTPS persistente em uma sessão de gRPC criptografada por TLS. O sistema de gerenciamento de rede deve ter a pilha gRPC instalada e executar um servidor gRPC que ouça a porta especificada para a solicitação de conexão. A Juniper Networks fornece os arquivos protode definição necessários e arquivos de aplicativo de servidor gRPC de amostra no repositório da Juniper Networks netconf-https-outbound no GitHub.

Esta seção configura o servidor gRPC em um sistema de gerenciamento de rede que executa o Ubuntu 18.04. Se você estiver executando um sistema operacional diferente, use os comandos apropriados para o seu SO.

Para configurar o servidor gRPC em um sistema de gerenciamento de rede que executa o Ubuntu 18.04:

  1. Instale pip para Python 3.
  2. Instale o grpcio pacote.
  3. Instale o grpcio-tools pacote.
    Nota:

    Se você encontrar erros de instalação para os grpcio ou grpcio pacotes, tente instalar a versão mais recente.

  4. Acesse o repositório do Juniper GitHub em https://github.com/Juniper/netconf-https-outbound e selecione o diretório correspondente à versão em execução no dispositivo Junos.

    Lançamento

    Diretório

    Versão Junos OS 20.3R1 ou posterior

    20.3

    Junos OS Evolved Release 22.4R1 ou posterior

    junos evoluído/22.4

  5. Baixe o aplicativo e os arquivos proto no diretório gitHub para o diretório no sistema de gerenciamento de rede onde reside o certificado do servidor gRPC.
    1. Selecione cada arquivo, clique no botão Raw e copie a URL para o arquivo.

    2. Baixe o arquivo usando a URL com a ferramenta de download de sua escolha, por exemplo, wget ou curl.

  6. Use o compilador protocbuffer de protocolo para compilar cada arquivo proto-definição e gerar código Python, que produz dois arquivos de saída para cada arquivo proto.

    Por exemplo:

  7. Inicie o servidor gRPC e especifique a porta para a conexão, se ela for diferente da porta padrão 443.
    Nota:

    Você pode precisar executar o script com permissões raiz para ouvir na porta 443.

O servidor gRPC ouve indefinidamente a porta especificada para conexões de entrada. Depois de configurar o dispositivo Junos para se conectar ao servidor gRPC e uma conexão e sessão forem estabelecidas, você pode realizar operações netconf ou comandos de shell conforme apropriado.

Configure a conta do usuário para o usuário NETCONF ou Shell

Para estabelecer uma sessão netconf ou shell sobre HTTPS de saída, você deve criar uma conta de usuário localmente no dispositivo Junos. Você usa essa conta para realizar as operações netconf ou shell no dispositivo para essa sessão. O aplicativo JET é executado usando as permissões configuradas para esta conta.

Para criar uma conta de usuário em um dispositivo Junos:

  1. Configure a user declaração com um nome de usuário exclusivo e inclua a class declaração para especificar uma aula de login que tenha as permissões necessárias para que todas as ações sejam realizadas pelo usuário. Por exemplo:
  2. (Opcional) Configure as declarações e full-name as uid declarações para especificar uma ID de usuário única e o nome do usuário.
  3. Comprometa a configuração para ativar a conta do usuário no dispositivo.
  4. Repita as etapas anteriores em cada dispositivo Junos, onde o cliente precisa estabelecer sessões NETCONF ou shell em HTTPS de saída.

Configure os clientes HTTPS de saída

O HTTPS de saída aprimorado permite configurar vários clientes HTTPS de saída no nível de [edit system services outbound-https] hierarquia e configurar vários servidores gRPC de backup para cada cliente. O aplicativo JET se conecta a apenas um servidor gRPC na lista de servidores do cliente a qualquer momento.

Antes de configurar o dispositivo, você precisará das seguintes informações:

  • A porta em que o servidor gRPC está ouvindo as conexões.

  • O conteúdo do campo endereço IP SubjectAltName ou se não houver tal campo, o conteúdo do campo nome comum (CN) no certificado do servidor gRPC.

  • O conteúdo do certificado do servidor gRPC, se ele for auto-assinado ou o conteúdo dos certificados ca, se o certificado do servidor for autenticado usando uma cadeia de certificados.

Para configurar um cliente HTTPS de saída:

  1. Navegue até a hierarquia de clientes HTTPS de saída e defina um identificador que identifique o cliente HTTPS de saída com exclusividade.
  2. Defina o identificador do dispositivo, que é uma corda definida pelo usuário que o servidor gRPC usa para identificar e autenticar o dispositivo Junos durante o estabelecimento da sessão.
  3. Defina uma string secreta compartilhada, que é uma corda definida pelo usuário que o servidor gRPC usa para autenticar o dispositivo Junos durante o estabelecimento da sessão.

    O dispositivo armazena a string secreta compartilhada como um valor criptografado no banco de dados de configuração.

  4. (Opcional) Definir o método usado para restabelecer uma conexão HTTPS de saída desconectada como sticky ou in-order.
  5. (Opcional) Defina o tempo em segundos que o cliente gRPC espera entre as tentativas de conexão à lista de servidores do cliente HTTPS de saída.
  6. Configure o nome de host ou o endereço IPv4 para um ou mais servidores gRPC e a porta em que o servidor está ouvindo solicitações de conexão HTTPS de saída.

    O nome de host ou endereço IP deve corresponder ao valor do campo de Nome Comum (CN) ou ao campo endereço IP SubjectAltName, respectivamente, no certificado do servidor gRPC.

  7. Para cada servidor gRPC, configure a trusted_cert declaração com as informações do certificado necessárias para autenticar o servidor.
    • Se o certificado do servidor for auto-assinado, configure o conteúdo do certificado do servidor gRPC, server.crt, omitindo quaisquer novas linhas.

    • Se o certificado do servidor for autenticado usando uma cadeia de certificados, concatene quaisquer certificados de CA intermediários e CA raiz nessa ordem, remova todas as novas linhas e configure a string única resultante.

    Nota:

    Para gerar facilmente o valor para a trusted_cert declaração, você pode condensar os certificados apropriados na ordem necessária e remover quaisquer novas linhas, por exemplo, usando um comando semelhante ao seguinte:

  8. Repita as etapas anteriores para cada cliente HTTPS de saída que gerenciará o dispositivo Junos.
  9. Confirmar a configuração.
Nota:

Se o serviço de extensão HTTPS de saída já estiver em execução, e você adicionar, excluir ou modificar um cliente HTTPS de saída e confirmar a configuração, você não precisa reiniciar o serviço para que as mudanças entrem em vigor. Eles são recolhidos automaticamente.

Configure o serviço de extensão HTTPS de saída em dispositivos Junos

Os lançamentos do Junos que oferecem suporte a sessões netconf e shell sobre HTTPS de saída incluem um aplicativo JET e arquivos de suporte na imagem do software. A Tabela 1 descreve os arquivos, que estão localizados no /var/db/scripts/jet directory no dispositivo.

Tabela 1: Arquivos JET para sessões sobre HTTPS de saída aprimorado

Arquivo

Descrição

nc_grpc_app.pyc

Aplicativo JET que usa a estrutura gRPC para estabelecer uma conexão HTTPS persistente com um servidor gRPC em execução no sistema de gerenciamento de rede.

nc_grpc_app_lib.pyc

Bibliotecas necessárias

Para configurar o dispositivo Junos para sessões em HTTPS de saída:

  1. Verifique se o aplicativo JET e os arquivos relacionados estão presentes no dispositivo.
  2. Insira o modo de configuração.
  3. Habilite o dispositivo para executar aplicativos Python 3 não assinados.
  4. Configure notificações de serviços de extensão para o endereço de loopback.
  5. Navegue até a hierarquia do aplicativo de serviços de extensão.
  6. Configure o aplicativo para ser executado em segundo plano como um processo daemonizado.
  7. Configure o aplicativo para recarregar na saída normal.
  8. Configure o nome de uso sob cujos privilégios o aplicativo executa e as operações netconf e comandos shell são executados.
  9. Confirmar a configuração.

    Quando você confirma a configuração, a opção daemonize faz com que o aplicativo comece automaticamente.

  10. Verifique se o aplicativo está sendo executado.

Após o início do aplicativo com sucesso, ele registra mensagens no arquivo outbound_https.log .

Nota:

Se o aplicativo não começar automaticamente após confirmar a configuração, analise as mensagens de log relacionadas a este aplicativo para solucionar problemas. No Junos OS, emita o show log jet.log comando. No Junos OS Evolved, emita e show trace application cscript comanda show log messages .

Inicie a sessão NETCONF ou Shell

O servidor gRPC em execução no sistema de gerenciamento de rede atua como o cliente NETCONF/shell, e o aplicativo JET no dispositivo Junos atua como o cliente gRPC e servidor NETCONF/shell. Depois de iniciar o servidor gRPC e o aplicativo JET, o aplicativo JET tenta se conectar ao servidor gRPC na porta especificada. Se a conexão for bem sucedida, o cliente gRPC autentica o servidor gRPC. Se a autenticação do servidor for bem sucedida, você pode solicitar uma ou mais sessões netconf ou shell.

Antes de começar, você precisará das seguintes informações:

  • O identificador de dispositivos e a string secreta compartilhada configurada para o cliente HTTPS de saída

Para estabelecer uma sessão NETCONF ou shell sobre HTTPS de saída aprimorado:

  1. No sistema de gerenciamento de rede, se você ainda não iniciou o servidor gPRC, inicie o servidor e especifique a porta para a conexão.
  2. Para estabelecer uma ou mais sessões com um dispositivo Junos, execute o script request_session.py . Especifique o tipo de sessão, bem como a ID do dispositivo e o segredo compartilhado que você configurou para esse cliente HTTPS de saída no dispositivo Junos. Por exemplo:
    • Para solicitar uma sessão de csh, que é o padrão, você não precisa especificar um tipo de sessão.

    • Para solicitar uma sessão netconf, inclua a opção -s netconf .

    Se o servidor autenticar com sucesso o dispositivo Junos, a sessão solicitada começará.

  3. Verifique se a sessão está estabelecida ao revisar a saída.
    • As sessões da Shell devem exibir a csh session is started saída, por exemplo:

    • As sessões do NETCONF devem exibir os recursos do NETCONF conforme mostrado aqui:

  4. Realize as operações de NETCONF ou shell conforme necessário.
  5. Quando terminar a sessão, digite Ctrl+C.
  6. Quando você terminar de usar a conexão HTTPS de saída, você pode parar o aplicativo de serviço de extensão no dispositivo Junos excluindo ou desativando a hierarquia relevante na configuração e, em seguida, cometendo a mudança.