Troubleshooting de ufw e SSH - Verificando Regras Allow e Recuperação
O que você vai aprender
- Como isolar sistematicamente o
ufwcomo 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:
- Confirme a porta SSH (nem sempre é 22)
- Verifique se o ufw é a causa:
sudo ufw status verbose - Verifique as regras allow:
sudo ufw status numbered - Adicione o allow necessário:
sudo ufw allow <PORTA>/tcp - 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:
22ou personalizada como2222 - 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
Fromestá restrito (trancado se seu IP mudar)?
5. Recuperação rápida: liberar a porta SSH
Conclusão:
sudo ufw allow <PORTA>/tcppara 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 tcpapó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 escutandosucceeded-> 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:
sudo ufw allow <porta-ssh>/tcpsudo ufw enablesudo 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 / publickeyindicam a camada do problema - Não execute cegamente
ufw enable/deny-- verifique o status numbered primeiro