SSH tuneliai paprastai

11 sausio, 2009 – 14:19

Ar norite savo namų tinkle turėti atidarytą tik vieną prievadą (iš angl. k. „port“) ir per jį galėti naudotis visu namų tinklu būdami darbe ar kur kitur? Na, jeigu namų tinkle turite SSH serverį, kuris pasiekiamas iš išorės (turi atidarytą 22 ar kitą „/etc/ssh/sshd_config“ nustatytą prievadą), tai visai paprasta su PuTTY ir MS Windows (lengvas konfigūravimas – tai viena iš priežasčių kodėl man taip patinka PuTTY).

O gal naudojatės VirtualBox 2.0.x ir norite pasiekti virtualius kompiuterius per tinklą? Tada jums reikia atvirkštinių SSH tunelių, o jiems tereikia SSH serverio ir virtualaus kompiuterio. Tačiau atvirkštiniai SSH tuneliai pagelbės ne tik tada, kai naudojatės VirtualBox, bet ir, kai norite pasiekti sistemą, kuri neturi atidaryto prievado į išorę. Tam tereikės specialiai sukonfigūruotu SSH klientu prisijungti iš nepasiekiamos sistemos į pasiekiamą ir pasiekiamoje sistemoje jau turėsite prieigą prie tos, kuri yra už NAT, ugniasienės ar dar ko nors, trukdančio jūsų darbą.

Šiame tinklaraščio įraše naudosime tokią schemą: yra 3 kompiuteriai (jūsų atveju tai gali būti nebūtinai kompiuteriai, bet ir kokie maršrutizatoriai ar pan.). 2 iš jų yra uždarame namų tinkle. Pavadinkime juos A ir B. A kompiuteris – su SSH serveriu. B – su HTTP/VNC ar dar kokiu kitu serveriu, kurį norite pasiekti iš išorės. Na, o su trečiuoju (jį išskirsime į dar du: C (su Microsoft Windows ir PuTTY) ir D (Linux)) kompiuteriu jūs sėdite kavinėje.
Vėliau aptariamiem atvirkštiniam tuneliam naudosime E, F ir G kompiuterius: E – su Linux, SSH serveriu (ir VirtualBox), F – su Windows XP, PuTTY, G – su Linux ir SSH.

Reikalavimai SSH serveriui (A kompiuteriui)
Tarkime, jog prieš atsidurdami kavinėje jūs užsitikrinote, jog SSH serveris jau paleistas ir jį galite pasiekti. Jeigu ne, paleiskite jį ir įsitinkite, kad jį galite pasiekti nustatytu prievadu (jeigu nieko nekeitėte konfigūracijose – tai turėtų būti 22) jungdamiesi PuTTY prie IP adreso, kurį matote whatismyip.org svetainėje.

SSH tunelio konfigūracija (C kompiuteryje)
Dabar, kai jau žinote, jog galite valdyti A kompiuterį, laikas nustatyti SSH tunelį iš B kompiuterio per A. PuTTY programos lange atsidarykite „Connection“–>„SSH“–>„Tunnels“ ir užpildykite raudonu taškeliu pažymėtus laukelius:

Trūksta paveiksliuko
„Source port“ – įrašykite prievadą, kurio norite, jog klausytųsi PuTTY;
„Destination“ – įveskite kokiu IP ir prievadu turėtų kreiptis A kompiuterio SSH serveris, kai jūs kreipsitės į savo kompiuterio „Source port“.

Suvedę duomenis paspauskite mygtuką „Add“ ir jeigu norite, „Sessions“ skiltyje galite išsaugoti seansą, jog vėliau nereikėtų suvesdinėti visos konfigūracijos.

Norėdami užtikrinti geresnį darbą, rekomenduojame dar atlikti du dalykus:
1) „Connection“–>„SSH“ pažymėti varnelę „Enable SSH compresion“ – taip sutaupysite srauto ir gausite greitesnį darbą, žinoma;
2) „Window“–>„Translation“ pasirinkite A kompiuteryje su SSH serveriu naudojamą koduotę (tai nelabai siejasi su darbu per SSH tunelį, tačiau tikrai užtikrins, jog bus mažiau problemų, jeigu norėsite įvykdyti kokią nors komandą tame pačiame PuTTY lange), pvz., UTF-8.

Suvedę visą konfigūraciją spustelėkite mygtuką „Open“ ir prisijunkite prie A serverio. Įvykus sėkmingam prisijungimui turėtų būti atidarytas „Source port“ prievadas jūsų kompiuteryje. Pabandykite prie jo prisijungti. Mes pavyzdyje naudojome „192.168.1.1:80“ kaip „Destination“ ir „80“ kaip prievadą, kurio reikia klausytis, todėl dabar C kompiuterio naršyklėje suvedę adresą „localhost“ (naršyklė numatytai naudos 80 prievadą), iš tikrųjų, naršysime po tai, ką mums duos 192.168.1.1 (B kompiuteris) serveris (mūsų atveju tai buvo maršrutizatorius) kreipiantis į jį su naršykle į 80 prievadą.
Analogiškai galite jungtis prie VNC ar dar ko – tiesiog pasileiskite VNC kliento programą ir suveskite IP laukelyje „localhost“ arba „127.0.0.1“ ir prievado laukelyje įrašykite tai, ką PuTTY įrašėte „Source port“.

SSH tunelio konfigūracija (D kompiuteryje)
Linux sistemose SSH tunelį sukurti yra ypač paprasta. Tačiau tam daugelyje sistemų reikalaujama super vartotojo teisių tad nepamirškite komandą vykdyti prisijungę kaip root vartotojas (su komanda „su“) arba prieš ją prirašę „sudo“:

ssh -L 83:192.168.2.1:80 vartotojas@host

83 – prievadas, kurio bus klausomasi (juo turėsite kreiptis į „localhost“);
192.168.2.1 – IP arba „hostname“ B kompiuterio, į kurį turės kreiptis „host“ (A) kompiuteris;
80 – prievadas, kurio A kompiuteris kreipsis į 192.168.2.1 (B);
vartotojas – vartotojo vardas, kurio norite prisijungti prie A kompiuterio;
host – A kompiuterio „hostname“ arba IP adresas.

Atvirkštinis SSH tunelis
Tokiem SSH tuneliam reikalavimai visiškai tie patys kaip ir normaliem. Tačiau jų naudojimas ir paskirtis – žinoma, jog kitokia.
Viena dažnesnių priežasčių, kam jum gali prireikti atvirkštinio SSH tunelio – negalėjimas pasiekti sistemos už NAT. Pavyzdžiui, jeigu naudojatės VirtualBox 2.0.x – jūs negalėsite net „ping’inti“ virtualaus kompiuterio. Tačiau prisijungti prie jo – vis tiek galite. Ir nesvarbu kokia OS, svarbiausia, jog pagrindinėje sistemoje (E kompiuteryje), kurioje laikote VirtualBox’ą, būtų su veikiančiu SSH serveriu. Trumpiau kalbant, jums atidaryto SSH prievado reikia tik viename tinkle.

SSH tunelio konfigūracija (F kompiuteryje)
Pasileiskite PuTTY ir „Session“ skiltyje nurodykite:
„Hostname (or IP adress)“ – E kompiuterio IP adresą;
„Port“ – E kompiuteryje veikiančio SSH serverio prievadą (standartinis – 22).

Eikite į skiltį „Connection“–>„SSH“–>„Tunnels“, pasirinkite „Remote“ ir užpildykite raudonu taškeliu pažymėtus laukelius:

Trūksta paveiksliuko
„Source port“ – įrašykite prievadą, kurio norite, jog būtų klausomąsi E kompiuteryje;
„Destination“ – įveskite kokiu IP ir prievadu turėtų kreiptis E kompiuterio SSH serveris F kompiuteryje (ar iš jo…), kai jūs kreipsitės į to kompiuterio „Source port“;
„Remote“ – pažymėkite norėdami nurodyti, jog atidarytas prievadas būtų „nuotolinis“ ir būtų atidaromas nutolusiame kompiuteryje (E), o ne vietiniame (F).

Suvedę duomenis paspauskite mygtuką „Add“ ir jeigu norite, „Sessions“ skiltyje galite išsaugoti seansą, jog vėliau nereikėtų suvesdinėti visos konfigūracijos.

Jeigu norite, galite dar atlikti du dalykus:
1) „Connection“–>„SSH“ pažymėti varnelę „Enable SSH compresion“ – taip sutaupysite srauto ir gausite greitesnį darbą, žinoma;
2) „Window“–>„Translation“ pasirinkite A kompiuteryje su SSH serveriu naudojamą koduotę (tai nelabai siejasi su darbu per SSH tunelį, tačiau tikrai užtikrins, jog bus mažiau problemų, jeigu norėsite įvykdyti kokią nors komandą tame pačiame PuTTY lange), pvz., UTF-8.

Suvedę visą konfigūraciją spustelėkite mygtuką „Open“ ir prisijunkite prie E kompiuterio (kuris turi SSH serverį (ir yra su VirtualBox)). Dabar E kompiuteryje galite jungtis į „localhost“ „Source port“ prievadu.
Pavyzdyje mes nustatėme, jog jungdamiesi FTP klientu prie „localhost“ iš E kompiuterio, pasiektume F kompiuterio FTP serverį.

SSH tunelio konfigūracija (G kompiuteryje)
Su Linux sistemomis viskas dar paprasčiau negu su Microsoft Windows: G kompiuteryje įdiegtos Linux OS komandinėje eilutėje su super vartotojo teisėmis (naudojantis „sudo“ arba root’u) įvykdykite tokią komandą:

ssh -R 12345:localhost:21 vartotojas@host

12345 – prievadas, kurio bus klausomasi E kompiuteryje (juo turėsite kreiptis į „localhost“);
localhost – kur bus kreipiamasi per G kompiuterį;
21 – prievadas, į kurį bus kreipiamasi per G kompiuterį;
vartotojas – vartotojo vardas, kurio norite prisijungti prie E kompiuterio;
host – E kompiuterio „hostname“ arba IP adresas.

Prisijungę per SSH jūs jau galite E kompiuteryje jungtis prie G kompiuterio per „localhost“ nurodytu prievadu (pvz., 12345).
Pavyzdyje mes nustatėme, jog jungdamiesi FTP klientu prie „localhost“ iš E kompiuterio, pasiektume F kompiuterio FTP serverį.

Kuo SSH tuneliai yra geriau už jungimąsi „tiesiogiai“?
Visas jūsų srautas per SSH tunelius bus šifruojamas ypač stipriai – tai vienas iš pagrindinių tokio jungimosi pliusų. Tačiau tai dar ne viskas – jums taip pat nereikės laikyti krūvos atidarytų prievadų, kurie gali tik padidinti galimybę įsilaužti į jūsų sistemas. Galų gale – jums nereikės prieš išeinant iš namų apgalvoti kokių prievadų jums gali prireikti – juk jūs viską gausite per vieną SSH prievadą.

P. S. Rekomenduojame SSH serveryje vietoje 22 prievado naudoti labai aukštą prievadą, pvz., 65210. Taip išvengsite daugumos tinklų skenavimų ir bandymų įsilaužti per 22 prievadą.

  1. 5 Responses to “SSH tuneliai paprastai”

  2. Labai geras įrašas! Gal tik kiek klaidina tos raidės — pradedi nebesuprast kuris kompas yra kuris.

    O šiaip labai laukęs to įrašo tik dabar supratau, SSH nelabai galėsiu pasinaudot ištrūkt iš už darbinių firewall, nes laptopą į darbą nešuos, tai namie nelieka prie ko jungtis 🙂 Nebent padaryčiau serverį iš žmonos kompo. Kas jai spėju nelabai patiktų 🙂

    Reiks eit freecycle pasiknist, ten dažnai visokių senienų atiduoda — pasidarysiu SSH serveriuką.

    By Karolis Pocius on Sau 11, 2009

  3. Juk tu lygtais turi Linksys’ą su DD-WRT ar kitu software, kuris turi SSH 🙂 .
    O kartais OpenVPN kokių nors serverio funkcijų neturi visi tie OpenWRT, DD-WRT, Tomato ir pan.? Tada būtų galbūt netgi geresnis sprendimas (nuolatiniam naudojimui) – OpenVPN.

    Na, bet serveriukas namie tikrai neblogas dalykas – priverčia per daug galvos nesukti dėl smulkmenų 🙂 .

    By Ernestas on Sau 11, 2009

  4. Dabar turiu Linksys WAG200G su default firmware. Jis geriausiu atveju leidžia tik SSH pass-through ar kažką panašaus. T.y. praleidžia access iki tikrojo serverio.

    By Karolis Pocius on Sau 11, 2009

  5. Nu ernestas cia man biski padejei su shiuo straipsiuku.. ;D pagooglinau ziu tavo blogas ;D

    By xzibt on Spa 11, 2010

  1. 1 Trackback(s)

  2. Sau 12, 2009: Blogorama #493 : nežinau.lt

Sorry, comments for this entry are closed at this time.