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 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 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
- 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 →
- Por que uma batida de porta não abre →
- exemplos de knockd.conf →
- configuração do servidor fwknop →
- Port knocking, VPN ou fail2ban? →
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 →