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.bakAgora 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_configRemova 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 22Ficará assim:
Port 50503 – 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 no4 – 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 55 – 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 306 – 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 SERVIDORCaso 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 27 – 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 no8 – 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 no9 – 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 30010 – 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 sshdPrecisa de um VPS Cloud no Brasil com alta performance, baixa latência e estabilidade real? Veja nossos planos prontos para produção ou fale com um analista e ative um VPS sob medida para o seu projeto agora.
💬 Falar com um especialista
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 – okAcesso ao Terminal SSH é permitido pelo Firewall.
Agora outro exemplo mostrando a inserção erradas das portas.
Porta 5150 – ok
Porta 4002 – ok
Porta 3030 – okComo 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 ufwAtualize as regras para rejeitar todas as conexões que chegarem e permitir a saída.
# ufw default deny incoming
# ufw default allow outgoingComo 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 80Se você inseriu uma regra errada, apenas adicione o delete antes do allow ou deny para remover.
# ufw delete allow 80Permita 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 5050Habilite o serviço do UFW.
# ufw enablePara resetar todas as configurações já feitas no UFW, use o comando abaixo.
# ufw resetSe quiser ver o status do Firewall.
# ufw status verboseDepois de terminar as configurações, você pode listar e conferir todas as regras com suas IDs.
# ufw status numberedAqui 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!





