Troubleshooting de ufw e SSH - Verificando Regras Allow e Recuperacao

Troubleshooting de ufw e SSH - Verificando Regras Allow e Recuperacao

O que voce vai aprender

  • Como isolar sistematicamente o ufw como causa quando o SSH nao conecta
  • Recuperacao rapida quando "permitido mas nao conecta" ou "trancado fora de repente"
  • Como evitar acidentes comuns (se trancar fora)

Resumo rapido

Quando o SSH nao conecta, siga esta ordem de cima para baixo:

  1. Confirme a porta SSH (nem sempre e 22)
  2. Verifique se o ufw e a causa: sudo ufw status verbose
  3. Verifique as regras allow: sudo ufw status numbered
  4. Adicione o allow necessario: sudo ufw allow <PORTA>/tcp
  5. Ainda falhando? Verifique causas fora do ufw (porta escutando, sshd, security groups)

Importante

Este artigo assume que voce pode acessar o servidor (via console ou rota alternativa). Se voce esta trancado fora via SSH, use o console da nuvem ou console web do VPS.

1. Primeiro, esclarecer a situacao

Conclusao: Confirme host, porta e IP de origem antes de qualquer mudanca de firewall para evitar se trancar.

Confirme estes 3 pontos:

  • Host alvo: Dominio ou IP
  • Porta alvo: 22 ou personalizada como 2222
  • Origem: Casa, escritorio, bastion, etc. (necessario para restricoes de IP)

2. Verificar se o ufw e a causa (faca isso primeiro)

Conclusao: Execute sudo ufw status verbose -- se inativo, o ufw nao esta causando a falha SSH.

Se o ufw esta inativo, ele nao e a causa (provavelmente outra coisa).

$ sudo ufw status verbose

Exemplo de saida (ativo):

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)

Exemplo de saida (inativo):

Status: inactive
  • inactive -> Nao e o ufw (verifique sshd, porta, firewall de nuvem, etc.)
  • active -> Prossiga para verificar as regras

3. Confirmar o numero da porta SSH (22 nem sempre e correto)

Conclusao: Execute sudo sshd -T | grep '^port' para confirmar a porta SSH real que o sshd esta usando.

A porta SSH e frequentemente alterada de 22 por seguranca.

$ sudo grep -nE '^\s*Port\s+' /etc/ssh/sshd_config

Verifique tambem (para configs incluidas):

$ sudo sshd -T | grep -i '^port '

sshd -T mostra a configuracao real em execucao, entao e confiavel.

4. Verificar regras do ufw (numeradas)

Conclusao: sudo ufw status numbered -- verifique se a porta SSH tem ALLOW IN e se nao ha DENY sobrescrevendo.

Verifique o estado atual primeiro. Nao adivinhe.

$ sudo ufw status numbered

Pontos-chave:

  • A porta SSH (ex: 22/tcp ou 2222/tcp) esta em ALLOW IN?
  • Ha alguma regra DENY (problemas de prioridade)?
  • O From esta restrito (trancado se seu IP mudar)?

5. Recuperacao rapida: liberar a porta SSH

Conclusao: sudo ufw allow <PORTA>/tcp para restaurar o SSH, depois verifique com status numbered.

Prioridade e conseguir conectar novamente. Restrinja com limitacao de IP depois.

5-1. Liberar porta padrao 22

$ sudo ufw allow 22/tcp

5-2. Liberar porta 2222 (exemplo)

$ sudo ufw allow 2222/tcp

Sempre verifique apos adicionar:

$ sudo ufw status numbered

6. Mais seguro: liberar com restricao de IP (recomendado)

Conclusao: ufw allow from <IP> to any port <PORTA> proto tcp apos confirmar um IP estatico.

SSH restrito por IP e mais seguro que totalmente aberto.

$ sudo ufw allow from 203.0.113.10 to any port 2222 proto tcp

Aviso: Se seu IP residencial muda, voce sera trancado no dia seguinte. Considere "IP estatico", "VPN" ou "bastion host" para producao.

7. Top 5 causas de "permitido mas ainda falha"

Conclusao: Quando a regra allow existe mas o SSH falha, verifique sshd, porta e firewall de nuvem.

Causa 1: sshd nao esta executando / caiu

$ sudo systemctl status ssh
$ sudo systemctl start ssh
$ sudo journalctl -u ssh -n 200

Causa 2: servidor nao esta escutando naquela porta

$ sudo ss -lntp | grep ':22 '
$ sudo ss -lntp | grep ':2222 '

Causa 3: firewall de nuvem/hosting bloqueando

AWS Security Groups, GCP VPC Firewall, firewall do painel de administracao do VPS, etc. O ufw sozinho nao resolve.

$ nc -vz example.com 2222
  • timed out -> Caminho/firewall (incluindo lado da nuvem)
  • refused -> Servidor nao escutando
  • succeeded -> Caminho de rede esta aberto

Causa 4: prioridade de regra ufw ou deny tendo efeito

$ sudo ufw status numbered
$ sudo ufw delete 3

Causa 5: apenas IPv6 fechado / apenas IPv6 aberto

Verifique Anywhere (v6) no status para regras IPv6.

8. Exemplos de erros e interpretacao

Conclusao: "Timed out" e rota bloqueada; "refused" e nada escutando; publickey e autenticacao.

8-1. Connection timed out

Significado: Pacotes nao chegam (firewall/SG/roteamento/DNS/host fora)

8-2. Connection refused

Significado: Chegou mas nada escutando naquela porta

8-3. Permission denied (publickey)

Significado: Rede funciona, autenticacao falha (nao e ufw)

8-4. Host key verification failed

Significado: Incompatibilidade no known_hosts (nao e ufw)

$ ssh-keygen -R example.com

9. Coisas a evitar

Conclusao: Adicione SSH allow antes de ufw enable, evite empilhar deny, confirme estabilidade do IP.

Nao faca: habilitar ufw sem regra de allow para SSH

Executar ufw enable sem SSH permitido tranca voce remotamente.

Ordem segura:

  1. sudo ufw allow <porta-ssh>/tcp
  2. sudo ufw enable
  3. sudo ufw status numbered

Nao faca: encher de regras deny sem entender

Muitas regras deny criam problemas de prioridade e dificultam a recuperacao.

Nao faca: adicionar restricoes de IP sem verificar "seu IP"

Se o IP residencial muda frequentemente, restricao de IP sem VPN/bastion causa trancamentos.

Template para copiar e colar

# Liberar SSH(2222) totalmente aberto (recuperacao primeiro)
sudo ufw allow 2222/tcp
sudo ufw status numbered

# Liberar SSH(2222) de IP especifico (producao)
sudo ufw allow from 203.0.113.10 to any port 2222 proto tcp
sudo ufw status numbered

# Excluir regra deny por numero
sudo ufw status numbered
sudo ufw delete 3
sudo ufw status numbered

# Verificar se sshd esta executando
sudo systemctl status ssh
sudo journalctl -u ssh -n 200
sudo ss -lntp | grep ':2222 '

# Verificacao de conectividade no lado do cliente
nc -vz example.com 2222

Resumo

  • Troubleshooting do ufw: "ufw esta ativo?" -> "Confirmar porta SSH" -> "Verificar regras" -> "Adicionar allow"
  • Diferencas entre timed out / refused / publickey indicam a camada do problema
  • Nao execute cegamente ufw enable/deny -- verifique o status numbered primeiro

Proximas leituras