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.