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!