Segurança SSH: lista de verificação para proteger um VPS Linux
Reforce a segurança SSH num VPS novo com Ubuntu 24.04: chaves SSH, definições do sshd, UFW e Fail2ban, com um teste em cada passo para não perder o acesso.
Esta lista de verificação de segurança SSH transforma um VPS novo com Ubuntu 24.04 LTS, onde o root entra com palavra-passe, num servidor onde só entra um utilizador específico, e apenas com chave, protegido por uma firewall e pelo Fail2ban. Cada passo com risco inclui um teste a fazer enquanto a sessão atual se mantém aberta, e a lista indica as diferenças no Debian 12. Se o seu servidor usar Windows, os nossos conselhos para proteger o Ambiente de Trabalho Remoto fazem o mesmo para o RDP.
A lista de verificação de segurança SSH em resumo
Reforçar a segurança SSH de um servidor novo exige onze passos, e a ordem é importante: confirme que um utilizador sudo consegue iniciar sessão com chave antes de desativar o acesso do root e o acesso por palavra-passe, e permita o SSH na firewall antes de a ativar.
| Passo | Risco de ficar sem acesso |
|---|---|
| 1. Atualizações de segurança automáticas | Nenhum |
| 2. Um utilizador sudo | Nenhum |
| 3-4. Início de sessão com chave SSH | Nenhum |
| 5-7. Sem acesso do root nem palavras-passe | Sim: teste um segundo início de sessão |
| 8. Uma nova porta SSH (opcional) | Sim |
| 9. Firewall UFW | Sim |
| 10. Fail2ban | Pode bloquear o seu próprio endereço |
| 11. Serviços não utilizados desativados | Nenhum |
Prepare o servidor: atualizações e um utilizador sudo
Se estiver a trabalhar como root, o sudo é opcional nos dois primeiros passos. Em todo o guia, substitua deploy pelo seu nome de utilizador e 203.0.113.10 pelo endereço IP do seu servidor.
1. Atualize o sistema e ative as atualizações de segurança automáticas
Comece por instalar as atualizações pendentes: o apt update atualiza as listas de pacotes e o apt upgrade instala as novas versões. [1]
sudo apt update
sudo apt upgradeNo Ubuntu, o pacote unattended-upgrades instala automaticamente as atualizações de segurança; vem instalado de origem e é executado uma vez por dia. Os dois valores em /etc/apt/apt.conf.d/20auto-upgrades devem ser «1», e uma execução de teste (dry run) mostra o que o pacote instalaria. [1]
cat /etc/apt/apt.conf.d/20auto-upgrades
sudo unattended-upgrade --dry-run -vAPT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";O pacote não reinicia o servidor por iniciativa própria, porque Unattended-Upgrade::Automatic-Reboot tem o valor false por predefinição; por isso, reinicie-o manualmente quando uma atualização o exigir. [1] No Debian 12, se faltar o pacote ou o ficheiro, instale o unattended-upgrades e crie o ficheiro com as duas linhas acima.
2. Crie um utilizador sudo em vez de usar o root
Faça as tarefas de administração com a sua própria conta de utilizador e o sudo, que pede a palavra-passe desse utilizador, e não a do root. Através do sudo, os membros do grupo sudo obtêm acesso root total. [2]
sudo adduser deploy
sudo adduser deploy sudoO adduser pede uma palavra-passe e alguns dados opcionais. [2] Escolha uma palavra-passe longa: o SSH vai usar chaves, mas o sudo continua a pedi-la. Depois, teste a conta: sudo whoami deve mostrar root.
su - deploy
sudo whoamiNo Debian 12, se o comando sudo não existir, instale-o primeiro como root com apt install sudo.
Configure o início de sessão com chave SSH
3. Gere uma chave ed25519 no seu computador
Crie o par de chaves no seu próprio computador, não no servidor. O Ubuntu recomenda o tipo ed25519 pelas chaves mais curtas e pelo menor custo computacional, e o ssh-keygen pede uma frase-passe (passphrase) que protege a chave privada. [3]
ssh-keygen -t ed25519Mantenha o nome de ficheiro predefinido. A chave privada é ~/.ssh/id_ed25519; a chave pública, que é a que copia para os servidores, é ~/.ssh/id_ed25519.pub. [3]
No Windows, execute o mesmo comando no PowerShell; o par de chaves fica guardado na pasta .ssh do seu perfil de utilizador. A Microsoft desaconselha deixar a frase-passe vazia e avisa que quem obtiver a chave privada pode iniciar sessão em seu nome. [4]
ssh-keygen -t ed255194. Copie a chave pública para o servidor
No Linux e no macOS, o ssh-copy-id acrescenta a sua chave pública ao ~/.ssh/authorized_keys do utilizador no servidor. [3]
ssh-copy-id deploy@203.0.113.10Já o guia da Microsoft copia as chaves com o PowerShell ou com o scp. [4] Para um servidor Linux, esta linha acrescenta a sua chave e faz com que só o seu utilizador possa escrever na pasta e no ficheiro:
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | ssh deploy@203.0.113.10 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"O sshd verifica estas permissões antes de aceitar um início de sessão, através da opção StrictModes, que está ativa por predefinição. [5] Depois, execute ssh deploy@203.0.113.10 num novo terminal: deve entrar sem a palavra-passe da conta. Se não conseguir, acompanhe o registo do SSH no servidor enquanto volta a tentar: [3]
sudo journalctl -fu ssh.serviceRestrinja o sshd: acesso do root, palavras-passe e utilizadores
Os passos seguintes desativam o acesso do root e o acesso por palavra-passe. Comece só depois de confirmar que entra com chave como o novo utilizador, e mantenha essa sessão aberta até que um segundo início de sessão funcione.
5. Escreva as suas definições num ficheiro à parte
No Ubuntu, o /etc/ssh/sshd_config começa com Include /etc/ssh/sshd_config.d/*.conf e, na maioria das definições, o OpenSSH fica com o primeiro valor que lê, pelo que os ficheiros dessa pasta se sobrepõem ao ficheiro principal. [3] Os ficheiros incluídos são lidos por ordem lexicográfica e, para cada palavra-chave, prevalece o primeiro valor que o sshd obtém, [5] por isso dê ao seu ficheiro o nome 00-hardening.conf.
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
AllowUsers deploySegundo o manual do sshd_config:
- PermitRootLogin no impede o root de iniciar sessão por SSH. O valor predefinido, prohibit-password, recusa palavras-passe para o root, mas continua a aceitar chaves. [5]
- PasswordAuthentication no desativa o início de sessão com palavra-passe, que é permitido por predefinição. [5]
- KbdInteractiveAuthentication no desativa o início de sessão keyboard-interactive (interativo por teclado), um método à parte que também está ativo por predefinição; o nome antigo desta opção é ChallengeResponseAuthentication. [5]
- AllowUsers deploy (opcional) só deixa iniciar sessão os utilizadores indicados. Ao contrário da maioria das palavras-chave, cada linha AllowUsers acrescenta nomes à lista. [5] Escreva o nome sem erros, senão ninguém consegue entrar.
A partir de agora, trate a conta sudo como se fosse o root: as notas do pacote openssh do Ubuntu consideram que qualquer conta a partir da qual se consiga obter privilégios de root equivale ao root perante ataques externos. [6] No Debian 12, confirme primeiro a linha Include com grep -n Include /etc/ssh/sshd_config.
6. Procure ficheiros que voltem a permitir palavras-passe
Uma vez que prevalece o primeiro valor lido, qualquer ficheiro que fique antes do seu na ordenação tem prioridade. Verifique a pasta:
ls /etc/ssh/sshd_config.d/
sudo grep -riE 'passwordauthentication|kbdinteractive|permitrootlogin|allowusers' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/Nas imagens de cloud, o cloud-init escreve as definições SSH que gere em /etc/ssh/sshd_config.d/50-cloud-init.conf sempre que o sshd_config inclui essa pasta. [7] Se esse ficheiro tiver PasswordAuthentication yes, prevalece sobre todos os ficheiros que vêm depois dele na ordenação, e é por isso que o nome do seu começa por 00. Altere também esse valor para no, para que os ficheiros não se contradigam.
7. Teste a configuração e reinicie o SSH
Teste os ficheiros antes de reiniciar: uma definição errada pode impedir o sshd de arrancar, e o SSH pode ser a sua única forma de entrar. [3]
sudo sshd -t
sudo systemctl restart ssh.serviceCorrija primeiro tudo o que o sshd -t assinalar. Depois de reiniciar, mantenha a sessão aberta e teste a partir de um segundo terminal:
ssh deploy@203.0.113.10
ssh root@203.0.113.10O primeiro início de sessão deve funcionar e o segundo deve ser recusado. Se não conseguir entrar, desfaça a alteração na sessão que tem aberta e consulte o registo do SSH indicado no passo 4. [3]
Deve alterar a porta do SSH?
Só se quiser registos com menos ruído. Uma porta nova tira o SSH da porta predefinida, a 22, [5] pelo que os bots que só tentam a porta 22 não o encontram, mas um varrimento de todas as portas continua a encontrá-lo. O verdadeiro trabalho é feito pelas chaves e pela desativação das palavras-passe.
8. Altere a porta no Ubuntu 24.04 (opcional)
Se já tiver o UFW ou outra firewall a funcionar, permita primeiro a nova porta. Mantenha a sessão atual aberta até conseguir entrar pela nova porta.
No Ubuntu 24.04, o ssh.socket está à escuta na porta 22 através da ativação por socket do systemd. Um gerador converte as linhas Port do sshd_config e dos ficheiros que este inclui em definições do socket, pelo que, depois de alterar a porta, tem de recarregar o systemd e reiniciar o ssh.socket. [6]
O sshd aceita mais do que uma linha Port, [5] por isso mantenha a 22 enquanto testa a nova porta:
Port 22
Port 2222sudo sshd -t
sudo systemctl daemon-reload
sudo systemctl restart ssh.socketTeste a nova porta a partir de um segundo terminal. Depois, apague a linha Port 22, repita os três comandos e use a porta 2222 nos passos 9 e 10.
ssh -p 2222 deploy@203.0.113.10No Debian 12, verifique primeiro se o socket está a ser usado. Se estiver inativo, basta reiniciar o serviço para aplicar a alteração.
systemctl is-active ssh.socket
sudo systemctl restart ssh.serviceFirewall, Fail2ban e portas abertas
9. Permita o SSH no UFW antes de o ativar
Ativar o UFW pode cortar a sua sessão SSH e, a partir desse momento, todas as portas que não tiver permitido ficam bloqueadas. Acrescente a regra do SSH antes de executar ufw enable.
O UFW vem instalado mas desativado e, depois de ativado, recusa por predefinição o tráfego de entrada. O manual do UFW avisa que ufw enable pode cortar as ligações SSH, por isso acrescente primeiro a regra do SSH. [8]
Para o SSH, use limit em vez de allow. Uma regra limit continua a permitir ligações, mas recusa um endereço que tente abrir 6 ou mais em 30 segundos. Não acrescente as duas regras, porque o UFW aplica a primeira regra que corresponder. [8]
sudo ufw limit 22/tcp
sudo ufw enable
sudo ufw status verboseO UFW pede confirmação quando o ativa por SSH. [8] Se mudou o SSH de porta, aplique o limite a 2222/tcp em vez da porta 22. No Debian 12, se o comando não existir, instale primeiro o UFW. Para retirar o SSH da internet pública por completo, aceda a ele apenas através de uma rede privada WireGuard. Para uma proteção mais a montante, veja a nossa lista de verificação de proteção DDoS para alojamento VPS.
10. Acrescente o Fail2ban com a jail sshd
O Fail2ban pode bloquear o seu próprio endereço IP depois de várias tentativas de início de sessão falhadas. Se tiver um endereço IP fixo, coloque-o em ignoreip, e mantenha a sessão aberta enquanto testa.
No Ubuntu 24.04, o pacote traz o ficheiro /etc/fail2ban/jail.d/defaults-debian.conf, que ativa a jail sshd, define backend = systemd e aplica os bloqueios através do nftables. [9] O backend systemd lê o journal do systemd, pelo que a jail não precisa de um ficheiro de registo próprio. [10]
sudo apt install fail2ban
cat /etc/fail2ban/jail.d/defaults-debian.confO próprio jail.conf do Fail2ban bloqueia durante 10 minutos um endereço que falhe 5 vezes em 10 minutos, e pede que não edite esse ficheiro: coloque as suas alterações no jail.local. [10]
[sshd]
enabled = true
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1h
ignoreip = 127.0.0.1/8 ::1 198.51.100.7Substitua 198.51.100.7 pelo seu próprio endereço fixo, ou apague-o. A jail predefinida usa port = ssh, por isso acrescente port = 2222 se mudou o SSH de porta. [10] No Debian 12, mantenha aqui backend = systemd e instale o python3-systemd, a biblioteca Python do systemd que este backend usa. [10] Depois, reinicie o Fail2ban e verifique se está a funcionar:
sudo systemctl restart fail2ban
sudo systemctl status fail2ban11. Veja o que mais está à escuta
Cada porta aberta é mais uma porta de entrada. O relatório de portas à escuta do UFW mostra cada porta TCP à escuta e cada porta UDP aberta, o respetivo endereço (* significa todas as interfaces), o programa associado e as regras que se aplicam. [8]
sudo ufw show listeningUm serviço associado a 127.0.0.1 só está acessível a partir do próprio servidor. Desligue os serviços públicos de que não precisa com systemctl disable --now, como as notas do openssh do Ubuntu fazem para o ssh.socket. [6]
sudo systemctl disable --now SERVICE_NAMESe ficar sem acesso
Na maioria das vezes, quem fica sem acesso fechou demasiado cedo a última sessão que funcionava. Se mesmo assim acontecer:
- Use uma sessão que ainda esteja aberta para desfazer a última alteração, executar
sshd -te reiniciar. - Faça uma pausa se o UFW recusou a ligação: a regra limit conta as tentativas feitas em 30 segundos. [8]
- Aguarde o fim do bloqueio do Fail2ban, que dura o tempo definido em
bantime, uma hora nojail.localacima, [10] ou ligue-se a partir de outra rede, como o hotspot de um telemóvel. - Reinstale o servidor, em último recurso. Na StealthRDP, o Centro de Ajuda explica como reinstalar um servidor a partir da área de cliente: escolha o sistema operativo, aguarde 3 a 5 minutos e ligue-se por SSH. A reinstalação deixa o servidor com um sistema novo, pelo que terá de repor os seus dados a partir de uma cópia de segurança; o nosso guia de cópias de segurança automáticas para VPS ajuda-o a criar uma a tempo.
Tem dúvidas? O suporte da StealthRDP está disponível 24/7 pelo Telegram, através de tickets na área de cliente e pelo e-mail info@stealthrdp.com.
Perguntas frequentes
O que significa reforçar a segurança SSH?
Reforçar a segurança SSH significa alterar as definições do servidor SSH para reduzir as contas e os métodos de início de sessão que dão acesso à máquina: chaves em vez de palavras-passe, nenhum acesso do root e, opcionalmente, apenas utilizadores indicados pelo nome. Por predefinição, o OpenSSH aceita o início de sessão com palavra-passe e o keyboard-interactive, por isso são esses os primeiros a desativar. [5]
Porque é que PasswordAuthentication no não funciona no Ubuntu?
Provavelmente, há outro ficheiro que define essa opção primeiro. O sshd_config do Ubuntu inclui /etc/ssh/sshd_config.d/ logo no início, e o OpenSSH fica com o primeiro valor que encontra. [3] Nas imagens de cloud, verifique o 50-cloud-init.conf nessa pasta, onde o cloud-init escreve as suas definições SSH. [7]
Alterar a porta do SSH melhora a segurança?
Só um pouco. A mudança tira o SSH da porta predefinida, a 22, e os bots que só tentam essa porta deixam de o encontrar, mas um varrimento completo de portas continua a encontrá-lo. [5] As chaves e a desativação das palavras-passe fazem muito mais.
Devo desativar o acesso do root por SSH?
Sim, depois de um utilizador sudo conseguir iniciar sessão com chave. PermitRootLogin no recusa o root por completo, enquanto o valor predefinido, prohibit-password, continua a aceitar chaves do root. [5] As notas do openssh do Ubuntu acrescentam que a sua conta sudo merece os mesmos cuidados que o root. [6]
Preciso do Fail2ban se o SSH só aceitar chaves?
É opcional, mas útil: o Fail2ban bloqueia os endereços que falham repetidamente, por predefinição depois de 5 falhas em 10 minutos. [10] No Ubuntu 24.04, o pacote já vem com a jail sshd ativada. [9]
O UFW vem ativado por predefinição no Ubuntu?
Não. O UFW vem instalado mas desativado e, uma vez ativado, recusa as ligações de entrada que nenhuma regra permita. [8] Acrescente uma regra para o SSH antes de executar ufw enable.
Fontes e referências
- Automatic updates — Ubuntu Server documentation (consultado a 2026-11-03)
- User management — Ubuntu Server documentation (consultado a 2026-11-03)
- OpenSSH server — Ubuntu Server documentation (consultado a 2026-11-03)
- Key-based authentication in OpenSSH for Windows — Microsoft Learn (consultado a 2026-11-03)
- sshd_config(5): OpenSSH daemon configuration file — OpenBSD manual pages (consultado a 2026-11-03)
- openssh: debian/README.Debian (ubuntu/noble-updates) — Ubuntu (Launchpad) (consultado a 2026-11-03)
- cloudinit/ssh_util.py — GitHub (canonical/cloud-init) (consultado a 2026-11-03)
- ufw - program for managing a netfilter firewall — Ubuntu Manpages (consultado a 2026-11-03)
- fail2ban: debian/debian-files/jail.d_defaults-debian.conf (ubuntu/noble-updates) — Ubuntu (Launchpad) (consultado a 2026-11-03)
- fail2ban 1.0.2: config/jail.conf — GitHub (fail2ban/fail2ban) (consultado a 2026-11-03)
Continue a ler
VPS Windows ou Linux: qual deve escolher para a sua empresa?
VPS Windows ou Linux? Compare licenciamento, consumo de recursos, software, gestão e segurança, e decida rapidamente qual se adapta à sua carga de trabalho.
Permitir apenas IPs da Cloudflare no nginx, Apache e IIS
Como permitir apenas IPs da Cloudflare nas portas 80 e 443 com UFW, nginx, Apache e IIS, manter a lista atualizada e impedir acessos diretos ao IP de origem.
Como apontar um domínio para o seu VPS e ter HTTPS grátis
Aponte um domínio para o seu VPS: crie registos A, verifique-os com dig ou nslookup, abra as portas 80 e 443 e ative HTTPS grátis com Let's Encrypt e Certbot.
