====== Passo-a-Passo Conexão SSH via Cloudflare Zero Trust ====== by Alicino Moura Updated on Jan 14th, 2025 **Considerações Iniciais** Este passo-a-passo se refere a conexão a um servidor remoto através do protocolo SSH utilizando o recurso da Cloudflare Zero Trust. Os passos são um modelo adaptado da documentação disponível no link abaixo. Este é um dos modelos disponíveis dentro da solução de Zero Trust que pode ser utilizado. A Cloudflare recomenda outros 3 modelos que podem ser verificados aqui. Vale lembrar que a Cloudflare não recomenda o acesso via SSH através de usuário/senha, portanto iremos abordar aqui apenas o modelo com par de chaves pública/privada como forma de imprimir segurança no processo. Documentação oficial: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-warp-to-tunnel/ ---- ===== 1. Criação dos pares de chaves SSH ===== Abra o terminal da máquina cliente Linux e faça a criação do par de chaves SSH Exemplo: ''ssh-keygen -t rsa -f ~/.ssh/chave-ssh-ztna -C '' Não necessita entrar nenhum dado adicional se não desejar, como passphrase e etc. Verifique a criação das chaves com o comando: ''ls -lrt ~/.ssh/'' Em seguida veja o conteúdo da chave pública criada (arquivo com extensão .pub) ''cat ~/.ssh/chave-ssh-ztna.pub'' Guarde este dado. Iremos copiá-lo para o servidor que iremos nos conectar mais adiante. ---- ===== 2. Criação da Máquina Virtual "servidor" para conexão (opcional) ===== Esta ação é opcional, caso já tenha criado o servidor para esta finalidade. Caso ainda não tenha, verifique o modelo de criação dentro do ambiente que está hospedando, como por exemplo: Google Cloud: https://cloud.google.com/compute/docs/create-linux-vm-instance Azure: https://learn.microsoft.com/en-us/azure/virtual-machines/linux/quick-create-portal?tabs=ubuntu AWS EC2: https://aws.amazon.com/getting-started/launch-a-virtual-machine-B-0/ Oracle Cloud: https://docs.oracle.com/en-us/iaas/Content/GSG/Reference/overviewworkflow.htm Observação: A Cloudflare não dá suporte a esta etapa por ser de terceiros **Importante:** após a criação do servidor, verifique como importar a chave pública ao servidor. Cada modelo cloud trabalha de uma forma diferente. Para servidores on-prem existem diversos métodos como copiar e cola dentro da pasta ''~/.ssh/'' ou efetuando o comando ''ssh-copy-id username@server_address'' caso tenha acesso direto a ele. Para qualquer caso se informe com o devops de sua empresa. ---- ===== 3. Conectar o servidor a Cloudflare (cloudflared tunnel) ===== O próximo passo é criar uma conexão via tunnel do servidor criado no seu ambiente cloud ou on-prem com a Cloudflare. Para isso iremos utilizar o cloudflared. Acesse o seu painel de gerenciamento da Cloudflare em https://dash.cloudflare.com e efetue o login. Em seguida vá no menu lateral esquerdo e clique na sequência: //**Zero Trust > Networks > Tunnels > + Create a Tunnel**// Defina um nome para o túnel que você está criando. Selecione a opção do Sistema Operacional Linux (Debian ou Red Hat), em seguida a arquitetura (32 ou 64 bit) e copie o comando disponível no quadrado em cinza, lado esquerdo, conforme abaixo: Por questão de segurança, todo o comando não será exibido, mas sim copiado. {{ :ztna-ssh-01.png?direct&600 |}} Execute este comando no terminal do servidor e aguarde o retorno de que foi executado com sucesso. Vide exemplo: {{ :ztna-ssh-02.png?direct&600 |}} Neste momento você verá dentro do ambiente do túnel uma conexão criada na parte inferior da tela, conforme abaixo. {{ :ztna-ssh-03a.png?direct&600 |}} AQUI! Clique na aba "//Private Networks//" e insira o IP e CIDR do servidor que deseja se conectar. **Importante:** * O IP deve ser da rede interna do seu ambiente (caso tenha mais que um). * Para conexão de uma máquina apenas, informe o IP com o CIDR /32 (1 host) {{ :ztna-ssh-04.png?direct&600 |}} Clique em "//Save tunnel//" no lado direito, na parte inferior da tela. Você verá o seu tunnel na listagem (caso tenha mais já criados) Exemplo: {{ :ztna-ssh-05.png?direct&600 |}} ---- ===== 4. Conexão da máquina cliente (opcional) ===== Esta etapa é sobre a criação do WARP dentro da máquina do cliente para acesso ao servidor através do controle da rede da Cloudflare. Caso não tenha executado ainda, siga os passos abaixo: Para registrar seu dispositivo usando a GUI WARP (Windows, macOS ou Linux): * Baixe e instale o cliente WARP. Clique aqui para download. * Inicie o cliente WARP. * Selecione o logotipo do Cloudflare na barra de menu. * Selecione o ícone de engrenagem. * Vá para Preferences > Account * Selecione Login com Cloudflare Zero Trust * Insira o nome da sua equipe * Conclua as etapas de autenticação exigidas pela sua organização. Após a autenticação, você verá uma página de sucesso e uma caixa de diálogo solicitando que você abra o WARP. * Selecione Abrir Cloudflare WARP.app para concluir o registro. O dispositivo agora está protegido pelas políticas Zero Trust da sua organização. Vamos agora adicionar Permissões de registro de dispositivos. No menu lateral esquerdo, vá em //**Zero Trust > Settings > Warp Client**// Clique em //"Device enrollment permissions"// e em seguida em //"Manage"// {{ :ztna-ssh-06.png?direct&600 |}} Na aba de "Rules", vamos criar uma regra de autenticação (provisória por enquanto). Clique em " + Add a rule " Dê um nome em //"Rule name"// Em //"Rule Action"// defina como //"Allow"// No Include, faça conforme o modelo abaixo: Selector: //Emails ending in// Value: ''@empresa.com.br'' (exemplo - favor verificar) Clique em //"Save"// do lado esquerdo, caixa em azul. {{ :ztna-ssh-07.png?direct&600 |}} ---- ===== 5. Rotear IPs da rede privada através do WARP (agente) ===== Esta etapa é importante, pois habilita ou bloqueia as redes dentro da conexão do ambiente pelo Warp. Por padrão, o WARP exclui o tráfego destinado aos endereços IPs usados em redes privadas e não acessíveis pela Internet. Para que tenha tráfego dentro de sua rede privada, devemos configurar um modelo de Split Tunnels para que o IP/CIDR de sua rede privada seja roteada por meio do Warp. Verifique o modo de //Split Tunnels// no seu ambiente de rede. Vá no menu lateral esquerdo em //**Zero Trust > Settings > Warp Client**// Vá em //Device Settings//, veja o modelo //Default// criado e clique nos __três pontos__ e em seguida //"Configure"// {{ :ztna-ssh-08.png?direct&600 |}} Role a tela até a opção //"Split Tunnels"// e veja se está ativa a opção //"Exclude IPs and domains"// igual ao modelo abaixo. Em seguida clique em //"Manage"// em azul do lado direito. {{ :ztna-ssh-09.png?direct&600 |}} Verifique os ranges de IPs listado. Caso o IP do seu servidor esteja dentro de algum range, clique na opção e delete ele da lista para que o Warp possa trafegar com este endereço. Neste meu exemplo (vide abaixo), foi necessário deletar o range 10.0.0.0/8, pois o meu servidor possui o IP **10.206.xx.xx** Clique o item, vá mais acima, escolha //Action// e //Confirm delete// (1 selected) {{ :ztna-ssh-10.png?direct&600 |}} ---- ===== 6. Conexão com usuário ===== Agora iremos realizar a conexão ao servidor através da máquina cliente que instalamos o Warp. Em resumo, nós realizamos as atividades: - Criamos uma chave de segurança para estabelecer a conexão segura; - Criamos a instância (servidor) para qual iremos nos conectar e copiamos a chave pública SSH para ela - Estabelecemos a conexão do servidor à Cloudflare via cloudflared (tunnel) - Instalamos e configuramos o Warp na máquina cliente - Realizamos o split de tunnel para redes privadas no tráfego dentro da Cloudflare E agora vamos realizar a conexão ao servidor. Utilizando o PuTTY, um terminal do ambiente (tipo WSL) ou similar, digitamos o comando abaixo: ''ssh -i ~/.ssh/chave-ssh-ztna @'' Lembre-se: o IP do servidor é sempre o IP interno da rede privada. Geralmente começando com 10.x.x.x ou 172.16.x.x ou 192.168.x.x Realizando todas estas etapas, o servidor receberá a solicitação e irá dar entrada ao ambiente pelo terminal utilizando os pares de chaves SSH gerados na etapa 1. ---- --- //[[alicino@tiorfas.com|Alicino M]] 2025/01/14 15:33//