Aumentando a Segurança do Servidor SSH

O SSH (Secure Socket Shell) é normalmente o principal meio para acesso aos servidores, especialmente aqueles ambientes que rodam sistemas Unix-like. Apesar de ter um nível de segurança agradável, é necessário o ajuste de alguns parâmetros.

Backup do arquivo de configuração

Antes de qualquer modificação no arquivo original onde estão os parâmetros de configuração do SSH, vamos realizar uma cópia dele que servirá de backup. Isso evita que tenhamos problema caso ocorra algum erro durante as modificações.

Neste caso para criar uma cópia do arquivo de backup das configurações do SSH, use o comando abaixo.

# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Agora que realizamos o backup, vamos continuar.

1 – Crie uma senha segura

Indiscutivelmente o usuário que faz acesso precisa ter uma senha forte, e é recomendado que tenham letras maiúsculas/minúsculas, números e caracteres especiais com tamanho mínimo de 16.

2 – Altere a Porta do SSH

A porta padrão do SSH é a 22 e por conta disso muitos ataques vão direto nela, para mitigar esse problema iremos mudar para a porta 5050 (sugestão, podendo ser qualquer outra porta).

Observação: Essa medida não fará com que a porta nunca seja descoberta, e isso é facilmente demonstrado com um scan. Porém essa alteração já faz com que uma boa parte dos ataques sejam evitados.

Abra o arquivo de configuração.

# nano /etc/ssh/sshd_config

Remova o # da linha que tem o Port 22, fazendo referência a porta padrão do SSH e troque o 22 por 5050.

Está assim:

# Port 22

Ficará assim:

Port 5050

Se você está em busca de uma infraestrutura de nuvem nacional e de confiança, a Cactos Hospedagem oferece servidores VPS Cloud, com robustez, alta disponibilidade e segurança. Converse com um de nossos analistas clicando aqui.

3 – Desative o login como root

Impeça que o usuário root consiga fazer o login via SSH, tome como boa prática a utilização de um usuário sem privilégio administrativo para acessar o servidor. E depois de ter feito o acesso e se for realmente necessário, você altera o privilégio para root.

Procure no arquivo de configuração o parâmetro PermitRootLogin e defina como “no“.

PermitRootLogin no

4 – Definindo o número máximo das tentativas de acesso

Durante um ataque de força bruta é normal que várias tentativas de acesso sejam feitas, para mitigar esse problema vamos definir como 5. Fique à vontade para definir o número de tentativas que quiser.

Procure no arquivo de configuração o parâmetro MaxAuthTries e defina como “5“.

MaxAuthTries 5

5 – Alterando o tempo de espera para login

Configure os tempo de espera em segundos que o usuário tem para ser realizar o acesso quando a conexão SSH é estabelecida no Terminal. Como exemplo defini 30 segundos mas você pode escolher um tempo maior ou menor.

Procure no arquivo de configuração o parâmetro LoginGraceTime e defina como “30“.

LoginGraceTime 30


6 – Defina o Protocol 2 como padrão

Existe uma diferença entre os Protocolos 1 e 2, além de trabalharem de uma forma diferente o Protocolo 2 é mais seguro.

Para saber se o SSH2 é compatível, faça o seguinte:

ssh -2 usuario@IP DO SERVIDOR

Caso seja compatível uma mensagem perguntando se você deseja continuar se conectando vai surgir. Para configurar o Protocolo 2, insira o parâmetro acima do Port onde foi mudada a porta do SSH (passo 1).

Procure no arquivo de configuração o parâmetro Port 5050 e adicione o Protocol 2 acima dele.

Protocol 2

7 – Bloqueando o login de um usuário sem senha

O parâmetro PermitEmptyPasswords especifica se o servidor SSH vai permitir o login de contas com sequências de senha vazias.

Para evitar o acesso remoto do shell por contas que possuem uma senha vazia, é preciso modificar o parâmetro da configuração, reduzindo as chances de acesso não autorizado ao sistema.

Procure no arquivo de configuração o parâmetro PermitEmptyPasswords e defina como “no“.

PermitEmptyPasswords no

8 – Desabilite o X11Forwarding

O X11Forwarding permite a execução de programas em modo gráfico via SSH, e dependendo da configuração o acesso com permissão ilimitada pode acontecer, se você não tem necessidade de usar, desabilite.

Procure no arquivo de configuração o parâmetro X11Forwarding e defina como “no“.

X11Forwarding no

9 – Defina um tempo ocioso

Por vezes terminamos as configurações e deixamos o Terminal com SSH conectado, para evitar problemas de acesso não autorizado, limite o tempo máximo em que se não houver interação a conexão será encerrada automaticamente.

No exemplo abaixo o tempo definido foi de 300 segundos, que é equivalente a 5 minutos.

Procure no arquivo de configuração o parâmetro ClientAliveInterval e defina como “30“.

ClientAliveInterval 300

10 – Desabilite totalmente o acesso por senhas

Visto que a descoberta de uma senha é mais fácil, existe a opção de realizar o acesso ao shell somente por meio de uma chave ssh. Esse método é conhecido como autenticação baseada em chave ssh.

O grande problema está em você perder essa chave, por tanto, mantenha um cópia em um local seguro para evitar acessos indevidos. E sempre que possível, dê preferência para a autenticação baseada em chave.

11 – Reinicie o processo do SSH

Finalizada todas as modificações no arquivo de configuração, reinicie o serviço para que elas entrem em vigor.

# systemctl restart sshd

Se você está em busca de uma infraestrutura de nuvem nacional e de confiança, a Cactos Hospedagem oferece servidores VPS Cloud, com robustez, alta disponibilidade e segurança. Converse com um de nossos analistas clicando aqui.

Dica bônus

12 – Configure o port-knock

O knockd (port-knock) realiza a escuta do tráfego de uma interface e procura por sequências das batidas de porta (por isso o nome port-knock). Essas batidas é a ordem de portas configuradas para que o acesso seja permitido.

Um exemplo bem simples de inserção correta das portas seria assim.

Porta 5050 – ok
Porta 4002 – ok
Porta 3030 – ok

Acesso ao Terminal SSH é permitido pelo Firewall.

Agora outro exemplo mostrando a inserção erradas das portas.

Porta 5150 – ok
Porta 4002 – ok
Porta 3030 – ok

Como a primeira porta (podendo ser qualquer outra) não seguiu a ordem certa, o acesso ao Terminal SSH é bloqueado pelo Firewall.

13 – Instale um Firewall

Existem outros Firewalls que você pode implementar em seu servidor, mas aqui vou exemplificar com o UFW Firewall.

Instale o UFW Firewall

# apt install ufw

Atualize as regras para rejeitar todas as conexões que chegarem e permitir a saída.

# ufw default deny incoming

# ufw default allow outgoing

Como tenho um Servidor Apache rodando em teste, irei permitir a porta 80 (http). Mas se você tiver outros serviços, inclua eles nas regras do Firewall.

# ufw allow 80

Se você inseriu uma regra errada, apenas adicione o delete antes do allow ou deny para remover.

# ufw delete allow 80

Permita o acesso ao SSH somente pelo seu IP, lembre-se de usar um IP Fixo (Privado ou Público) na porta 5050 modificada.

# ufw allow from SEU-IP-FIXO-AQUI to any port 5050

Habilite o serviço do UFW.

# ufw enable

Para resetar todas as configurações já feitas no UFW, use o comando abaixo.

# ufw reset

Se quiser ver o status do Firewall.

# ufw status verbose

Depois de terminar as configurações, você pode listar e conferir todas as regras com suas IDs.

# ufw status numbered

Aqui foram mostradas algumas maneiras de dificultar as tentativas de ataque direcionadas ao SSH, mas ainda existe muito trabalho a ser feito.

Para continuar acompanhando os nossos conteúdos, adicione o blog nos favoritos e não esqueça de nos seguir em nossas redes sociais. Até a próxima!