Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Sessões de NETCONF sobre HTTPS de saída

RESUMO Os aplicativos do cliente podem estabelecer sessões de protocolo de configuração de rede (NETCONF) usando HTTPS de saída em dispositivos suportados que executam o Junos OS Release 20.2.

Este tópico discute como estabelecer sessões netconf usando HTTPS de saída em dispositivos que executam o Junos OS Release 20.2. Para obter informações sobre o estabelecimento de sessões netconf e shell usando HTTPS de saída aprimorado, consulte NETCONF e Shell Sessions em HTTPS de saída aprimorado.

Entendendo as sessões do NETCONF em HTTPS de saída

Benefícios das sessões da NETCONF em HTTPS de saída

  • Habilite os aplicativos de clientes netconf 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 do NETCONF Sessions overbound HTTPS

Você pode estabelecer sessões netconf em HTTPS de saída entre dispositivos Junos suportados e um sistema de gerenciamento de rede. Uma sessão de NETCONF 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 com suporte, o Junos OS inclui um aplicativo Juniper Extension Toolkit (JET) que oferece suporte para estabelecer uma sessão NETCONF 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 sobre HTTPS NETCONF Sessions over Outbound HTTPS de saída

Nesse cenário, o servidor gRPC atua como o cliente NETCONF, e o aplicativo JET é o cliente gRPC e servidor NETCONF. 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 solicitada é estabelecida sobre essa conexão. As operações do NETCONF são executadas 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 sobre HTTPS de saída em dispositivos Junos suportados, o servidor gRPC deve ter um certificado X.509 válido.

O recurso HTTPS de saída básico oferece suporte para se conectar a um único cliente HTTPS de saída e configurar um servidor gRPC para esse cliente. A autenticação do servidor deve usar um certificado X.509 auto-assinado. Você pode estabelecer uma única sessão NETCONF sobre a conexão.

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

Em uma sessão netconf sobre HTTPS de saída, o servidor gRPC em execução no sistema de gerenciamento de rede atua como o cliente NETCONF, e o aplicativo JET no dispositivo Junos é o cliente gRPC e servidor NETCONF.

O cliente e o servidor gRPC executam as seguintes ações para estabelecer uma sessão NETCONF 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.

  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. A sessão netconf está estabelecida.

  7. O servidor e o cliente trocam mensagens NETCONF <hello> .

  8. O aplicativo cliente NETCONF realiza as operações conforme necessário.

Como estabelecer uma sessão netconf sobre HTTPS de saída

Você pode usar o aplicativo JET que está incluído como parte da imagem do software Junos para estabelecer uma sessão NETCONF sobre HTTPS de saída entre um sistema 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 é executado por essa conexão HTTPS. Nesse cenário, o servidor gRPC é o cliente NETCONF, e o aplicativo JET é o cliente gRPC e o servidor NETCONF.

O hardware e o software a seguir são necessários para estabelecer uma sessão NETCONF sobre HTTPS de saída:

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

  • Dispositivo que executa o Junos OS com versão FreeBSD 20.2 atualizada que também oferece suporte à execução de aplicativos JET

    Nota:

    Para dispositivos suportados, veja sessões do Feature Explorer NETCONF em HTTPS de saída.

A Figura 2 ilustra a configuração mencionada nas tarefas a seguir.

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

Antes que o cliente e o servidor possam estabelecer uma sessão netconf 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 deve ser auto-assinado.

  • 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.

  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 do cliente e informações sobre sua identidade.
  4. Gere o certificado.

    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.
  6. (Opcional) Copie o arquivo server.crt no /var/db/scripts/jet directory no dispositivo que executa o Junos OS para usar o arquivo de certificado para autenticação.
    Nota:

    Você pode omitir essa etapa se o tamanho da chave for menor ou igual a 4096 bits e, em vez disso, configurar o conteúdo do certificado no argumento do trusted_certs aplicativo JET no dispositivo Junos.

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.
  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.
  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 as operações da NETCONF conforme apropriado.

Configure a conta do usuário para o usuário netconf

Para estabelecer uma sessão netconf 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 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 em HTTPS de saída.

Configure o cliente HTTPS de saída

O aplicativo JET pode se conectar a apenas um cliente HTTPS de saída. Você configura as informações de conexão e autenticação para o cliente como argumentos de linha de comando para o script JET. A Tabela 1 descreve os argumentos.

Tabela 1: Argumentos nc_grpc_app.py

Argumento

Valor

--device Ou -d

O nome de host ou endereço IPv4 do servidor gRPC ao qual o aplicativo JET se conecta. O valor do argumento deve corresponder ao nome de host no campo nome comum (CN) ou ao endereço IP no campo de endereço IP SubjectAltName no certificado do servidor gRPC.

--port Ou -p

(Opcional) Porta na qual o aplicativo JET tenta se conectar ao servidor gRPC. Omite esse argumento para usar a porta padrão 443.

--trusted_certs Ou -ts

(Opcional) O conteúdo do certificado do servidor gRPC entre as -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- linhas e omitindo qualquer nova linha.

Você pode omitir esse argumento se, em vez disso, copiar o certificado para o /var/db/scripts/jet directory no dispositivo. Você deve copiar o certificado no dispositivo para ter tamanhos de chave superiores a 4096 bits.

Antes de começar, você precisará dos valores para os argumentos de script, incluindo:

  • 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 entre -----BEGIN CERTIFICATE----- e -----END CERTIFICATE-----, omitindo qualquer nova linha. Essas informações só são necessárias quando você configura o conteúdo do certificado como um argumento de script em vez de copiar o certificado para o dispositivo que executa o Junos OS.

Para configurar o cliente HTTPS de saída:

  1. Navegue até a hierarquia do aplicativo de serviços de extensão nc_grpc_app.py .
  2. Configure os argumentos que são passados para o aplicativo quando ele começar.
  3. Confirmar a configuração.

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 sobre HTTPS de saída incluem um aplicativo JET e arquivos de suporte na imagem do software. A Tabela 2 descreve os arquivos, que estão localizados no /var/db/scripts/jet directory no dispositivo.

Tabela 2: Arquivos JET para sessões em HTTPS de saída

Arquivos

Descrição

nc_grpc_app.py

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_pb2.py

nc_grpc_pb2_grpc.py

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. Navegue até a hierarquia do aplicativo de serviços de extensão.
  5. Configure o aplicativo para ser executado em segundo plano como um processo daemonizado.
  6. Configure o aplicativo para recarregar na saída normal.
  7. Configure o nome de uso sob cujos privilégios o aplicativo executa e as operações netconf são realizadas.
  8. Confirmar a configuração.

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

  9. 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.

Inicie a sessão netconf

O servidor gRPC em execução no sistema de gerenciamento de rede atua como o cliente NETCONF, e o aplicativo JET no dispositivo Junos atua como o cliente gRPC e servidor NETCONF. 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, a sessão netconf começa automaticamente.

Para estabelecer uma sessão netconf em HTTPS de saída:

  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.

    A sessão netconf começa automaticamente.

  2. Verifique se a sessão foi estabelecida com sucesso ao revisar a saída.

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

  3. Realize as operações do NETCONF conforme necessário.
  4. Quando terminar a sessão, digite Ctrl+C.
  5. 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.