Note, that this recipe is not updated long time and could be outdated!
Got it.

SSH tuneļa izveide

Kopš serverus izmanto publiskā tīklā (internetā), nešifrētu datu pārraide starp klientu un serveri ir nedroša. Tā kā šifrēt jebkurus datus nav vēlams, jo tas nelabvēlīgi ietekmē datu apmaiņas ātrumu, tad daudzi datu apmaiņas servisi no publiskā tīkla nav pieejami. Kā piemērus var minēt SQL datu bāzu, lietojumu serverus u.tml.

Šeit ir aprakstīts, kā izmantojot SSH serveri  un SSH klientu, var pieslēgties tikai lokāli pieejamiem servisiem (t.sk. serverim lokālā tīklā).

Saturs

Vispārīgs apraksts

Visiem datoriem, ieskaitot serverus ir vismaz divas tīkla saskarnes (interfeisi):

  1. Lokāla "atcilpa", ar IP adresi 127.0.0.1 un nosaukumu localhost,  kas pieejams tikai uz tā paša datora ejošām programmām
  2. Publiskā saskarne, kas pievienota fiziskam tīklam un ko var sasniegt citi internetam pieslēgtie datori. Uz Unix/Linux datoriem tā parasti ir eth0 (vai ar citu numuru).

Publiski pieejamie servisi (Apache tīmekļa serveris, OpenSSH serveris) klausās (un atbild) gan lokālo, gan publisko saskarni, bet lokālie servisi (MySQL vai PostgreSQL datu bāzes serveri, Tomcat tīmekļa lietojumu serveris) klausās (un atbild) tikai uz lokālo saskarni.

Par to var pārliecināties, ievadot komandu:

netstat -lnt

parādās  sekojoša aina:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:8180          0.0.0.0:*               LISTEN
...

tie servisi, kuriem adrese Local Address norādīta kā 127.0.0.1* ir pieejami tikai no paša servera caur lokālo saskarni, savukār tie servisi, kuriem norādīta adrese *0.0.0.0, ir pieejami no visām tīkla saskarnēm.

No augšminētā piemēra izriet, ka uz servera ir pieejami sekojoši servisi:

ServissPortsPieejams
MySQL3306Lokāls
Apache HTTP80Publisks
SSH22Publisks
Apache HTTPS443Publisks
Tomcat8180Lokāls

Tuneļa plūsmas pārsūtīšana turp

Lai varētu piekļūt no attālināta (sava internetam pieslēgtā) datora lokāli pieejamiem servisiem, izmanto SSH tuneli. SSH tunelis ir šifrēts datu kanāls, pa kuru pārraida citiem nolūkiem paredzētus datus, piemēram MySQL servera un klienta dati.

SSH klients un serveris nodibina šifrētu datu kanālu, un, nododot klientam un serverim īpašas komandas, tie pārraida viens otram lokāli nosūtītus datus, lokālo datu sūtītājiem radot ilūziju, ka dati kursē viena datora robežās. Vispārīgā datu pārraides shēma ir parādīta sekojošā zīmējumā.

/xwiki/bin/download/Recipes/SSHTunnel/fig01.png

  1. Standarta pārsūtīšanas paņēmiens ir nosūtīt no lokālā datora saņemto datu plūsmu uz SSH servera un tālāk, to norādot merkadators:

    ssh -L AAA:merkadators:BBB user@talaisdators

    kur:

    • -L norāda, ka caur ssh nepieciešams pārsūtīt portus no mansdators uz merkadators
    • AAA ir lokālā (lietotāja) datora porta numurs, kuram slēgsies klāt lietojumprogramma. Ja komandu nevar izpildīt kā root, šis ports jāņem >1024.
    • merkadators ir resursdatora nosaukums, uz kuru datu plūsmu tālāk pārsūtīs ssh serveris (talaisdators). Merkadators vispār var būt jebkurš cits dators, kuru "redz" talaisdators. Ja  mērķa dators ir tas pats ssh serveris (talaisdators), norāda localhost.
    • BBB ir mērķa datora porta numurs
    • user ir ssh servera lietotāja vārds, ja tas sakrīt ar patreizējo lietotāju, user@ var nenorādīt, un atstāj tikai talaisdators
    • ja SSH serveris atbild uz nestandarta portu, norāda papildus parametru: -p PortaNr
    • talaisdators ir ssh servera nosaukums vai publiskā IP adrese.

Pēc tam atver konkrēto lietojumprogrammu un kā mērķi norāda sava lokālo datoru un portu AAA. Šī datu plūsma tiks noraidīta uz merkadators:BBB portu

Ja vēlas izmantot tuneli arī no citiem datoriem, kas "redz" mansdators iekšējo IP adresi, tad pirms lokālā porta numura pieliek zvaigznīti:

ssh -L *:3128:mansdators:3128 valdis@talaisdators

Ja nepieciešams pārsūtīt avota portus, kas mazāki par 1024, komanda jāpilda kā root lietotājam, sākot komandu ar sudo, piemēram:

  1. Lai tunelētu VmWare konsoles plūsmu, izpilda komandu:

    ssh -L 9001:mansdators:901 valdis@talaisdators
  2. Lai tunelētu mansdators 80 porta plūsmu uz google, izpilda komandu:

    ssh -L 8080:www.google.lv:80 valdis@talaisdators

Tuneļa plūsmas pārsūtīšana atpakaļ

Ir gadījumi, kad tunelēto datu plūsmu jānodrošina pretēji nodibinātajai SSH savienojumam. T.i., SSH sesiju nodibina no lokālā datora, kas parasti atrodas aiz ugunssienas vai maršrutētāja, bet pēc tam datus sagaida uz attālinātā SSH servera, kur tos saņem uz tā paša vai cita (talaisdators zināma)  porta.
  1. Pretēju plūsmu nodrošina ar komandu:

    sudo ssh -R AAA:merkadators:BBB user@talaisdators

    kur:

    • -R norāda, ka caur ssh nepieciešams pārsūtīt no talaisdators uz merkadators
    • AAA ir ports, uz kuru klausīsies talaisdators. Ja porta numurs mazāks par 1024, tad jābūt *root lietotājam (un var būt, ka tā pieteikties ir uz tālā datora ir aizliegts!).
    • merkadators ir resursdatora nosaukums, uz kuru datus nosūtīs reversā tuneļa sākumā. Tas var būt localhost vai kāds cits dators iekšējā tīklā.
    • BBB ir merkadators datora porta numurs, uz kuru nosūtīs datus reversā tuneļa sākumā.
    • user ir ssh servera lietotāja vārds, ja tas sakrīt ar patreizējo lietotāju, user@ var nenorādīt, un atstāj tikai talaisdators
    • talaisdators ir attālinātā ssh servera nosaukums vai IP adrese
  2. Piemēram, lai padarītu par pieejamu iekšējā tīkla datora tīmekļa serveri ar adresi 192.168.1.1, ievada komandu:

    ssh -R 8001:192.168.1.1:80 user@talaisdators
  3. Lai tuneļa sesiju atstātu fonā, komandu papildina ar slēdžiem -Nfq, piemēram:

    ssh -NfqR 2222:localhost:22 valdis@111.222.333.444
  4. Piemēram, ja ir darbstacijai, kas atrodas privātā tīklā aiz ugunssienas (darba datoram), pa tiešo tai pieslēgties ar SSH no mājas datora nav iespējams. Tomēr, ja mājas datoram ir publiska IP adrese, to var izdarīt, izveidojot reverso SSH tuneli:

    ssh -R 2222:localhost:22 111.222.333.444

    kur 111.222.333.444 ir mājas datora publiskā IP adrese.

    1. Tagad mājas datoram var pieslēgties attālināti no cita datora:

      ssh 111.222.333.444
    2. Un tad no mājas datora veido SSH savienojumu uz tunelēto portu:

      ssh localhost -p 2222

      kas tiks pārraidīta uz darba datora 22 portu.

      /xwiki/bin/download/Recipes/SSHTunnel/fig02.png

Kļūdu novēršana

Drošības nolūkos, pēc noklusēšanas, reversā tuneļa gals klausās tikai uz lokālajām adresēm (127.0.0.1 un ::1).

Lai to atceltu:

  1. root lietotājs /etc/ssh/sshd_config pievieno rindu:

    GatewayPorts yes
  2. pārstartē ssh serveri:

    sudo /etc/init.d/ssh restart

SOCKS tuneļa izveide

  1. Izmantojot SOCKS tīkla ligzdas, var nosūtīt šifrētu tīkla plūsmu uz citu datoru, lai tas darbotos lokālā datora vietā. Ievadot komandu:

    ssh -D3128 111.222.333.444
  2. uz lokālā datora porta ir izveidota ligzda, caur kuru var nosūtīt, piemēram HTTP pieprasījumus. Tīmekļa pārlūkprogrammā norāda, ka starpniekserveris ir lokālais dators ar portu 3128, un ka tas izmanto SOCKS4/5 protokolu (vai "soketus").

Tuneļa izveide ar putty

  1. Atver Putty un izvēlas iestatījumus Connection- SSH- Tunels:
    /xwiki/bin/download/Recipes/SSHTunnel/att01.png
  2. Laukā Source port norāda portu, uz kuru putty klausīsies, piemēram, 3306*, laukā *Destination norāda mītni (attiecībā pret mērķa datoru) un portu, uz kurieni tunelētā plūsma tiks pārsūtīta, piem., localhost:3306:
    /xwiki/bin/download/Recipes/SSHTunnel/att02.png
  3. Spiež pogu Add:
    /xwiki/bin/download/Recipes/SSHTunnel/att03.png
  4. Ja vēlas, var pievienot papildu tuneļus:
    /xwiki/bin/download/Recipes/SSHTunnel/att04.png
  5. Pieslēdzas izvēlētajam mērķa datoram.

Saites

 

Created by Valdis Vītoliņš on 2010-01-21 17:31
Last modified by Valdis Vītoliņš on 2016-07-29 06:10
 
Xwiki Powered
Creative Commons Attribution 3.0 Unported License