O blog da AWS

Conectar-se com segurança à uma instância Linux rodando em uma Amazon VPC privada

Por Mike Pope

Atualizado em 21 de Maio de 2014: Esclarecendo que para o Mac, a chave privada é armazenada em memória e a senha no keychain

Importante: você deve habilitar o forwarding do agente SSH com cuidado. Quando você configura o forwarding do agente, um arquivo socket é criado no forwarding host, que é o mecanismo pelo qual a chave será encaminhada para o seu destino. Outro usuário do sistema com a habilidade de modificar arquivos pode potencialmente usar essa chave para autenticar como você. Veja o manual do SSH para maiores detalhes.

 

Na postagem anterior, Ryan Holland, um Principal Partner Solutions Architect da AWS, mostrou como acessar de forma segura múltiplas instâncias Amazon EC2 Windows atrás de um Windows Remote Desktop Gateway, atuando como um bastion host. Ryan retorna essa semana com um post que foca em bastion hosts para instâncias Linux em uma subnet privada de um Amazon VPC


Neste post, irei mostrar como usar o forwarding do agente SSH para permitir que administradores conectem, de forma segura, em instâncias Linux em uma subnet privada de um Amazon VPC. Essa configuração melhora a segurança, pois você não tem que expor as portas de gerenciamento da sua instância Linux para a internet ou para outra subnet no seu VPC

Por padrão, instâncias EC2 Linux usam arquivos de chave SSH para autenticação no lugar de usuário e senha. Usando o arquivo de chave pode reduzir a chance de alguém tentar adivinhar a senha para ter acesso à instância. Mas usar o par de chaves com um bastion host pode ser um desafio. Conectar-se a instâncias nas subnet privadas exige uma chave privada, mas você nunca deve armazenar chaves privadas no bastion host.

Uma solução é usar o forwarding do agente SSH (ssh-agent) no cliente. Isso permite a um administrador se conectar do bastion host a outra instância sem armazenar a chave privada no bastion host. Essa é a abordagem que discutirei neste post.

Configurando o agente ssh

O primeiro passo para usar o forwarding do agente SSH com uma instância EC2 é configurar um bastion host na sua VPC. Sugerimos que a instância que você use como seu bastion host seja construída especificamente para esse propósito e que você a use somente como bastion host e não para qualquer outra finalidade. O bastion deve ser configurado com um security group e deve ser configurado apenas para escutar a porta SSH (TCP/22). Para maior segurança, você pode fortalecer ainda mais a instância. Discutir hardening em detalhe está além do escopo desta postagem, mas isso envolve tarefas como habilitar o SELinux, usar um servidor syslog remoto para logs e configurar a detecção de intrusões baseada em host. Para obter informações detalhadas, consulte OS Hardening Principles no site etutorials.org.

Lembre-se sempre do seguinte ao configurar seu bastion host:

  • Nunca coloque suas chaves privadas SSH no bastion host. Em vez disso, use o forwarding do agente SSH para se conectar primeiro ao bastion host e daí a outras instâncias em subnets privadas. Isso permite que você mantenha sua chave privada SSH apenas no seu computador.
  • Configure o security group no bastion host para permitir conexões SSH (TCP/22) somente de endereços IP conhecidos e confiáveis.
  • Sempre tenha mais de um bastion host. Você deve ter um bastion host em cada zona de disponibilidade (AZ) onde estão suas instâncias. Se sua implantação utilizar as vantagens de uma VPN VPC, também tenha um bastion host on premises.
  • Configure instâncias Linux em sua VPC para aceitar conexões SSH somente do bastion host.

Configurando o ssh-agent em um Mac

Para usuários de Mac, o ssh-agent já está instalado como parte do sistema operacional. Você pode adicionar suas chaves privadas ao aplicativo keychain usando o comando ssh-add com a opção -K e o arquivo.pem para a chave, conforme mostrado no exemplo a seguir. O agente solicita sua senha, se houver, e armazena a chave privada na memória e a senha em seu keychain.

ssh-add -K myPrivateKey.pem
Enter passphrase for myPrivateKey.pem:
Passphrase stored in keychain: myPrivateKey.pem
Identity added: myPrivateKey.pem (myPrivateKey.pem)

Adicionar a chave ao agente permite que você use o SSH para se conectar a uma instância sem precisar usar a opção –i <keyfile>  ao se conectar. Se você quiser verificar as chaves disponíveis para o ssh-agent, use o comando ssh-add com a opção -L. O agente exibe as chaves que ele armazenou, conforme mostrado no exemplo a seguir:

ssh-add –L

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDHEXAMPLErl25NOrbhgIGQzyO+TYyqbbYEueiEL
cXtOQHgEFpMAb1Nb8SSnlxMxiCXwTKd5/lVnmgcbDwBpe7ayQ6idzjHfvoxPsFrI3QSJVQgyN
cx0RylX9IjcvJOyw== myPrivateKey.pem

Depois que a chave for adicionada ao seu keychain, você poderá se conectar ao bastion host com SSH usando a opção -A. Essa opção permite o forwarding do agente SSH e permite que o agente SSH local responda a um desafio de chave pública quando você usa o SSH para se conectar do bastion host à uma instância de destino em sua VPC.

Por exemplo, para se conectar a uma instância em uma subnet privada, digite o seguinte comando para ativar o forwarding de agentes SSH usando o bastion host:

ssh –A user@<bastion-IP-address or DNS-entry>

Ao se conectar pela primeira vez à instância, verifique se a impressão digital da chave RSA que o bastion host apresentará corresponde à exibida na saída do console da instância. (Para obter instruções sobre como verificar a impressão digital, consulte a documentação do EC2).

Depois de se conectar ao bastion host, use o SSH para se conectar a uma instância específica usando um comando como este:

ssh user@<instance-IP-address or DNS-entry>

Observe que o ssh-agent não sabe qual chave deve usar para uma determinada conexão SSH. Portanto, o ssh-agent testará sequencialmente todas as chaves que estão carregadas no agente. Como as instâncias encerram a conexão após cinco tentativas malsucedidas de conexão, certifique-se de que o agente tenha cinco ou menos chaves. Como cada administrador deve ter apenas uma única chave, isso raramente é um problema para a maioria das implantações. Para obter detalhes sobre como gerenciar as chaves no ssh-agent, use o comando man ssh-agent.

Configurando o ssh-agent no Windows

No Windows, você pode se conectar a instâncias VPC Linux usando PuTTY. Para obter a funcionalidade do agente SSH, você pode usar o Pageant, que está disponível na página de download do PuTTY. Quando o Pageant é instalado, você pode usar a opção de forwarding do agente no PuTTY para se conectar a instâncias em subnet privadas.

Para usar o Pageant, você precisa converter sua chave privada do formato PEM para o formato PuTTY usando o PuTTYgen (disponível na página de download do PuTTY). No PuTTYgen, escolha Conversions > Import Key e selecione sua chave privada formatada em PEM. Digite uma senha e clique em Save private key, conforme mostrado na captura de tela a seguir. Salve a chave como um arquivo .ppk.

Image of saving the private key

Depois de converter a chave privada, abra o Pageant, que é executado como um serviço do Windows. Para importar a chave formatada em PuTTY para o Pageant, clique duas vezes no ícone do Pageant na área de notificação e clique em Add Key. Ao selecionar o arquivo .ppk, será solicitada a senha que você escolheu ao converter a chave, conforme mostrado na captura de tela a seguir.

Screenshot of typing the passphrase

Depois de adicionar a chave, feche a janela Pageant Key List.

Finalmente, ao configurar as conexões para SSH no PuTTY, marque a caixa Allow agent forwarding e deixe o campo Private key file for authentication vazio.

Ao usar o PuTTY para se conectar ao endereço IP público do seu bastion host, você verá que o componente Pageant PuTTY fornece a chave SSH para autenticação, conforme mostrado na captura de tela a seguir.

Screenshot of the Pageant PuTTY component providing the SSH key for authentication

Com o allow agent forwarding ativado na configuração do PuTTY, você pode se conectar do bastion host à qualquer outra instância na VPC sem ter a chave privada SSH no bastion host. Para se conectar a outras instâncias, use o seguinte comando:

ssh user@<instance-IP-address or DNS-entry>

Desde que a chave privada correspondente para a instância seja carregada no Pageant, a conexão será bem-sucedida, conforme mostrado na captura de tela a seguir.

Screenshot of a successful connection

Conclusão

Usando essas informações sobre como configurar bastions host na frente de instâncias Linux em uma VPC, e com a postagem anterior sobre bastion host do Windows, agora você tem ferramentas adicionais para ajudar a melhorar a segurança de suas instâncias EC2, fechando o acesso à Internet às suas portas de gerenciamento.

Se você quiser obter mais informações sobre o SSH forwarding, há um bom tutorial no site Unixwiz.net.

Informe-nos se essas recomendações funcionam em seu ambiente. Estamos sempre buscando aprimorar nossa orientação para dar suporte ao maior número possível de casos de uso de nossos clientes.

– Mike

Quer mais conteúdo prático, notícias e anúncios de recursos sobre segurança da AWS? Siga-nos no Twitter.

 

Este artigo foi traduzido do Blog da AWS em Inglês.


Tradutor

Bruno Formenton Technical Account Manager da AWS com experiencia em administração de sistemas Unix/Linux e cyber segurança

 

 

 

 

Nelson Buarque é TAM na AWS com experiencia em segurança e Network no setor de mineração e telecomunicações. Atualmente auxilia clientes de diversos setores a alcançar uma aceleração no crecimento por meio da cloud além de auxiliar no dia a dia com incidentes.