Pular para o conteúdo
Secret Knock

Port knocking explicado

O port knocking mantém um serviço invisível até que alguém prove conhecer um segredo. Este guia aborda como ele funciona, as duas implementações comuns — knockd e fwknop — e por que as batidas falham na prática.

Como o port knocking funciona

O firewall descarta todas as conexões à porta protegida, portanto um scanner não vê nada. Um pequeno daemon monitora o tráfego que chega ao firewall. Quando um endereço de origem produz o padrão esperado, o daemon adiciona uma regra de firewall que permite esse endereço, geralmente por pouco tempo.

O padrão é a batida. Com o knockd, é uma sequência de tentativas de conexão a portas específicas em uma ordem específica e dentro de um limite de tempo. Com o fwknop, é um único pacote criptografado.

knockd: sequências de batidas

O knockd escuta em uma interface e compara tentativas de conexão com as sequências em /etc/knockd.conf. Uma sequência pode combinar portas TCP e UDP. Quando há correspondência, o knockd executa um comando — normalmente uma regra iptables ou nftables para o endereço que bateu (%IP%).

Este exemplo abre o SSH para o endereço que bateu e o fecha novamente após 10 segundos. Sessões SSH existentes continuam funcionando se seu firewall aceitar conexões estabelecidas.

[options]
    UseSyslog

[openSSH]
    sequence      = 7311:tcp,8822:tcp,9133:udp
    seq_timeout   = 10
    tcpflags      = syn
    start_command = /usr/sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
    cmd_timeout   = 10
    stop_command  = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
/etc/knockd.conf — abrir SSH por 10 segundos

Escolha suas próprias portas; nunca reutilize portas de exemplos publicados. tcpflags = syn faz o knockd contar apenas pacotes com a flag SYN — o primeiro pacote de uma tentativa de conexão.

fwknop: Autorização de Pacote Único

O fwknop substitui a sequência por um pacote UDP criptografado (AES) e autenticado (HMAC). O servidor, fwknopd, o captura passivamente, verifica-o, confere que não é uma repetição e abre a porta solicitada para o endereço dentro do pacote.

Gere chaves com fwknop --key-gen e coloque-as no access.conf do servidor. O Secret Knock importa o lado do cliente do seu .fwknoprc.

SOURCE              ANY
OPEN_PORTS          tcp/22
KEY_BASE64          <output of fwknop --key-gen>
HMAC_KEY_BASE64     <output of fwknop --key-gen>
FW_ACCESS_TIMEOUT   30
/etc/fwknop/access.conf — permitir SSH com uma chave SPA

Como o endereço permitido viaja dentro do pacote criptografado, o SPA pode abrir uma porta para um endereço diferente daquele que envia o pacote — útil quando você bate de um telefone nos dados móveis para um notebook em outro lugar.

Por que as batidas falham

  • IPv4 vs IPv6: a batida saiu por uma família de endereços e o SSH se conecta pela outra. O firewall abriu a porta para um endereço que você não está usando.
  • Um endereço público diferente: nos dados móveis, atrás de NAT da operadora ou de uma VPN, o servidor vê um IP diferente do esperado. Confira o endereço de onde você bate.
  • SYN retransmitidos: se uma batida TCP não é respondida, o sistema operacional do cliente envia o mesmo SYN novamente. Em nossos testes, o knockd 0.8 redefiniu a sequência com esse SYN repetido, portanto o cliente deve enviar cada batida uma vez e encerrar a tentativa rapidamente.
  • Tempo: batidas que chegam fora de seq_timeout ou na ordem errada reiniciam a sequência.
  • Equipamentos intermediários: algumas redes bloqueiam ou reescrevem tráfego para portas incomuns, então uma batida que funciona em casa pode falhar em uma rede de hotel ou escritório.

É seguro?

Uma sequência do knockd é enviada sem criptografia; qualquer pessoa que possa observar seu tráfego pode repeti-la. Use-a para ocultar um serviço de scanners, diante de chaves SSH — não no lugar delas. O SPA do fwknop elimina essa lacuna com criptografia, HMAC e proteção contra repetição, sendo a melhor escolha quando seu tráfego pode ser observado.

Batidas do iPhone, Mac e Apple Watch

O Secret Knock envia sequências do knockd e pacotes SPA do fwknop do iPhone, iPad e Mac, verifica se a porta responde e abre seu app SSH. O Apple Watch bate pelo iPhone emparelhado, pois o watchOS não permite que apps enviem pacotes TCP ou UDP brutos; longe do iPhone, ele pode enviar SPA por HTTP a servidores que permitam isso.

Guias para sua configuração

Mantenha a porta fechada. Leve a batida com você.

O Secret Knock está chegando à App Store para iPhone, iPad, Mac e Apple Watch.

Secret Knock →