SSH: Como usar chaves e acessar servidores com segurança
Publicado em 25/09/2023
O acesso SSH com par de chaves muda o patamar de segurança de um servidor, e serve tanto para transferir arquivo quanto para administrar servidor Linux.
O que é SSH e a importância das chaves
SSH, abreviação para Secure Shell, é um túnel seguro dentro de uma internet cheia de ameaças.
É um protocolo de comunicação segura em rede não segura, e é ferramenta diária de administradores de servidores. A autenticação no SSH pode ser feita por senha, mas o que interessa aqui é o par de chaves: uma pública e uma privada. Senha se decifra ou se adivinha; a chave acrescenta uma camada a mais.
Bem gerenciado, esse método praticamente elimina o risco de ataque de força bruta, porque a chave privada, que fica em segredo com o usuário, funciona como uma senha digital.
Par de chaves: pública e privada
As chaves criptográficas são o centro do SSH. Mas o que são essas chaves?
Imagine uma fechadura e uma chave: a chave pública é a fechadura, aberta a todos, e a chave privada é a chave que abre, guardada só por você. A chave pública, como o nome indica, pode ser compartilhada com qualquer pessoa ou servidor, e serve para criptografar informação. A chave privada tem que permanecer secreta e é o que descriptografa a informação criptografada pela chave pública.
O ponto do sistema é que ter a sua chave pública não serve de nada sem a chave privada correspondente. Quando você tenta se conectar a um servidor via SSH, o servidor criptografa uma mensagem com sua chave pública. Se você consegue descriptografá-la com sua chave privada, isso prova sua identidade e o servidor libera o acesso. Tudo isso acontece em milissegundos e autentica você sem senha nenhuma.
Descomplicando
Imagine que você tem uma caixa valiosa que deseja proteger. Esta caixa tem uma fechadura única, e só pode ser aberta com uma chave específica. Em vez de criar uma chave física, você decide fazer algo diferente: cria um molde que qualquer pessoa pode usar para criar uma chave temporária.
Este molde é a sua chave pública. Você pode compartilhá-lo com qualquer pessoa e até mesmo colocá-lo em uma praça pública. As pessoas podem usar este molde para fazer uma chave que consegue fechar a caixa, mas curiosamente, essa chave não pode abri-la novamente, apenas o molde original pode.
Sua chave original, aquela que pode abrir e fechar a caixa, é a chave privada. Você guarda esta chave em um local seguro, onde mais ninguém além de você pode encontrá-la ou usá-la.
Agora, imagine que um amigo quer lhe enviar uma mensagem secreta. Ele pega a mensagem, coloca dentro da caixa e usa o molde da chave pública que você deixou na praça para trancar a caixa. Ele lhe envia a caixa, e você, com sua chave privada, é o único que pode abrir e ler a mensagem.
Este processo garante duas coisas: primeiro, que apenas você pode ler a mensagem, já que apenas sua chave privada pode abrir a caixa. E segundo, que a mensagem realmente veio daquele amigo, pois ele usou o molde de chave que você compartilhou publicamente.
Assim como na parábola, no mundo digital, a chave pública (molde) é usada para criptografar (fechar) informações, e a chave privada é usada para descriptografar (abrir) essas informações. O SSH com par de chaves garante, de forma confiável, a identidade e a segurança das informações trocadas entre máquinas e usuários.
Tipos de chaves criptográficas
Nem toda chave é igual. Vários algoritmos de criptografia geram par de chaves SSH, e cada um tem sua vantagem:
- RSA: um dos mais antigos e mais usados, o RSA se apoia na dificuldade de fatorar números primos grandes. As chaves RSA costumam ter de 2048 a 4096 bits, e 2048 é o tamanho mais comum.
- DSA (DSS): baseado em algoritmos de assinatura digital e padrão em muitos sistemas. Só que ele é limitado a chaves de 1024 bits, hoje consideradas menos seguras.
- ECDSA: usa criptografia de curva elíptica, que oferece segurança parecida com chave mais curta, o que economiza banda.
- ED25519: implementação recente, também de curva elíptica, com segurança alta e chave de tamanho fixo de 256 bits.
A escolha depende da finalidade e da necessidade de segurança. Quem está começando pode ir de RSA ou ED25519, que são amplamente aceitos e sólidos.
Como gerar seu par de chaves
Linux (linha de comando):
- Abra o terminal.
- Digite
ssh-keygen -t rsa -b 4096para criar uma chave RSA de 4096 bits. - Você será solicitado a fornecer um local para salvar as chaves. Pressione Enter para aceitar o local padrão (
~/.ssh/id_rsapara chave privada e~/.ssh/id_rsa.pubpara chave pública). - Uma senha pode ser definida para a chave privada como uma camada adicional de segurança. Se optar por não configurar, pressione Enter.
Windows 10 ou superior (linha de comando com OpenSSH):
- Instale o cliente OpenSSH através das “Funcionalidades Opcionais” nas Configurações do Windows.
- Abra o PowerShell ou CMD.
- Siga as mesmas etapas acima, começando pelo
ssh-keygen.
Windows (via PuTTY):
- Baixe e instale PuTTY e PuTTYgen.
- Abra o PuTTYgen e clique em “Generate”.
- Mova o mouse aleatoriamente na área da janela para gerar entropia.
- Salve a chave pública e privada em locais seguros.
Criar e gerenciar chave SSH é o que mantém o seu acesso seguro. Chave criptográfica bem manejada barra o acesso não autorizado.
Transferência de arquivos com segurança via SSH
O SSH não serve só para acesso remoto e execução de comando. O SCP (Secure Copy Protocol) transfere arquivo com a mesma segurança. Outra opção comum é o SFTP (Secure File Transfer Protocol).
Utilizando SCP no Linux:
Para transferir um arquivo do seu computador local para um servidor remoto:
scp /caminho/local/do/arquivo username@servidor:/caminho/remoto/
Para transferir um arquivo de um servidor remoto para seu computador local:
scp username@servidor:/caminho/remoto/do/arquivo /caminho/local/
Utilizando SCP no Windows (com OpenSSH)
As mesmas instruções do Linux podem ser seguidas no Windows se o cliente OpenSSH estiver instalado.
SFTP para transferências:
Diferente do SCP, que é baseado em comandos, o SFTP abre uma sessão em que você interage, parecido com o FTP tradicional, mas com a segurança do SSH. Depois de conectar com sftp username@servidor, você usa comandos como ls, cd, get (baixar) e put (enviar) para gerenciar e transferir arquivos.
Manter o dado seguro durante a transferência importa tanto quanto ter um acesso seguro, e o SSH dá conta das duas coisas.
Gerenciando e administrando servidores via SSH
O SSH é a ferramenta de quem administra servidor de forma remota. O acesso é seguro e serve para muita coisa. Algumas das tarefas comuns:
Execução remota de comandos:
Você não precisa iniciar uma sessão SSH completa para executar um comando. Por exemplo:
ssh username@servidor 'comando'
Este comando executa o ‘comando’ especificado diretamente no servidor remoto.
Tunelamento e redirecionamento de portas:
O SSH permite criar túneis seguros, que são úteis para encaminhar tráfego de portas específicas. Por exemplo, você pode redirecionar o tráfego de uma porta local para uma porta no servidor remoto.
Monitoramento de servidores:
Com o SSH, você monitora recursos, verifica logs e instala software. Comandos como top ou htop mostram o consumo de recursos em tempo real, e o tail serve para acompanhar log.
Segurança aprimorada com chaves:
Além de usar chaves em vez de senhas, você pode configurar o servidor SSH para recusar conexão por senha, o que força o uso de autenticação por chave.
Configurações personalizadas:
O arquivo de configuração principal do SSH, geralmente em /etc/ssh/sshd_config, aceita bastante personalização. Dá para mudar a porta padrão, limitar quais usuários podem acessar e muito mais.
O SSH, portanto, vai além de executar comando: ele dá conta da administração e do gerenciamento do servidor inteiro.
Boas práticas de segurança ao usar SSH
O SSH é uma ferramenta forte, mas o nível real de segurança depende de como você usa. Algumas medidas para proteger o servidor:
1. Desative o login como root: Evite permitir o acesso direto ao usuário root via SSH. Em vez disso, entre como um usuário normal e eleve seus privilégios com sudo quando necessário.
2. Use autenticação baseada em chave: Como dito acima, par de chaves é mais seguro que senha. Desative a autenticação de senha no arquivo sshd_config com a linha PasswordAuthentication no.
3. Mantenha seu software atualizado: Certifique-se de que seu servidor SSH esteja sempre atualizado para garantir que as vulnerabilidades conhecidas estejam corrigidas.
4. Altere a porta padrão: Mudar a porta padrão do SSH (22) para outra pode ajudar a reduzir ataques automatizados.
5. Implemente um firewall: Use ferramentas como ufw ou firewalld para restringir o acesso ao seu servidor.
6. Monitore os logs de acesso: Regularmente, verifique os logs de acesso em /var/log/auth.log ou similar para qualquer atividade suspeita.
7. Utilize ferramentas de proteção: Softwares como Fail2Ban podem monitorar tentativas de login e bloquear IPs após tentativas de login malsucedidas.
8. Backup regularmente: Sempre tenha backups atualizados de suas configurações e dados. Em caso de qualquer problema, você terá uma maneira de restaurar seu servidor.
Segurança não se resolve de uma vez. Acompanhe as boas práticas e revise a configuração de tempos em tempos, para manter servidores e dados protegidos.