Como mudar a porta padrão SSH (22) e reduzir scanners automatizados
Aprenda a mudar a porta padrão SSH 22 no Linux com segurança — sshd_config, firewall UFW, systemd socket e teste sem se trancar fora da VPS.
A porta 22 é o alvo padrão de praticamente todo scanner automatizado de SSH na internet. Botnets como Mirai e suas variantes varrem a faixa IPv4 inteira procurando especificamente serviços expostos na 22 — não porque seja a única porta possível, mas porque é a aposta com maior retorno. Resultado: mesmo uma VPS recém-provisionada acumula centenas de tentativas de login falhadas por hora nos logs antes do primeiro deploy.
Trocar a porta padrão não é segurança real contra um atacante direcionado. Um nmap -p- completo acha qualquer porta SSH em segundos. Mas o objetivo aqui é outro: reduzir o ruído operacional. Menos linhas em /var/log/auth.log, menos disparos do fail2ban, menos CPU gasta rejeitando conexões obviamente maliciosas. Em tutoriais que recomendam isso há uma armadilha frequente: a mudança no sshd_config sozinha não funciona em distros modernas porque o systemd intercepta a porta via socket activation.
Este guia leva cerca de 15 minutos e cobre o procedimento completo em Ubuntu 22.04/24.04, Debian 12 e variantes RHEL — incluindo o ajuste no systemd socket, regras de firewall com UFW e firewalld, configuração de SELinux quando aplicável, e o teste obrigatório antes de fechar a sessão atual.
Pré-requisitos
Acesso root ou sudo a uma VPS Linux, uma sessão SSH ativa que você não vai fechar até confirmar a nova porta, e um cliente SSH local pra abrir uma segunda conexão de teste. Conhecimento básico de editor de texto (nano ou vim).
22/tcp 2222/tcp /etc/ssh/sshd_config ssh.service / sshd.service Mantenha a sessão SSH atual aberta durante todo o procedimento. Você vai abrir uma segunda conexão pra testar a porta nova. Se algo der errado, a sessão original ainda funciona como fallback. Fechar antes de confirmar é a forma mais comum de se trancar fora da VPS.
Escolher a nova porta
A nova porta deve ser não-privilegiada (acima de 1024) pra evitar exigência de root em rebinds, e fora da faixa de serviços conhecidos. Faixa recomendada: 1024–49151. Acima de 49152 é a faixa de portas efêmeras, que o kernel usa pra conexões de saída — funciona, mas tecnicamente compete com sockets dinâmicos.
Opções comuns: 2200, 2222, 22022, 4422. Evite portas associadas a outros serviços (3306 MySQL, 5432 PostgreSQL, 6379 Redis, 8080 HTTP alternativo). Pra este tutorial vamos usar 2222 como exemplo — substitua pelo valor que você escolher.
Antes de continuar, confirme que a porta está livre no servidor:
sudo ss -tlnp | grep :2222
Output esperado: vazio. Se aparecer algum processo, escolha outra porta.
Configurar o sshd
Faça backup do arquivo de configuração atual antes de qualquer mudança:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bakSe algo quebrar, você pode restaurar com sudo cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config e reiniciar o serviço.
Abra o arquivo no editor:
sudo nano /etc/ssh/sshd_configProcure a linha com #Port 22 (geralmente comentada por padrão) e descomente alterando pra porta nova:
Port 2222Salve e feche. Em nano: Ctrl+O, Enter, Ctrl+X.
Valide a sintaxe do sshd_config antes de reiniciar — esse passo evita o serviço falhar silenciosamente:
sudo sshd -tSe não houver output, a sintaxe está ok. Qualquer mensagem de erro indica linha problemática que precisa ser corrigida antes de prosseguir.
Ajustar o systemd socket (passo crítico)
Em Ubuntu 22.04+, Debian 12+ e algumas versões do Fedora, o SSH é ativado via socket do systemd. Isso significa que o systemd escuta na porta 22 e só passa a conexão pro daemon quando recebe um pedido. Mudar só o sshd_config não tem efeito nesse caso — o socket continua na 22.
Verifique se o socket está ativo:
sudo systemctl status ssh.socketSe aparecer Active: active (listening), o socket está controlando a porta. Se aparecer not-found ou inactive, sua distro usa o serviço tradicional e você pode pular pro passo 07.
Desabilite o socket e use só o serviço tradicional — abordagem mais limpa e que evita duplicação de configuração:
sudo systemctl stop ssh.socket
sudo systemctl disable ssh.socket
sudo systemctl mask ssh.socketO mask impede que outros services ativem o socket por dependência. A partir daqui, só o sshd_config controla a porta.
Garanta que o serviço SSH está habilitado pra startup automático:
sudo systemctl enable sshEm distros RHEL-based o nome do serviço é sshd em vez de ssh — ajuste conforme a sua distro.
Liberar a nova porta no firewall
Esse passo precisa acontecer ANTES de reiniciar o SSH. Se você reiniciar primeiro, o sshd vai começar a escutar na 2222 mas o firewall vai bloquear conexões — e sua sessão atual pode ficar instável durante o restart.
Se você usa UFW (Ubuntu/Debian), libere a nova porta:
sudo ufw allow 2222/tcp comment 'SSH custom port'Confirme que a regra foi adicionada:
sudo ufw status numberedNÃO remova a regra da porta 22 ainda — faça isso só depois de confirmar que SSH funciona na 2222.
Se você usa firewalld (CentOS/Rocky/AlmaLinux/Fedora), use esses comandos no lugar:
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reloadEm provedores cloud (incluindo Hostini), confirme também que não há security group ou firewall externo bloqueando a porta. No painel da VPS Hostini, qualquer regra de filtro adicional aparece em “Firewall” — adicione 2222/tcp lá se necessário.
SELinux (apenas RHEL/CentOS/Rocky/AlmaLinux)
Em distros com SELinux em modo enforcing, o policy bloqueia o sshd de fazer bind em portas não-marcadas como ssh_port_t. Sem esse ajuste, o serviço falha ao reiniciar e o erro aparece em /var/log/audit/audit.log.
Instale o utilitário de management de portas se ainda não estiver disponível:
sudo dnf install -y policycoreutils-python-utilsEm Debian-based o SELinux geralmente não está ativo, então pule este passo. Verifique com getenforce — se retornar Disabled ou se o comando não existir, ignore.
Adicione a nova porta ao type ssh_port_t:
sudo semanage port -a -t ssh_port_t -p tcp 2222Confirme:
sudo semanage port -l | grep sshOutput esperado deve listar a 2222 ao lado da 22 com o type ssh_port_t.
Reiniciar e testar
Reinicie o serviço SSH:
sudo systemctl restart sshEm RHEL-based: sudo systemctl restart sshd. Confirme que está escutando na porta nova:
sudo ss -tlnp | grep sshOutput esperado: linha com LISTEN 0 128 *:2222 *:* (ou variante IPv6). Se ainda aparece :22, o systemd socket não foi mascarado corretamente — volte ao passo 05.
SEM fechar a sessão atual, abra um NOVO terminal local e teste a conexão na porta nova:
ssh -p 2222 usuario@seu_ip_da_vpsSe conectar, perfeito. Mantenha as duas sessões abertas por mais alguns minutos pra confirmar estabilidade — só então feche a sessão original.
NÃO feche a sessão original. Verifique nessa ordem: firewall (UFW/firewalld), output de ss -tlnp | grep ssh, mensagens em journalctl -u ssh -n 50. Em VPS com firewall externo do painel, confirme que a porta foi liberada lá também. Se nada resolver, restaure o backup e investigue com calma.
Fechar a porta 22 antiga
Só faça este passo depois de confirmar que SSH funciona estável na 2222 por pelo menos 10 minutos em uma sessão de teste independente.
sudo ufw delete allow 22/tcp
Ou em firewalld:
sudo firewall-cmd --permanent --remove-port=22/tcp
sudo firewall-cmd --reload
Confirme que a 22 não responde mais:
ss -tlnp | grep :22
Output esperado: vazio. A partir daqui, qualquer conexão na 22 cai imediatamente no firewall — exatamente o comportamento que reduz o ruído nos logs.
Verificação final
Confirme tudo de uma vez com um snapshot do estado:
sudo ss -tlnp | grep ssh
sudo systemctl status ssh
sudo ufw status
Você deve ver: SSH escutando só na 2222, serviço active (running), firewall com 2222/tcp permitida e 22/tcp ausente. Em 24 horas, compare o volume de tentativas falhadas:
sudo journalctl -u ssh --since '24 hours ago' | grep -c 'Failed password'
A queda esperada é de 90%+ em comparação com a 22 exposta — o restante são scanners que fazem range scan ou já mapearam seu IP.
Próximos passos
Mudar a porta é só o primeiro nível de hardening. Próximos passos recomendados:
- Desabilitar autenticação por senha (
PasswordAuthentication nono sshd_config) e usar apenas chaves SSH comed25519. - Configurar fail2ban com jail customizado pra nova porta — o filtro default do pacote assume 22 e precisa de override.
- Restringir login root:
PermitRootLogin prohibit-password(ounose você tem usuário sudo configurado). - Habilitar autenticação de dois fatores via Google Authenticator (
libpam-google-authenticator). - Configurar logging centralizado pra correlacionar tentativas entre múltiplas VPS.
Se você está rodando isso em produção, uma VPS Hostini já vem com console serial nativo no painel — então mesmo se você se trancar fora por engano de firewall, é possível recuperar o acesso sem suporte. Conheça as opções em /vps.
Perguntas frequentes
Mudar a porta SSH realmente aumenta a segurança?
Não contra um atacante direcionado — qualquer scan completo (nmap -p-) acha a porta nova em segundos. O ganho real é operacional: scanners automatizados de botnets miram só na 22, então mover pra outra porta corta 95% do ruído nos logs e reduz carga de CPU do fail2ban. É hardening de baixo custo, não defesa de profundidade.
Qual porta escolher pro SSH?
Qualquer porta alta não-privilegiada entre 1024 e 65535 que não conflite com serviços conhecidos. Evite portas comuns de outros serviços (3306 MySQL, 5432 Postgres, 8080 HTTP alt). Boas opções: 2200, 2222, 22022, 49152+. Não use 222 — é registrada pra rsh-spx e firewalls corporativos às vezes bloqueiam.
Por que minha conexão SSH ainda vai pra porta 22 mesmo depois de mudar o sshd_config?
Em distros modernas (Ubuntu 22.04+, Debian 12+, Fedora) o SSH é ativado via socket do systemd (ssh.socket), que tem sua própria configuração de porta independente do sshd_config. Você precisa editar /lib/systemd/system/ssh.socket ou mascarar o socket e usar só o serviço. Esse é o erro mais comum em tutoriais antigos.
Como descubro se algum scanner já encontrou minha nova porta?
Conte tentativas de auth falha por porta nos últimos dias: journalctl -u ssh --since '7 days ago' | grep 'Failed password' | wc -l. Compare antes e depois da mudança. Esperado: queda de 90%+ no volume. Se continuar alto, o atacante já mapeou a porta — considere chaves obrigatórias (PasswordAuthentication no) e fail2ban.
Preciso reabrir a porta 22 no firewall depois?
Não. Após confirmar que SSH funciona na porta nova em outra sessão, remova explicitamente a regra da 22: sudo ufw delete allow 22/tcp. Deixar duas portas abertas dobra a superfície de ataque sem ganho real. Se você precisa de fallback de emergência, prefira console serial do painel da VPS.
SELinux precisa de configuração extra?
Sim, em CentOS/RHEL/Rocky/AlmaLinux com SELinux enforcing. Sem isso o sshd não consegue bind na porta nova — o erro fica em /var/log/audit/audit.log. Comando: sudo semanage port -a -t ssh_port_t -p tcp 2222. Pacote policycoreutils-python-utils precisa estar instalado. Em distros Debian-based o SELinux geralmente não está ativo, então o passo não se aplica.