Por que uma batida de porta não abre a porta
Uma batida ou nunca chega ao servidor, chega em um formato que o daemon não aceita ou abre a porta para um endereço que você não está usando. Siga a lista de cima para baixo — ela está ordenada pela frequência com que cada causa ocorre.
1. A porta abriu para outro endereço
O firewall abre a porta para o endereço de origem visto pelo servidor. Se você bateu usando IPv6 e depois o SSH se conecta usando IPv4 — ou vice-versa — a porta estará aberta para um endereço que você não está usando. Dados móveis, NAT da operadora e VPNs também alteram o endereço.
Compare o endereço que o Secret Knock mostra na tela inicial do app ("Você bate de …") com o endereço no registro do servidor e fixe IPv4 ou IPv6 para a porta se eles forem diferentes.
2. Os pacotes não chegam ao servidor
Redes de hotéis, escritórios e móveis às vezes bloqueiam portas incomuns, e um firewall na nuvem à frente do servidor descarta pacotes antes que knockd ou fwknopd os veja. Monitore o tráfego no servidor enquanto você bate:
# knockd (UseSyslog): every recognised step and the command it ran
sudo journalctl -u knockd -f
# Do the packets reach the server at all? (use your interface and ports)
sudo tcpdump -ni eth0 'tcp port 7311 or tcp port 8822 or udp port 9133'
# fwknopd in the foreground with verbose output
sudo fwknopd -f -v 3. A sequência chega no formato errado
- 1SYNs retransmitidos: quando uma batida TCP não recebe resposta, o sistema operacional do cliente reenvia o mesmo SYN. O knockd 0.8 redefine a sequência em caso de repetição. O Secret Knock envia cada batida TCP como um único SYN e interrompe a tentativa imediatamente; outros clientes talvez não façam isso.
- 2Temporização: todas as etapas devem chegar dentro de seq_timeout e na ordem correta. Adicione um pequeno atraso antes de uma etapa se um roteador intermediário reordenar os pacotes.
- 3Protocolo: uma etapa UDP deve ser enviada como UDP, uma etapa TCP como TCP — verifique cada etapa em relação a knockd.conf.
- 4tcpflags = syn faz com que o knockd ignore pacotes TCP sem a flag SYN. Sem isso, os outros pacotes de uma conexão à mesma porta também contam como ocorrências e podem interromper a sequência.
4. fwknop: chaves, relógios e repetições
- 1As duas chaves devem corresponder a access.conf: a chave Rijndael e a chave HMAC, com o mesmo resumo (SHA-256 por padrão).
- 2fwknopd rejeita pacotes mais antigos que MAX_SPA_PACKET_AGE (120 segundos por padrão), portanto um relógio do dispositivo muito incorreto faz com que todos os pacotes pareçam antigos.
- 3Cada pacote SPA pode ser usado uma vez; fwknopd descarta propositalmente um pacote repetido.
- 4Se você bater usando HTTP, algo deverá aceitar conexões TCP nessa porta, caso contrário a solicitação nunca será enviada.
5. A porta abre, mas o SSH ainda falha
- 1Ordem das regras: a regra adicionada pelo daemon deve vir antes da regra que descarta a porta — um iptables -A acrescenta após um DROP existente e nunca corresponde.
- 2A janela: cmd_timeout ou FW_ACCESS_TIMEOUT fechou a porta antes de o SSH se conectar. Conecte-se dentro da janela; sessões estabelecidas continuam funcionando se o firewall aceitar conexões estabelecidas.
- 3A verificação de porta do Secret Knock após a batida informa se a porta respondeu, independentemente da autenticação SSH.
Todos os exemplos no GitHub → Todas as configurações desta página, prontas para copiar: github.com/mobilcomm/secretknock-examples (domínio público).
Perguntas
Como vejo o que o app realmente enviou?
O histórico da porta mostra cada batida com horário, resultado e família de endereços, e o editor mostra a mesma batida como um comando de terminal que você pode executar em um computador para comparar.
Guias para sua configuração
- Port knocking explicado →
- knockd no iPhone, iPad e Mac →
- SPA do fwknop no iPhone, Mac e Apple Watch →
- Port knocking no MikroTik →
- Port knocking do DrayTek Vigor →
- Oculte o SSH com port knocking →
- Port knocking no Apple Watch →
- exemplos de knockd.conf →
- configuração do servidor fwknop →
- Port knocking, VPN ou fail2ban? →