PC-Gamut logo

Tekniikka

RDP-yhteys OpenSSH-tunnelissa

05.04.2022, edit 30.05.2022

OpenSSH

OpenSSH sisältyy Windows 10 ja Windows 11 käyttöjärjestelmiin. Sekä asiakas (client) että palvelin (server) osiot on sisäänrakennettu Windowsiin, eikä suojattua yhteyttä varten tarvita muita maksullisia laitteita, ohjelmistoja tai palveluita.

Menettelyt ovat järjestelmäriippuvaisia ja muuttuvat ajan saatossa. Siksi asiaa käsittelevät sivustot (myös tämä) ovat osin viitteellisiä. Tässä esitetty menettely on todettu toimivaksi toukokuussa 2022.

Remote Desktop

Etätyöpöytäyhteys (Remote Desktop, RD) on Windowsin etäkäyttöteknologia, jonka avulla asiakas etäkäyttää verkossa olevaa palvelinta.

Etätyöpöytä on yhden käyttäjän työkalu, eikä palvelinkoneen äärellä tarvita operoijaa. Käyttö on erilaista, kuin 'Pikatuessa' tai 'Etätuessa', joissa yleensä tarvitaan henkilö kummassakin päässä yhteyttä.

Etätyöpöydän asu on sama, kuin tavanomaisen työpöydän. Erityisen miellyttävää on, että etätyöpöytä skaalautuu kaikenlaisiin näyttöihin moitteettomasti.

RDP-yhteyttä varten täytyy palomuurista avata portti (oletus 3389). Avoin RDP-portti Internetiin on kuitenkin tietoturvaongelma, johon tässä esitetään yksi ratkaisu.

RDP-yhteyden suojaaminen

Etäyhteyden voi suojata kuljettamalla RDP-liikenne OpenSSH-putkessa. SSH-yhteyden asiakas ja palvelin asetetaan todentamaan toisensa hankalasti murrettavan avainparin avulla. Perinteistä salasanaa ei kuljeteta verkossa lainkaan.

OpenSSH-asiakas lähettää yksityisellä avaimella salatun viestin ja palvelin purkaa salatun viestin julkisella avaimella. Jos todentaminen onnistuu, myöhempi laitteiden välinen liikenne kulkee SSH-putkessa, salattuna yhteyskohtaisella avaimella.

Jos todentaminen epäonnistuu, yhteyttä ei synny. Epäonnistuneiden yhteysyritysten lukumäärää voidaan rajata ja määrän perusteella lukita palvelimella oleva tunnus.

Toimenpiteet palvelimella

Käytetään PowerShell-tulkkia Järjestelmänvalvojan oikeuksin. Toimet voi myös tehdä osin CMD-komentotulkissa ja osin käyttöjärjestelmän ikkunoissa.

OpenSSH Server:

  • Asennetaan
  • Käynnistetään
  • Asetetaan palvelu käynnistymään automaattisesti
  • Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
  • Start-Service sshd
  • Set-Service -Name sshd -StartupType 'Automatic'

Valmistellaan avaimet käyttöä varten

Luodaan SSH-avainpari:

  • ssh-keygen -t ed25519

Poistetaan 'OpenSSH Server' -palvelun salasanatodentaminen käytöstä editoimalla 'C:\programdata\ssh\sshd_config' -tiedostoa.

  • Etsitään lause:
    #PasswordAuthentication yes
  • ja korvataan se lauseella:
    PasswordAuthentication no

Asetetaan julkinen avain hyväksymään tulevat yhteydet.

  • Kopioidaan julkinen avain
    C:\Users\OMATUNNUS\.ssh\id_ed25519.pub
  • vaihtaen samalla tiedostonimeksi
    C:\programdata\ssh\administrators_authorized_keys

Kopioidaan avainpari

  • C:\Users\OMATUNNUS\.ssh\id_ed25519
  • C:\Users\OMATUNNUS\.ssh\id_ed25519.pub

ulkoiselle muistivälineelle, minkä jälkeen avainpari poistetaan koneelta. Avaimia käsitellään kuten salasanaa eli pidetään ulkoinen muistiväline tallessa ja turvassa.

Täsmennetään administrators_authorized_keys -tiedoston käyttöoikeudet:

  • poistetaan periytyvät ominaisuudet
  • annetaan SYSTEM -tunnukselle täydet oikeudet
  • annetaan Järjestelmänvalvojat -ryhmälle täydet oikeudet
  • icacls administrators_authorized_keys /inheritance:r
  • icacls administrators_authorized_keys /grant SYSTEM:F
  • icacls administrators_authorized_keys /grant BUILTIN\Järjestelmänvalvojat:F

Asiakaskoneen valmistelu

Luodaan 'C:\Users\OMATUNNUS\.ssh' -hakemisto ja kopioidaan sinne avainparitiedostot 'id_ed25519' ja 'id_ed25519.pub' muistivälineeltä. Siirrytään luotuun hakemistoon.

  • Käynnistetään OpenSSH Authentication Agent -palvelu
  • Asetetaan OpenSSH Authentication Agent käynnistymään vastedes automaattisesti
  • Annetaan yksityinen avain SSH-agentin hallittavaksi
  • Todetaan onnistuminen ja listataan agentin hallussa olevat avaimet
  • Start-Service ssh-agent
  • Set-Service -Name ssh-agent -StartupType 'Automatic'
  • ssh-add id_ed25519
  • ssh-add -l

Poistetaan vielä avainpari 'C:\Users\OMATUNNUS\.ssh' -hakemistosta. Yksityinen avain on nyt siirretty salattuna agentin haltuun, eikä avainta voi ilman agenttia käsitellä.

Tarpeettoman ssh-avaimen poistaminen asiakaskoneesta

Tarpeettomia avaimia saattaa kertyä useita. Sekaannusten välttämiseksi tarpeettomat avaimet on hyvä poistaa agentin hallusta. Valtuutus poistamiseen saadaan ainoastaan alkuperäisen yksityisen avaintiedoston avulla.

Kopioidaan poistettava avaintiedostopari 'id_ed25519' ja 'id_ed25519.pub' muistivälineeltä 'C:\Users\OMATUNNUS\.ssh' -hakemistoon ja siirrytään sinne.

  • Käynnistetään OpenSSH Authentication Agent -palvelu
  • Listataan agentin hallussa olevat avaimet
  • Poistetaan avain SSH-agentin hallusta
  • Varmistetaan, että avain on poistunut listaamalla avaimet uudelleen
  • Start-Service ssh-agent
  • ssh-add -l
  • ssh-add -d id-ed25519
  • ssh-add -l

Poistetaan vielä avaintiedostopari 'C:\Users\OMATUNNUS\.ssh' -hakemistosta.

Käynnistetään OpenSSH-tunneli lähiverkossa

Testataan yhteys siten, että asiakas ja palvelin ovat samassa lähiverkossa:

  • ssh -i id_ed25519 -p 22 -L 3333:192.168.1.100:3389 OMATUNNUS@192.168.1.100

missä:

  • -i (identify_file):
    Asiakaskoneen säilö, josta yksityinen avain otetaan tunnistautumista varten.
  • -p (port):
    Asiakaskone lähettää SSH-dataa palvelimen porttiin 22.
  • -L (local port forwarding):
    Ohjataan asiakaskoneen RDP-liikenne paikallisesta portista 3333 OpenSSH-putkessa palvelinkoneen 192.168.1.100 porttiin 3389.
  • ssh OMATUNNUS@192.168.1.100:
    Asiakaskoneen OpenSSH-yhteys palvelinkoneeseen 192.168.1.100 tunnuksella OMATUNNUS

Komentoa on nopea käyttää, kun siitä tehdään komentojono (CMD-tiedosto) ja luodaan ikoni, joka viittaa tiedostoon.

Käynnistetään Remote Desktop

Etätyöpöytäyhteyden 'kohdekone' on oman koneen (Localhost, 127.0.0.1) portti 3333, josta liikenne ohjautuu OpenSSH -tunneliin. Etätyöpöytä käynnistyy kätevästi, kun komennosta tehdään CMD-tiedosto ja ikoni.

  • start mstc /v:localhost:3333

Etätyöpöydän ominaisuuksia muutetaan sovelluksesta. Sovellus muistaa viimeksi käytetyt asetukset. Hyödyllisiä ovat mm:

  • etätyöpöydän resoluutio ja värimäärä
  • etäistuntoon liitettävät paikalliset laitteet (levyasemat, portit, älykortit,...)
  • paikalliset tulostimet ja leikepöytä.

Etätyöpöytäyhteyden säädöt tehdään helpoimmin keskustelulomakkeen avulla

Etätyöpöydän asetukset säädetään välilehdiltä.

SSH-tunneli ulkoverkossa

Kun SSH-putki toimii sisäverkossa ja tiedostetaan uhat, saadaan SSH-putki toimimaan pienin muutoksin myös ulkoverkossa (WAN, Internet).

Seuraavat palvelinliittymän yksityiskohdat täytyy ottaa huomioon:

  • Palvelimen liittymällä täytyy olla julkinen IP-osoite:
    4G-verkossa on oletuksena APN, jonka jakamat paikalliset IP-osoitteet eivät näy julkiseen verkkoon. Reitittimen asetuksista vaihdetaan operaattorin APN, joka antaa liittymään julkisen IP-osoitteen.
  • 4g-verkossa julkinen IP-osoite vaihtuu aika-ajoin, joten liittymälle täytyy asettaa nimi, joka säilyy ja jota voi kutsua:
    Tässä käytetään DDNS-palvelua. Yksi liittymään kytketty laite ottaa säännöllisesti yhteyden DDNS-palveluun, jolloin sovittu DNS-nimi ja senhetkinen IP-numero liitetään toisiinsa. Liittymää kutsutaan sen pysyvällä DNS-nimellä.
  • Liittymän ja palvelimen palomuureista täytyy avata portti SSH-liikennettä varten:
    Käytetään palomuurin porttiohjausta, jossa reitittimen avattuun porttiin 12345 tuleva liikenne ohjataan lähiverkon palvelimen SSH-porttiin 22. Myös palvelinkoneen palomuurissa täytyy TCP-portti 22 olla auki.

OpenSSH-tunneli ulkoverkon kautta palvelimelle

Asiakas ja palvelin ovat eri verkoissa:

  • ssh -i id_ed25519 -p 12345 -L 3333:192.168.1.100:3389 OMATUNNUS@esimerkkitoimialue.duckdns.org

missä:

  • -i (identify_file):
    Yksityinen avain tunnistautumista varten.
  • -p (port):
    Asiakaskone lähettää SSH-dataa palvelinliittymän reitittimen porttiin 12345. Liikenne ohjataan reitittimessä porttiin 22 ja lähetetään edelleen palvelimelle.
  • -L (local port forwarding):
    Ohjataan asiakaskoneen RDP-liikenne paikallisesta portista 3333 OpenSSH-putkessa palvelinkoneen 192.168.1.100 porttiin 3389.
  • ssh OMATUNNUS@esimerkkitoimialue.duckdns.org:
    OpenSSH-yhteys esimerkkitoimialue.duckdns.org -nimiseen palvelimeen tunnuksella OMATUNNUS

Järjestelmän yksityiskohtia voi muunnella monipuolisesti käyttäjän tarpeiden ja laitteiden tarjoamien mahdollisuuksien mukaan.

Todettua

  • Uhat ja suojaukset kehittyvät. Lopullista varmaa tapaa suojata data ei ehkä ole, mutta ajankohtaan sidottuna varsin hyviä ratkaisuja on.
  • Avoimet järjestelmät ovat verifioitavissa ja toisaalta suljettuihin järjestelmiin on ehkä voitu käyttää runsaasti resursseja. Yhdistelmä avointa ja suljettua tekniikkaa vaikuttaa lupaavalta.
  • Tietosuojavälineiden, -menetelmien ja -suunnitelmien on välttämätöntä uudistua jatkuvasti.
  • Käyttäjän ja soveltajan rooli on pitää välineet ajantasaisina, seurata lokeja ja ohjelmistojen vastetta ja selvittää poikkeavan toiminnan syyt.
↑ Ylös ↑