Troubleshooting de ufw e SSH - Verificando Regras Allow e Recuperação

Troubleshooting de ufw e SSH - Verificando Regras Allow e Recuperação

O que você vai aprender

  • Como isolar sistematicamente o ufw como causa quando o SSH não conecta
  • Recuperação rápida quando "permitido mas não conecta" ou "trancado fora de repente"
  • Como evitar acidentes comuns (se trancar fora)

Resumo rápido

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

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

Importante

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

1. Primeiro, esclarecer a situação

Conclusão: Confirme host, porta e IP de origem antes de qualquer mudança de firewall para evitar se trancar.

Confirme estes 3 pontos:

  • Host alvo: Domínio ou IP
  • Porta alvo: 22 ou personalizada como 2222
  • Origem: Casa, escritório, bastion, etc. (necessário para restrições de IP)

2. Verificar se o ufw é a causa (faça isso primeiro)

Conclusão: Execute sudo ufw status verbose -- se inativo, o ufw não está causando a falha SSH.

Se o ufw está inativo, ele não é a causa (provavelmente outra coisa).

$ sudo ufw status verbose

Exemplo de saída (ativo):

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

Exemplo de saída (inativo):

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

3. Confirmar o número da porta SSH (22 nem sempre é correto)

Conclusão: Execute sudo sshd -T | grep '^port' para confirmar a porta SSH real que o sshd está usando.

A porta SSH é frequentemente alterada de 22 por segurança.

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

Verifique também (para configs incluídas):

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

sshd -T mostra a configuração real em execução, então é confiável.

4. Verificar regras do ufw (numeradas)

Conclusão: sudo ufw status numbered -- verifique se a porta SSH tem ALLOW IN e se não há DENY sobrescrevendo.

Verifique o estado atual primeiro. Não adivinhe.

$ sudo ufw status numbered

Pontos-chave:

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

5. Recuperação rápida: liberar a porta SSH

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

Prioridade é conseguir conectar novamente. Restrinja com limitação de IP depois.

5-1. Liberar porta padrão 22

$ sudo ufw allow 22/tcp

5-2. Liberar porta 2222 (exemplo)

$ sudo ufw allow 2222/tcp

Sempre verifique após adicionar:

$ sudo ufw status numbered

6. Mais seguro: liberar com restrição de IP (recomendado)

Conclusão: ufw allow from <IP> to any port <PORTA> proto tcp após confirmar um IP estático.

SSH restrito por IP é 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, você será trancado no dia seguinte. Considere "IP estático", "VPN" ou "bastion host" para produção.

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

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

Causa 1: sshd não está executando / caiu

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

Causa 2: servidor não está 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 administração do VPS, etc. O ufw sozinho não resolve.

$ nc -vz example.com 2222
  • timed out -> Caminho/firewall (incluindo lado da nuvem)
  • refused -> Servidor não escutando
  • succeeded -> Caminho de rede está 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 interpretação

Conclusão: "Timed out" é rota bloqueada; "refused" é nada escutando; publickey é autenticação.

8-1. Connection timed out

Significado: Pacotes não 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, autenticação falha (não é ufw)

8-4. Host key verification failed

Significado: Incompatibilidade no known_hosts (não é ufw)

$ ssh-keygen -R example.com

9. Coisas a evitar

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

Não faça: habilitar ufw sem regra de allow para SSH

Executar ufw enable sem SSH permitido tranca você remotamente.

Ordem segura:

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

Não faça: encher de regras deny sem entender

Muitas regras deny criam problemas de prioridade e dificultam a recuperação.

Não faça: adicionar restrições de IP sem verificar "seu IP"

Se o IP residencial muda frequentemente, restrição 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 está ativo?" -> "Confirmar porta SSH" -> "Verificar regras" -> "Adicionar allow"
  • Diferenças entre timed out / refused / publickey indicam a camada do problema
  • Não execute cegamente ufw enable/deny -- verifique o status numbered primeiro

Próximas leituras