Aumentando a segurança do SSH

 
Introdução:

Apesar do SSH ser um serviço bastante seguro, ainda é possível torná-lo ainda mais restrito.

Primeiros passos:

Antes de qualquer coisa, é necessário fazer uma cópia de salvaguarda do arquivo sshd_config, com permissão de leitura apenas. No Terminal (Ctrl+Alt+T), rode os comandos abaixo, um por vez:


 sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bck      

sudo chmod a-w /etc/ssh/sshd_config.bck

Desabilitando login como root no SSH:

Um dos maiores furos de segurança que se pode produzir em um servidor é permitir login direto como usuário root, via SSH, porque qualquer cracker que consiga descobrir a senha de root do usuário, utilizando força bruta, poderá tomar conta do servidor. É muito melhor acessar sem privilégios e, uma vez no shell, usar o sudo. Logicamente, para isso, é necessário que você possua uma conta de usuário com senha, no servidor.


Para desabilitar login com root abra o arquivo sshd_config no Nano, com o comando:


sudo nano /etc/ssh/sshd_config


Em seguida, procure pela linha:

  #PermitRootLogin no 

e apague o símbolo “#” do início da linha, para que o comando fique como o exemplo abaixo, habilitando-o:

  PermitRootLogin no 

Desabilitando o redirecionamento:

Por padrão, é possível tunelar uma conexão de internet através de uma seção SSH. Por ela, é possível acessar um o desktop ou, mesmo, algumas aplicações gráficas. O nome desses tipo de conexão são "port forwarding" e "X11 forwarding".


Apesar de úteis, essas modalidades de conexão oferecem mais opções a serem exploradas por crackers. Desabilitá-las confere alguma segurança adicional (embora não muita):


sudo nano /etc/ssh/sshd_config


Localize as seguintes linhas:


AllowTcpForwarding yes

e

X11Forwarding yes


e substitua os parâmetros “yes” por “no”. As linhas devem ficar como a seguir, após a edição:


AllowTcpForwarding no

e

X11Forwarding no


Se alguma das linhas não existir, basta adicioná-las ao final do arquivo.

Desabilitando a autenticação por senha

Como a maior parte das pessoas tem o péssimo hábito de utilizar senhas fracas, muitos crackers buscam por servidores SSH online e realizam ataques de força bruta que, eventualmente, conseguem descobrir mesmo as melhores senhas.


Uma solução para este problema é utilizar chaves SSH em vez de senhas. Para se ter uma ideia, para ser tão difícil de se quebrar quanto uma chave SSH, uma senha deveria conter 634 caracteres aleatórios, entre letras e números.


Se você desabilitar a autenticação por senha, apenas será possível acessar remotamente seu computador, via SSH, a partir de máquinas especificamente aprovadas para tal. Isso aumenta consideravelmente a segurança.


É recomendável desabilitar a autenticação por senha, a menos que haja alguma razão específica para não fazê-lo.


Localize a seguinte linha no arquivo sshd_config, que ainda está aberto no Nano:


  #PasswordAuthentication yes 


retire o símbolo “#”, indicativo de comentário, do início da linha e substitua o parâmetro “yes” por “no”, de modo a que a linha fique assim:


  PasswordAuthentication no

Criando as chaves de acesso

Chaves de acesso são simples de serem criadas utilizando-se o Terminal (Ctrl+Alt+T). Comece abrindo uma outra instância do Terminal no desktop (aquele que acessa o servidor via SSH), e copiando e colando os seguintes comandos, um por vez. Se você está usando o Ubuntu, é possível que já possua o diretório .ssh, neste caso, ignore o primeiro comando:

 

 

mkdir ~/.ssh

sudo chmod 700 ~/.ssh      

ssh-keygen -t rsa -b 4096

O programa fará algumas perguntas. A resposta padrão é suficiente para cada uma delas. Nenhuma senha é necessária, mas é uma segurança a mais. Ao final, uma chave será criada no diretório ~/.ssh/ .


Volte à instância do Terminal que está conectada ao servidor, via SSH, e verifique se o diretório .ssh existe com o comando abaixo:


ls -a .ssh


Se não existir, crie-o com o seguinte comando:


mkdir .ssh


Agora, só é preciso subir a chave pública para o servidor. Há dois métodos para isso. O mais simples é enviar pelo próprio SSH. Para tanto, volte à instância local do Terminal e rode o seguinte comando:


ssh-copy-id username@XXX.XXX.XXX.XXX


onde “username” e os X devem ser substituídos pelo seu nome de usuário e o IP do servidor que você acessa via SSH.


O segundo método utiliza o programa rsync. Para tanto, rode o comando abaixo, lembrando-se de substituir “username” pelo seu nome de usuário no servidor, e os X por seu número de IP:


rsync -av -e "ssh" ~/.ssh/id_rsa.pub username@XXX.XXX.XXX.XXX:.ssh/authorized_keys


Se o seu servidor estiver configurado para utilizar uma porta diferente da padrão, de número 22, é possível especificá-la no comando acima. No exemplo abaixo, o SSH está configurado para utilizar a porta 2222:


sudo rsync -av -e "ssh -p 2222" ~/.ssh/id_dsa.pub username@XXX.XXX.XXX.XXX:.ssh/authorized_keys


Ao rodar qualquer dos comandos acima, você será instado a introduzir sua senha root.


Concluída a transferência do arquivo com a chave pública, volte mais uma vez à instância do Terminal conectada ao servidor e rode os seguintes comandos, um por vez (lembre-se de usar seu login no servidor no lugar de “username”, no terceiro comando):


sudo chmod 700 ~/.ssh


sudo chmod 600 ~/.ssh/authorized_keys


chown username. ~/.ssh/authorized_keys


Pronto. A partir de agora, não será mais necessário utilizar senha para acessar o servidor por SSH.

Definindo usuários que podem conectar via SSH

É possível definir explicitamente quais usuários ou grupos específicos podem ter acesso ao, ou serem bloqueados do, servidor SSH, o que pode aumentar significativamente a segurança do sistema, especialmente se outros usuários que a ele tenham acesso não observem boas práticas de segurança:


Para permitir que um usuário tenha acesso ao servidor, adicione a seguinte linha no final do arquivo, substituindo “username1”, “username2” e “username3” pelos nomes usuários que se deseja autorizar. Pode-se enfileirar vários usuários, ou utilizar só o seu “username”, se apenas você pode ter acesso ao sistema.


  AllowUsers username1 username2 username3


Para permitir que todos tenham acesso ao sistema, exceto certos usuários listados, use o texto abaixo, substituindo as entradas de “username” pelos nomes de usuário de quem devem ser bloqueado:


  DenyUsers username1 username2 username3 


O mesmo vale para grupos:


  AllowGroups groupname1 groupname2 
ou

  DenyGroups groupname1 groupname2 

Aplicando as regras criadas:

Salve as edições e saia do Nano com a sequência de teclas: Ctrl+x, S (ou “y”, se seu sistema estiver em inglês), e Enter.


Para aplicá-las, rode o seguinte comando:


sudo service ssh restart


Se aparecer a mensagem de erro "Unable to connect to Upstart", reinicie o ssh com o comando:


sudo systemctl restart ssh