SSH Blindado - Protegendo o seu sistema de ataques SSH

SSH é, sem dúvida, uma grande ferramenta para quem trabalha em rede. Com ele você tem acesso direto à máquina, porém, é um grande vilão se mal configurado. Neste artigo, explico como deixar o seu SSH protegido de qualquer ataque. Nem todos os passos devem ser executados, mas sim implementados de acordo com sua necessidade.

[ Hits: 35.018 ]

Por: M4iir1c10 em 06/12/2012 | Blog: https://github.com/mauricioph


Aumentando a segurança do servidor SSH - Continuação



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

Página anterior     Próxima página

Páginas do artigo
   1. Ingredientes
   2. Aumentando a segurança do servidor SSH - Continuação
   3. Testando
Outros artigos deste autor

5 comandos que ninguém nunca deve executar no Linux

Enfeite o LILO com uma imagem de seu gosto

Proteja seu website ou página html com encriptaçâo

Rode o Blackbox no Windows XP

Colocando Windows, Linux e Mac Os X em um mesmo PC

Leitura recomendada

Sudo 1.8.12 - Parte II - Como sudo funciona

Bom escudo não teme espada: o módulo pam_cracklib

Firewall com Iptables + Squid

Entenda o que é Hardening

Alta disponibilidade com IP compartilhado - UCARP

  
Comentários
[1] Comentário enviado por maiconramones em 06/12/2012 - 15:05h

Muito bom o artigo, simples, eficiente e direto.

Parabéns.

[2] Comentário enviado por m4iir1c10 em 06/12/2012 - 17:18h

So uma correcao na ultima linha da primeira pagina o comando nao e $ ssh mauricio@192.168.34.70:2200 e sim $ ssh mauricio@192.168.34.70 -p 2200

E na Terceira Pagina o nome para o arquivo nao e autorized_keys e sim authorized_keys, percebeu o H entre o T e o O?

Desculpem pelos erros ;)

[3] Comentário enviado por removido em 10/12/2012 - 11:12h

Bom artigo, parabéns.
Uma outra dica é usar o fail2ban.

[4] Comentário enviado por mineirobr em 12/12/2012 - 09:42h

Excelente, parabéns :)

[5] Comentário enviado por m4cgbr em 13/12/2012 - 04:33h

Excelente, muito útil e claro nas colocações.

Obrigado

[6] Comentário enviado por voprach em 08/06/2016 - 08:50h

Recebi a seguinte mensagem após alteração da porta e reinicio do servidor: No route host
Peço a gentileza de alguém poder me ajudar. Desde já agradeço.

[7] Comentário enviado por removido em 27/07/2016 - 17:10h

Muito bom cara, muito bom mesmo.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts