Ga naar inhoud
Secret Knock

Port knocking uitgelegd

Port knocking houdt een dienst onzichtbaar totdat iemand bewijst een geheim te kennen. Deze gids legt uit hoe het werkt, behandelt de twee veelgebruikte implementaties — knockd en fwknop — en waarom kloppen in de praktijk mislukken.

Hoe port knocking werkt

De firewall weigert elke verbinding met de beschermde poort, dus een scanner ziet niets. Een kleine daemon volgt het verkeer dat de firewall bereikt. Wanneer één bronadres het verwachte patroon produceert, voegt de daemon een firewallregel toe die dat adres toestaat, meestal voor korte tijd.

Het patroon is de klop. Met knockd is dit een reeks verbindingspogingen naar specifieke poorten in een specifieke volgorde en binnen een tijdslimiet. Met fwknop is het één versleuteld pakket.

knockd: klopreeksen

knockd luistert op een interface en vergelijkt verbindingspogingen met de reeksen in /etc/knockd.conf. Een reeks kan TCP- en UDP-poorten combineren. Bij een overeenkomst voert knockd een opdracht uit — meestal een iptables- of nftables-regel voor het kloppende adres (%IP%).

Dit voorbeeld opent SSH voor het kloppende adres en sluit het na 10 seconden weer. Bestaande SSH-sessies blijven werken als je firewall bestaande verbindingen accepteert.

[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 — open SSH gedurende 10 seconden

Kies je eigen poorten; hergebruik nooit poorten uit gepubliceerde voorbeelden. tcpflags = syn laat knockd alleen pakketten met de SYN-vlag tellen — het eerste pakket van een verbindingspoging.

fwknop: Single Packet Authorization

fwknop vervangt de reeks door één UDP-pakket dat versleuteld (AES) en geverifieerd (HMAC) is. De server, fwknopd, onderschept het passief, verifieert het, controleert of het geen herhaling is en opent de gevraagde poort voor het adres in het pakket.

Genereer sleutels met fwknop --key-gen en plaats ze in access.conf van de server. Secret Knock importeert de clientzijde vanuit je .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 — sta SSH toe met een SPA-sleutel

Omdat het toegestane adres in het versleutelde pakket staat, kan SPA een poort openen voor een ander adres dan het adres dat het pakket verstuurt — handig wanneer je vanaf een telefoon met mobiele data klopt voor een laptop elders.

Waarom kloppen mislukken

  • IPv4 versus IPv6: de klop ging via één adresfamilie en SSH maakt verbinding via de andere. De firewall opende de deur voor een adres dat je niet gebruikt.
  • Een ander openbaar adres: bij mobiele data, achter carrier-NAT of een VPN ziet de server een ander IP dan je verwacht. Controleer het adres waarvandaan je klopt.
  • Opnieuw verzonden SYNs: als een TCP-klop niet wordt beantwoord, verzendt het besturingssysteem van de client dezelfde SYN opnieuw. In onze tests stelde knockd 0.8 de reeks opnieuw in bij zo'n herhaalde SYN, dus een client moet elke klop één keer verzenden en de poging snel stoppen.
  • Timing: kloppen die buiten seq_timeout aankomen, of in de verkeerde volgorde, starten de reeks opnieuw.
  • Tussenliggende netwerkapparatuur: sommige netwerken blokkeren of herschrijven verkeer naar ongebruikelijke poorten, dus een klop die thuis werkt kan mislukken op een hotel- of kantoornetwerk.

Is het veilig?

Een knockd-reeks wordt onversleuteld verstuurd; iedereen die je verkeer kan bekijken, kan deze herhalen. Gebruik deze om een dienst voor scanners te verbergen, vóór SSH-sleutels — niet in plaats daarvan. fwknop SPA dicht dat gat met versleuteling, HMAC en bescherming tegen herhaling, en is de betere keuze wanneer je verkeer mogelijk wordt gevolgd.

Kloppen vanaf iPhone, Mac en Apple Watch

Secret Knock verstuurt knockd-reeksen en fwknop SPA-pakketten vanaf iPhone, iPad en Mac, controleert of de poort antwoordt en opent je SSH-app. Apple Watch klopt via de gekoppelde iPhone, omdat watchOS apps niet toestaat onbewerkte TCP- of UDP-pakketten te versturen; zonder iPhone in de buurt kan deze SPA via HTTP versturen naar servers die dit inschakelen.

Handleidingen voor je configuratie

Houd de deur dicht. Neem de klop mee.

Secret Knock komt naar de App Store voor iPhone, iPad, Mac en Apple Watch.

Secret Knock →