Para quem administra servidores
GNU/Linux ou até mesmo alguns outros Unix Like, o serviço de
SSH é essencial.
Porém, é também um serviço que gera muitas preocupações aos administradores de sistemas, que frequentemente são vítimas de tentativas de invasão em seus servidores através deste serviço. Estas frequentes tentativas geram uma preocupação muito grande em qualquer administrador de sistemas que quer manter a segurança e integridade de seu ambiente: "Como manter meu SSH seguro?"
Neste artigo, que publiquei originalmente em meu
blog, quero compartilhar algumas dicas de técnicas que eu descobri na Internet ou mesmo que a experiência do dia a dia me ensinaram, e que podem ajudar nesta árdua tarefa.
Utilize somente autenticação via troca de chaves
O SSH permite dois tipos de autenticação, um por senha, outro através de troca de chaves.
As chaves nada mais são do que dois arquivos de texto contendo uma chave RSA (ou DSA, caso você prefira), uma que ficará no servidor, e outra que deverá ficar com o usuário. No momento da autenticação, a chave privada (que fica com o usuário que irá acessar o servidor) é enviada ao servidor, e caso as chaves "casem", você terá acesso ao shell via SSH. O acesso via chaves é mais seguro, pois o usuário deverá obrigatoriamente ter o arquivo de chave privada, cujo conteúdo, diga-se de passagem, é humanamente impossível de ser decorado.
O serviço de SSH possibilita que você desabilite o uso de senhas e utilize somente a autenticação via chaves. Para isto, primeiramente, devemos gerar o par de chaves que serão utilizados neste processo:
ssh-keygen -t rsa -b 2048
Este comando irá te fazer algumas perguntas, geralmente, a primeira é o local onde você quer gerar o par de chaves, e a segunda é qual é a "passphrase" que você deseja atribuir em sua chave privada. Para salvar o par de chaves no local padrão, e para não atribuir nenhuma passphrase, basta simplesmente apertar ENTER no momento em que as perguntas forem feitas.
Se você fez desta forma, no HOME do seu usuário existirá um diretório chamado .ssh, no qual você encontrará os arquivos
id_rsa.pub e
id_rsa.
Caso tenha executado este procedimento no servidor, somente renomeie o arquivo id_rsa.pub para authorized_keys:
mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
Caso tenha realizado o procedimento direto em seu desktop (obviamente com
Linux), basta copiar o arquivo id_rsa.pub direto para o servidor, e ajustar as permissões da chave privada no desktop, para que possa realizar o acesso:
scp id_rsa.pub usuario@servidor:~/.ssh/authorized_keys
$ chmod 644 id_rsa
Como o SSH por padrão já vem configurado para permitir acesso via troca de chaves, o comando abaixo deverá resultar em um acesso imediato ao servidor, sem solicitação de senha:
ssh -i ~/.ssh/id_rsa usuario@servidor
Se o seu SSH não teve nenhuma alteração de suas configurações padrão (bem provável), você agora está no console do servidor. :) E se você já está dentro do servidor, significa que já podemos desabilitar a autenticação via senha, mantendo somente a autenticação via troca de chaves:
# vim /etc/ssh/sshd_config
E altere:
# A diretiva PasswordAuthentication é responsável por permitir autenticação por senhas
# Alterá-la para "no" fará com que o servidor pare de aceitar senhas como forma de autenticação
PasswordAuthentication no
Pronto! Basta reiniciar o SSH e seu SSH só será acessível via troca de chaves, nada mais de senhas e suas infinitas tentativas de Brute Force.
Possíveis configurações que impeçam a troca de chaves
Por outro lado, se no momento da autenticação via chave pública você não tenha conseguido acesso, isto pode ter sido causado por diversos fatores, entre eles, o mais provável, é que seu SSH não esteja configurado adequadamente para utilizar chaves, ou o nome do arquivo de chaves publicas (authorized_keys) foi alterado nas configurações do servidor. Para termos certeza se seu problema é este, vamos conferir qual é o valor das diretivas PubkeyAuthentication e AuthorizedKeysFile:
# sshd -T | egrep -i '(AuthorizedKeysFile|PubkeyAuthentication)'
pubkeyauthentication yes
authorizedkeysfile .ssh/authorized_keys
Se o seu SSH não estiver configurado como é esperado por este artigo, o comando acima retornará resultados diferentes do esperado acima. Para ajustarmos, altere no arquivo
/etc/ssh/sshd_config o valor destas diretivas:
# vim /etc/ssh/sshd_config
# Lembrando que os valores das diretivas abaixo são os valores padrão do SSH.
AuthorizedKeysFile yes
authorizedkeysfile .ssh/authorized_keys
Após isto, reinicie o serviço de SSH, e tente autenticar via troca de chaves novamente.
# /etc/init.d/sshd restart
Se você conseguiu, basta seguir o procedimento de desativação da senha para autenticação.
Caso não, nada que uma Googlada ou mesmo um pedido de ajuda aqui não possam ajudá-lo a resolver. ;)