Siirry sisältöön
Secret Knock

Port knocking selitetty

Port knocking pitää palvelun näkymättömänä, kunnes joku osoittaa tietävänsä salaisuuden. Tämä opas kertoo, miten se toimii, esittelee kaksi yleistä toteutusta — knockd ja fwknop — sekä käytännön syyt koputusten epäonnistumiseen.

Näin port knocking toimii

Palomuuri hylkää kaikki yhteydet suojattuun porttiin, joten skanneri ei näe mitään. Pieni taustaprosessi tarkkailee palomuuriin tulevaa liikennettä. Kun yksi lähdeosoite muodostaa odotetun kuvion, taustaprosessi lisää palomuurisäännön, joka sallii kyseisen osoitteen yleensä lyhyeksi ajaksi.

Kuvio on koputus. knockd:ssä se on yhteysyritysten sarja tiettyihin portteihin tietyssä järjestyksessä ja aikarajan sisällä. fwknop:ssa se on yksi salattu paketti.

knockd: koputussekvenssit

knockd kuuntelee rajapintaa ja vertaa yhteysyrityksiä /etc/knockd.conf-tiedostossa oleviin sekvensseihin. Sekvenssi voi yhdistää TCP- ja UDP-portteja. Kun se täsmää, knockd suorittaa komennon — tyypillisesti iptables- tai nftables-säännön koputtavalle osoitteelle (%IP%).

Tämä esimerkki avaa SSH:n koputtavalle osoitteelle ja sulkee sen uudelleen 10 sekunnin kuluttua. Nykyiset SSH-istunnot toimivat edelleen, jos palomuurisi hyväksyy muodostetut yhteydet.

[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 — avaa SSH 10 sekunniksi

Valitse omat porttisi; älä koskaan käytä julkaistujen esimerkkien portteja uudelleen. tcpflags = syn saa knockd:n laskemaan vain SYN-lipulla varustetut paketit — yhteysyrityksen ensimmäisen paketin.

fwknop: Single Packet Authorization

fwknop korvaa sekvenssin yhdellä UDP-paketilla, joka on salattu (AES) ja todennettu (HMAC). Palvelin, fwknopd, kaappaa sen passiivisesti, vahvistaa sen, tarkistaa ettei se ole toisto ja avaa pyydetyn portin paketissa olevalle osoitteelle.

Luo avaimet komennolla fwknop --key-gen ja lisää ne palvelimen access.conf-tiedostoon. Secret Knock tuo asiakaspuolen .fwknoprc-tiedostostasi.

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 — salli SSH SPA-avaimella

Koska sallittu osoite kulkee salatun paketin sisällä, SPA voi avata portin muulle kuin paketin lähettävälle osoitteelle — hyödyllistä, kun koputat mobiilidataa käyttävästä puhelimesta toisessa paikassa olevaa kannettavaa varten.

Miksi koputukset epäonnistuvat

  • IPv4 vs IPv6: koputus lähti yhden osoiteperheen kautta ja SSH yhdistää toisen kautta. Palomuuri avasi oven osoitteelle, jota et käytä.
  • Eri julkinen osoite: mobiilidatassa, operaattorin NAT:n tai VPN:n takana palvelin näkee muun IP-osoitteen kuin odotat. Tarkista osoite, josta koputat.
  • Uudelleenlähetetyt SYN-paketit: jos TCP-koputukseen ei vastata, asiakkaan käyttöjärjestelmä lähettää saman SYN-paketin uudelleen. Testeissämme knockd 0.8 nollasi sekvenssin tällaisesta toistetusta SYN-paketista, joten asiakkaan on lähetettävä jokainen koputus kerran ja lopetettava yritys nopeasti.
  • Ajoitus: seq_timeout-ajan ulkopuolella tai väärässä järjestyksessä saapuvat koputukset aloittavat sekvenssin alusta.
  • Välilaitteet: jotkin verkot estävät tai muokkaavat liikennettä epätavallisiin portteihin, joten kotona toimiva koputus voi epäonnistua hotelli- tai toimistoverkossa.

Onko se turvallista?

knockd-sekvenssi lähetetään salaamattomana; kuka tahansa liikennettäsi tarkkaileva voi toistaa sen. Käytä sitä palvelun piilottamiseen skannereilta SSH-avainten edessä — älä niiden sijaan. fwknop SPA korjaa tämän puutteen salauksella, HMAC:lla ja toistosuojauksella, ja on parempi valinta, kun liikennettäsi voidaan tarkkailla.

Koputtaminen iPhone-, Mac- ja Apple Watch -laitteilla

Secret Knock lähettää knockd-sekvenssejä ja fwknop SPA -paketteja iPhonesta, iPadista ja Macista, tarkistaa että portti vastaa ja avaa SSH-appisi. Apple Watch koputtaa pariksi liitetyn iPhonen kautta, koska watchOS ei anna appien lähettää raakoja TCP- tai UDP-paketteja; kun iPhone ei ole lähellä, se voi lähettää SPA:n HTTP:n kautta palvelimille, jotka sallivat sen.

Oppaita määritystäsi varten

Pidä ovi suljettuna. Ota koputus mukaasi.

Secret Knock on tulossa App Storeen iPhone-, iPad-, Mac- ja Apple Watch -laitteille.

Secret Knock →