Ves al contingut
Secret Knock

Port knocking explicat

El port knocking manté un servei invisible fins que algú demostra que coneix un secret. Aquesta guia explica com funciona, les dues implementacions habituals — knockd i fwknop — i per què fallen les trucades a la pràctica.

Com funciona el port knocking

El tallafoc descarta totes les connexions al port protegit, de manera que un escàner no hi veu res. Un petit dimoni vigila el trànsit que arriba al tallafoc. Quan una adreça d’origen produeix el patró esperat, el dimoni afegeix una regla de tallafoc que permet aquella adreça, normalment durant poc temps.

El patró és la trucada. Amb knockd, és una seqüència d’intents de connexió a ports específics en un ordre concret i dins d’un límit de temps. Amb fwknop, és un únic paquet xifrat.

knockd: seqüències de trucades

knockd escolta en una interfície i compara els intents de connexió amb les seqüències de /etc/knockd.conf. Una seqüència pot combinar ports TCP i UDP. Quan hi coincideix, knockd executa una ordre, normalment una regla iptables o nftables per a l’adreça que fa la trucada (%IP%).

Aquest exemple obre SSH per a l’adreça que fa la trucada i el torna a tancar al cap de 10 segons. Les sessions SSH existents continuen funcionant si el tallafoc accepta connexions establertes.

[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 — obre SSH durant 10 segons

Tria els teus propis ports; no reutilitzis mai ports d’exemples publicats. tcpflags = syn fa que knockd compti només els paquets amb l’indicador SYN, el primer paquet d’un intent de connexió.

fwknop: autorització de paquet únic

fwknop substitueix la seqüència per un paquet UDP xifrat (AES) i autenticat (HMAC). El servidor, fwknopd, el captura passivament, el verifica, comprova que no sigui una reproducció i obre el port sol·licitat per a l’adreça que hi ha dins del paquet.

Genera claus amb fwknop --key-gen i posa-les a l’access.conf del servidor. Secret Knock importa la part del client des del teu .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 — permet SSH amb una clau SPA

Com que l’adreça permesa viatja dins del paquet xifrat, SPA pot obrir un port per a una adreça diferent de la que envia el paquet, cosa útil quan truques des d’un telèfon amb dades mòbils per a un portàtil que és en un altre lloc.

Per què fallen les trucades

  • IPv4 davant d’IPv6: la trucada ha sortit per una família d’adreces i SSH es connecta per l’altra. El tallafoc ha obert la porta per a una adreça que no fas servir.
  • Una adreça pública diferent: amb dades mòbils, darrere d’un NAT de l’operador o d’una VPN, el servidor veu una IP diferent de l’esperada. Comprova l’adreça des d’on truques.
  • SYN retransmesos: si una trucada TCP no rep resposta, el sistema operatiu del client torna a enviar el mateix SYN. A les nostres proves, knockd 0.8 reiniciava la seqüència amb un SYN repetit, de manera que un client ha d’enviar cada trucada una sola vegada i aturar l’intent ràpidament.
  • Temporització: les trucades que arriben fora de seq_timeout, o en l’ordre incorrecte, reinicien la seqüència.
  • Dispositius intermediaris: algunes xarxes bloquegen o reescriuen trànsit cap a ports inusuals, de manera que una trucada que funciona a casa pot fallar en una xarxa d’hotel o d’oficina.

És segur?

Una seqüència de knockd s’envia sense xifrar; qualsevol persona que pugui observar el teu trànsit la pot reproduir. Fes-la servir per ocultar un servei dels escàners, davant de claus SSH, no en lloc d’aquestes. SPA de fwknop elimina aquesta mancança amb xifratge, HMAC i protecció contra reproduccions, i és la millor opció quan el trànsit pot ser observat.

Trucades des de l’iPhone, el Mac i l’Apple Watch

Secret Knock envia seqüències de knockd i paquets SPA de fwknop des de l’iPhone, l’iPad i el Mac, comprova que el port respongui i obre la teva app SSH. L’Apple Watch fa trucades mitjançant l’iPhone enllaçat, perquè watchOS no permet que les apps enviïn paquets TCP o UDP en brut; lluny de l’iPhone, pot enviar SPA mitjançant HTTP a servidors que ho permetin.

Guies per a la vostra configuració

Mantén la porta tancada. Porta la trucada amb tu.

Secret Knock arribarà aviat a l’App Store per a l’iPhone, l’iPad, el Mac i l’Apple Watch.

Secret Knock →