Gå til innhold
Secret Knock

Hvorfor et portbank ikke åpner døren

Et bank når enten aldri serveren, når den i en form daemonen ikke godtar, eller åpner døren for en adresse du ikke bruker. Gå gjennom listen fra toppen — den er sortert etter hvor ofte hver årsak oppstår.

1. Døren åpnet for en annen adresse

Brannmuren åpner porten for kildeadressen serveren så. Hvis du banket over IPv6 og deretter kobler til med SSH over IPv4 — eller omvendt — er døren åpen for en adresse du ikke bruker. Mobildata, operatør-NAT og VPN-er endrer også adressen.

Sammenlign adressen Secret Knock viser på startskjermen ("Du banker fra …") med adressen i serverloggen, og velg IPv4 eller IPv6 for døren hvis de er forskjellige.

2. Pakkene når ikke serveren

Hotell-, kontor- og mobilnettverk blokkerer iblant uvanlige porter, og en skybasert brannmur foran serveren kan forkaste pakker før knockd eller fwknopd ser dem. Overvåk trafikken på serveren mens du banker:

# 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
På serveren

3. Sekvensen kommer frem i feil form

  1. 1SYN-er sendt på nytt: Når et TCP-bank ikke får svar, sender klientens operativsystem den samme SYN-en på nytt. knockd 0.8 tilbakestiller sekvensen ved en slik gjentakelse. Secret Knock sender hvert TCP-bank som én enkelt SYN og avbryter forsøket umiddelbart; andre klienter gjør kanskje ikke det.
  2. 2Tidskrav: Alle trinn må komme frem i riktig rekkefølge innen seq_timeout. Legg til en kort forsinkelse før et trinn hvis en ruter underveis endrer rekkefølgen på pakker.
  3. 3Protokoll: Et UDP-trinn må sendes som UDP, og et TCP-trinn som TCP — kontroller hvert trinn mot knockd.conf.
  4. 4tcpflags = syn gjør at knockd ignorerer TCP-pakker uten SYN-flagget. Uten dette teller også de andre pakkene i en tilkobling til samme port som treff og kan ødelegge sekvensen.

4. fwknop: nøkler, klokker og gjentakelser

  1. 1Begge nøklene må samsvare med access.conf: Rijndael-nøkkelen og HMAC-nøkkelen, med samme hashfunksjon (SHA-256 som standard).
  2. 2fwknopd avviser pakker eldre enn MAX_SPA_PACKET_AGE (120 sekunder som standard), så en enhetsklokke som går mye feil, får alle pakker til å se gamle ut.
  3. 3Hver SPA-pakke kan brukes én gang; fwknopd forkaster med hensikt en pakke som sendes på nytt.
  4. 4Hvis du banker over HTTP, må noe godta TCP-tilkoblinger på den porten, ellers blir forespørselen aldri sendt.

5. Døren åpnes, men SSH mislykkes fortsatt

  1. 1Regelrekkefølge: Regelen daemonen legger til, må komme før regelen som forkaster porten — en iptables -A legger til etter en eksisterende DROP og får aldri treff.
  2. 2Tidsvinduet: cmd_timeout eller FW_ACCESS_TIMEOUT lukket døren før SSH koblet til. Koble til innenfor tidsvinduet; etablerte økter fortsetter å fungere hvis brannmuren godtar etablerte tilkoblinger.
  3. 3Secret Knocks portkontroll etter bankingen forteller deg om porten svarte i det hele tatt, separat fra SSH-autentisering.

Alle eksempler på GitHub → Alle konfigurasjonene på denne siden, klare til å kopiere: github.com/mobilcomm/secretknock-examples (public domain).

Spørsmål

Hvordan ser jeg hva appen faktisk sendte?

Dørhistorikken viser hvert bank med tidspunkt, resultat og adressefamilie, og redigereren viser det samme banket som en terminalkommando du kan kjøre fra en datamaskin for å sammenligne.

Veiledninger for oppsettet ditt