Passo IV: Desabilite protocolo inseguro
O SSH tem 3 versões do seu protocolo, onde a primeira é o mais fraco em sua encriptação, o segundo é muito mais seguro e o terceiro é supostamente mais seguro, porém, como ele é novo e nem todas as distribuições tem por padrão, assim o segundo protocolo ainda é a melhor opção.
Ainda com o arquivo
/etc/ssh/sshd_config aberto, procure esta linha e faça a alteração:
# Protocol 2,1
Protocol 2
Outra coisa que deve ser seguida, não somente pelo SSH, mas qualquer outra aplicação que se conecte com o mundo exterior (Internet), não autorize login do root pela rede ainda que você seja uma pessoa que usa o SSH para operações administrativas executadas pelo root, use o
sudo ou
su, uma vez já conectado.
Para desativar o login do root, procure a linha:
# PermitRootLogin yes
PermitRootLogin no
Caso você precise logar como root porque a tarefa será executada pelo sistema ou por um script (tarefas como backup, por exemplo), use autenticação por chave de encriptação sem senha:
PermitRootLogin without-password
Outra opção seria limitar os comandos que o root pode executar remotamente, porém, este tipo de restrição requer de você mais pesquisa do que eu ofereço neste artigo, nestas horas o Google é nosso melhor amigo.
PermitRootLogin forced-commands-only
Passo V: Limitar conexões não autenticadas
Limitar o máximo de conexões não autenticadas que o SSH vai lidar ao mesmo tempo. Quanto menor este número, vai ser mais difícil para um intruso tentar múltiplas conexões paralelas para tentar uma invasão coordenada.
No arquivo "sshd_config" mude o
MaxStartups do valor padrão para "3:50:10". Os dois pontos separam os valores, "permitir 3 usuários tentando conectar ao mesmo tempo, de forma aleatória aumenta o número de conexões sendo derrubadas entre o mínimo de 3 e o máximo de 10".
Obs.: Este número deve ser maior em um servidor, onde o número de usuários que são legítimos e estão logados é maior.
# MaxStartups 10
MaxStartups 3:50:10
Passo VI: Reduzir tempo de login
Reduzir o tempo máximo para esperar por um login antes de desconectar. Os 2 minutos padrão são uma eternidade, esperando com alguém que não é legitimo na rede. 30 segundos é mais do que suficiente:
# LoginGraceTime 120
LoginGraceTime 30
Por padrão, todos os usuários do sistema são permitidos fazer o login pelo SSH. Uma medida que aumenta a segurança é criar uma lista de usuários permitidos.
Por exemplo, permitir somente os seguintes usuários: "Huginho", "Zezinho", "Luizinho", "MariaDasGracas", "MariaDasDores" e "Mariana", adicione o seguinte para permitir esses usuários (só para chamar a atenção, Maria* serve para todos os nomes que começam com "Maria"):
AllowUsers Huginho Zezinho Luizinho Maria*
Outra alternativa é autorizar um grupo criado por você, por exemplo: usuariossh (não escreva isso no arquivo, apenas digite no terminal):
sudo groupadd usuariossh
Adicionando usuário:
sudo usermod -a -G usuariossh NomeDoUsuario
Exemplo:
sudo usermod -a -G usuariossh mauricio
Passo VII: Permitindo determinado IP conectar-se no SSH
Permita que somente um determinado IP conecte no SSH. Antes de especificar quais IPs, a regra padrão deve ser primeiro NEGAR todos e depois liberar quem você quer. Edite
/etc/hosts.deny e inclua a seguinte linha:
sshd: ALL
Depois adicione ao arquivo
/etc/hosts.allow as redes que você quer permitir. Por exemplo, para adicionar todos os 254 computadores da rede "192.168.1.*", todos os 16 milhões da rede "10.0.0.0", e o IP solitário 24.42.69.101, escreva a seguinte linha no seu
/etc/hosts.allow:
sshd: 192.168.1.0/255.255.255.0
sshd: 10.0.0.0/255.0.0.0
sshd: 24.42.69.101
Você também pode rejeitar conexões usando um firewall como IPtables, mas para manter a sua sanidade, use somente um método. :)
Para não dar chances a ninguém, por sorte, adivinhar a senha de algum usuário, desabilite a autenticação de senhas por completo. Eu sei, isso soa como irresponsabilidade, loucura, não faz sentido... porém, deixe-me explicar, quando você remove a autenticação de senhas, você deve usar chaves encriptadas para a autenticação de máquinas conhecidas e confiáveis.
Ou seja, sua máquina tem uma chave 123456789 e ao tentar conectar-se, o computador vem com a chave dele 987654321, as duas chaves juntas formam 999999999 e a autenticação é aceita.
Por favor especialistas em encriptação, não joguem pedras em mim pelo exemplo tão superficial, eu só quero fazer isso soar simples para quem nunca ouviu falar de chaves de autenticação.
Mas atenção, este método ajuda na hora de rodar scripts de uma máquina para a outra, porém sua chave deve ser bem guardada para evitar que alguém a roube e se passe por você, e também é importante que você não somente remova a autenticação, mas CRIE SUA CHAVE E FAÇA O UPLOAD PARA O SERVIDOR.
Coloque no
/etc/ssh/sshd_config:
PasswordAuthentication no
Por padrão o SSH escuta todas as redes (0.0.0.0), se você vai usar somente na rede local, e somente um computador dessa rede vai se conectar, configure ele para escutar um IP da rede:
ListenAddress 192.168.1.10