Você instalou um servidor SSH com saída para a internet. A conexão direta ao servidor não é a melhor prática, mas em alguns casos é a que está disponível. Este artigo mostrará práticas adicionais para melhorar a segurança do seu servidor.

Aqui estamos utilizando o rocky linux. Eu adoto uma versão padrão RHEL por padrão. Caso você esteja utilizando outro tipo de distribuição, o caminho dos arquivos podem não ser os mesmos.

Desabilitando a autenticação por senha

A autenticação por senha é o elo mais fraco de um serviço SSH. O grande problema de senhas é que elas podem ser vazadas, podem ser reutilizadas em outro lugar, etc. Um serviço de brute force pode ajudar a quebrá-la entre outras coisas. Para mitigar isso vamos fazer a cópia de uma chave SSH para o servidor.

O primeiro passo é gerar a chave:

ssh-keygen -t ed25519 -C "Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo." -f ~/.ssh/id_ed25519

Copie a sua chave para o servidor:

ssh-copy-id -i ~/.ssh/id_ed25519.pub usuário@seu-ip-do-servidor

Você pode testar o seu acesso conectando no servidor.

O próximo passo é fazer as alterações na configuração do SSH.

Vamos então editar o arquivo abaixo:

sudo nano /etc/ssh/sshd_config

Agora procure ou adicione as opções:

PasswordAuthentication no  

Vamos ao que faz cada função:

PasswordAuthentication no - Desabilita a autenticação por senha do serviço.

Agora teste a configuração:

sudo sshd -t 

Reinicie o serviço:

systemctl restart sshd

Utilizamos ed25519 ao invés de RSA porque é o recomendado atualmente (junho de 2026). Um último ponto é que você pode querer proteger o seu arquivo de chave com senha ao criar. Isso pode ser interessante porque mesmo que tenham acesso ao arquivo é necessário senha.

Desativar Login como Root

Por que? Porque todo servidor possui um usuário root. Se você deixa habilitado é uma porta de entrada. Lembre-se de que o comando é usuario@servidor. Caso queira acesso raiz use um usuário com propriedades sudo ou escale para root.

Edite o arquivo:

sudo nano /etc/sshd/sshd_config

Agora edite o parâmetro:

PermitRootLogin no

Agora teste a configuração:

sudo sshd -t 

Reinicie o serviço:

systemctl restart sshd

Isso evitará problemas futuros.

Utilize uma lista de permissões

Agora que você entendeu o passo acima, entenderá porque utilizar uma lista de permissões é um bom recurso.

Edite o arquivo:

sudo nano /etc/sshd/sshd_config

Utilize os parâmetros:

# Restringir quais usuários podem fazer login via SSH:  
AllowUsers admin deploy  
  
# Restringir o acesso a um grupo específico:  
AllowGroups ssh-users

Agora teste a configuração:

sudo sshd -t 

Reinicie o serviço:

systemctl restart sshd

Se você mexe com servidores externos lembre-se de que os ataques por brute-force são feitos por Bots com usuários pré-configurados. É fácil escalar os problemas.

Restringir acesso SSH por endereço IP

Isso pode ser uma boa quanto mais o risco aumenta. Ah... mas na minha casa é dns dinâmico? Bom... neste caso você pode utilizar um jump server. Um jump server é um servidor pequeno (VPS) que possui acesso a outros servidores. A grande vantagem disso é que eles possuem IP fixo e no mundo das regras de firewall IP Fixo é vida!

Alterar a porta padrão

Esse também é interessante, mas pode complicar se não for bem projetado.

Edite o arquivo:

sudo nano /etc/sshd/sshd_config

Edite o parâmetro

Port 2222

Estamos colocando a porta 2222 ao invés da 22.

Agora teste a configuração:

sudo sshd -t 

Reinicie o serviço:

systemctl restart sshd

Implementando MFA no SSH

Para instalar o MFA no rocky linux você terá que executar os seguintes passos:

sudo dnf install epel-release -y
sudo dnf install google-authenticator -y

Execute o comando:

google-authenticator
  • Do you want authentication tokens to be time-based? y (Isso garante que os códigos mudem a cada 30 segundos).
  • QR Code: Um QR code gigante vai aparecer na tela. Abra o app do seu celular (Google Authenticator, Authy, etc.) e escaneie.
  • Códigos de backup: Abaixo do QR code, aparecerão seus códigos de emergência (emergency scratch codes). Salve-os em um lugar seguro. Se perder o celular, eles são sua única salvação.
  • Do you want me to update your "~/.google_authenticator" file? y (Salva as configurações).
  • Disallow multiple uses of the same authentication token? y (Evita ataques de replay).
  • Permitir janela de tempo maior (compensar relógios dessincronizados)? n (A menos que você tenha problemas frequentes de fuso horário, responda "não" por segurança).
  • Enable rate-limiting? y (Evita ataques de força bruta no próprio código do MFA).

Agora você precisa editar o arquivo do PAM:

sudo nano /etc/pam.d/sshd

Adicione a linha:

auth required pam_google_authenticator.so

Nota: Se você quiser que o MFA seja obrigatório apenas para quem faz login com senha (e ignorado para quem usa chave SSH pública), adicione nullok ao final: auth required pam_google_authenticator.so nullok. Se quiser MFA para todo mundo, deixe sem o nullok.

Vamos editar as configurações do SSH:

sudo nano /etc/ssh/sshd_config

Procure e altere as seguintes diretivas (se não existirem, adicione-as):

KbdInteractiveAuthentication yes

Se você usa Chave SSH (PublickeyAuthentication yes) e quer exigir a chave MAIS o código do MFA, adicione também esta linha no final do arquivo:

AuthenticationMethods publickey,keyboard-interactive

Passo crítico -

ATENÇÃO: Não feche a sua sessão atual do terminal! Se algo der errado, você perderá o acesso ao servidor. Abra uma nova janela de terminal para testar.

sudo systemctl restart ssh

Como testar

Abra um novo terminal no seu computador e tente conectar:

ssh usuario@ip_do_servidor

Se configurou Chave + MFA: O servidor vai aceitar sua chave e, em seguida, pedirá o Verification code.

Se configurou Senha + MFA: Ele pedirá a senha do usuário e, depois, o Verification code.

Se você conseguir entrar e o código for solicitado, parabéns! Seu SSH está blindado.