Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GolangでSSHプロキシサーバを実装した

5381bd68abe2b91239ca1600db2a890d?s=47 tsurubee
October 04, 2018

 GolangでSSHプロキシサーバを実装した

5381bd68abe2b91239ca1600db2a890d?s=128

tsurubee

October 04, 2018
Tweet

Transcript

  1. !UTVSVCFF(.01FQBCP *OD 'VLVPLBHP (PMBOHͰ44)ϓϩΩγαʔό Λ࣮૷ͨ͠

  2. ࣗݾ঺հ (.0ϖύϘגࣜձࣾ ϗεςΟϯάࣄۀ෦ ΠϯϑϥνʔϜ ௽ాതจ !UTVSVCFF (PMBOH͸೥݄͔Β ࢝Ί·ͨ͠ʂ

  3. ࠓ೔࿩͢͜ͱ w44)ϓϩτίϧͷ֓ཁ w44)ϓϩΩγαʔόΛ։ൃͨ͠എܠ w44)ϓϩΩγαʔόͷ࣮૷ʹ͍ͭͯ

  4. w4FDVSF4IFMMͷུশ wΫϥΠΞϯτrαʔόؒʹ͓͚Δ௨৴ͷ҆શੑΛ֬อ͢Δ ͨΊͷϓϩτίϧ
 
 
 44)$MJFOU 44)4FSWFS &ODSZQU %FDSZQU ಁաతͳ҉߸ܦ࿏Λఏڙͯ͘͠ΕΔ

    44)ɿ֓ཁ
  5. 44)ɿಁաతͳ௨৴ ಁաతʜ࣮ࡍʹଘࡏ͢Δ΋ͷΛଘࡏ͠ͳ͍Α͏ʹݟͤΔ 44)͸Ϣʔβ͸Կ΋ҙࣝͤͣͱ΋௨৴͕҆શʹ҉߸Խɾ ෮߸Խ͞Ε͍ͯΔ ͢ͳΘͪɺ44)Λී௨ʹར༻͢Δ্Ͱͦͷ࢓૊ΈΛ
 ϓϩτίϧϨϕϧͰཧղ͢Δඞཁ͸ͳ͍

  6. ಁաతͳ௨৴Λఏڙͯ͘͠ΕΔϓϩτίϧʹҙਤతʹ ׂͬͯೖͬͯɺͦͷڍಈΛࣗ༝ʹίϯτϩʔϧ͢Δ

  7. $MJFOU 4FSWFS wϩάΛऔಘ͍ͨ͠ʢ౷ܭతʹղੳɾϦΞϧλΠϜҟৗݕ஌ FUDʣ
 UDQEQɺ1SPYZ42- wϑοΫΛ૊ΈࠐΜͰৼΔ෣͍Λಈతʹίϯτϩʔϧ͍ͨ͠
 QGUQɺTTIS ྫ͑͹ɾɾ ύέοτͷಡΈࠐΈ ϓϩτίϧͷղऍ

    QBDLFU IPPLTDSJQU ϑοΫʹΑΔϩδοΫͷ ֦ு΍ಈత੍ޚ ϓϩτίϧͷॲཧʹׂͬͯೖΔ
  8. TTISͱ͍͏44)ϓϩΩγαʔόΛ࡞ͬͯ·͢ʂ IUUQTCMPHUTVSVCFFUFDIFOUSZ

  9. ͳͥTTISΛ࡞ͬͨͷ͔ʁ

  10. Ϧιʔεϓʔϧ wֹ݄ԁ͔Βར༻Ͱ͖Δʂ w୆ͷ෺ཧαʔόͷϦιʔεΛෳ਺ͷϢʔβʹఏڙ͢Δʢڞ༻αʔόʣ UTVSVCFF Ϩϯλϧαʔόʔ EFW ෳ਺ͷϢʔβͷίϯςϯπ͕ ϩʔΧϧετϨʔδʹ ഑ஔ͞Ε͍ͯΔ TTI

    TTI TTI TTI TTI TTIUTVSVCFF!TTI TTIEFW!TTI Ϣʔβ͸࢖༻Ͱ͖Δαʔό͕ TTIͩͱ஌͍ͬͯΔඞཁ͕͋Δ ϢʔβͱͦͷϢʔβ͕࢖༻͢Δαʔόͷඥ෇͚͕ଘࡏ͢Δ
  11. αʔόఏڙऀଆͷطଘͷ՝୊ TTIUTVSVCFF!TTI Ϧιʔεϓʔϧ 44)$MJFOU TTI TTI TTI TTI TTI w࢖༻αʔό͕มΘͬͨࡍʹ͸Ϣʔβʹ௨஌͕ඞཁ

    wαʔό؅ཧऀͷ౎߹Ͱࣗ༝ʹϢʔβ͕࢖͏αʔόΛมߋͰ͖ͳ͍ Ϣʔβ UTVSVCFF͸TTIʹ ҙࣝతʹ઀ଓ͍ͯ͠Δ UTVSVCFFͷίϯςϯπΛ TTIʹҠઃ͍ͨ͠
  12. Ϣʔβͱαʔόͷ഑ஔΛ࠷దԽ͠ɺ ͞Βʹշదͳαʔό؀ڥͷఏڙ΁ ϢʔβͷίϯςϯπҠઃͷোนΛ ۃݶ·ͰԼ͛Δ

  13. wϢʔβ໊ϕʔεͰಈతʹ઀ଓઌΛܾఆͰ͖Δ wϑοΫʹΑΓϩδοΫΛࣗ༝ʹ૊ΈࠐΊΔFUD TTISɿϢʔβ͕઀ଓઌΛҙࣝ͠ͳ͍ϓϩΩγαʔό IUUQTHJUIVCDPNUTVSVCFFTTIS

  14. TTIUTVSVCFF!TTIS Ϧιʔεϓʔϧ 44)ΫϥΠΞϯτ TTIS 1MVHHBCMF )PPLT Ϣʔβ TTISಋೖޙͷੈք

  15. TTIUTVSVCFF!TTIS Ϧιʔεϓʔϧ 44)ΫϥΠΞϯτ TTIS 1MVHHBCMF )PPLT Ϣʔβ TTISಋೖޙͷੈք Ϣʔβ໊

  16. TTIUTVSVCFF!TTIS Ϧιʔεϓʔϧ 44)ΫϥΠΞϯτ TTIS 1MVHHBCMF )PPLT Ϣʔβ TTISಋೖޙͷੈք Ϣʔβ໊ ઀ଓઌϗετ

    Ϣʔβͱ઀ଓઌϗετͷඥ෇͚Λ%#ͰҰݩ؅ཧ
  17. TTIUTVSVCFF!TTIS Ϧιʔεϓʔϧ 44)ΫϥΠΞϯτ TTIS 1MVHHBCMF )PPLT Ϣʔβ TTISಋೖޙͷੈք Ϣʔβ໊ ઀ଓઌϗετ

    Ϣʔβͱ઀ଓઌϗετͷඥ෇͚Λ%#ͰҰݩ؅ཧ 44)ΛϓϩΩγ
  18. TTIUTVSVCFF!TTIS Ϧιʔεϓʔϧ 44)ΫϥΠΞϯτ Ϣʔβ໊ ઀ଓઌϗετ TTIS 1MVHHBCMF )PPLT 44)ΛϓϩΩγ Ϣʔβͱ઀ଓઌϗετͷඥ෇͚Λ%#ͰҰݩ؅ཧ

    Ϣʔβ TTISಋೖޙͷੈք %#ͷ6QEBUFʹΑΓࣗಈͰϢʔβͷ઀ଓઌ͕੾ΓସΘΔ
  19. TTISΛ࢖ͬͯΈΔͱʜ $ ssh tsurubee@127.0.0.1 -p 2222 tsurubee@127.0.0.1's password: [tsurubee@host-tsurubee ~]$

    $ ssh dev@127.0.0.1 -p 2222 dev@127.0.0.1's password: [dev@host-dev ~]$ ࣮ߦ͢ΔίϚϯυ͸ʮϢʔβ໊ʯҎ֎ಉ͕ͩ͡ɺ ҧ͏αʔόʹ44)ϩάΠϯ͞ΕΔ
  20. TTISͷ࣮૷ʹ͍ͭͯ

  21. ·ͣɺϓϩτίϧΛ஌ΔͨΊʹ3'$ΛಡΉ w3'$ɿ44)"VUIFOUJDBUJPO1SPUPDPM
 Ϣʔβೝূʢύεϫʔυೝূ΍ެ։伴ೝূʣ w3'$ɿ44)5SBOTQPSU-BZFS1SPUPDPM
 τϥϯεϙʔτ૚ w3'$ɿ44)$POOFDUJPO1SPUPDPM
 νϟωϧ੍ޚ΍ϙʔτϑΥϫʔσΟϯά 44)͸ɺෳ਺ͷಠཱͨ͠ϓϩτίϧͰߏ੒͞ΕΔ

  22. 44)ϓϩτίϧͷ֊૚ߏ଄ $MJFOU 4FSWFS 44)$0// 3'$ 44)"65) 3'$ 44)53"/4 3'$ ௨৴ͷ҉߸Խ

    ηογϣϯ伴ͷަ׵ Ϣʔβೝূ νϟωϧͷଟॏԽ *OUFSOFU wϓϩτίϧͷશମ૾ͷ೺Ѳ΍ॲཧͷྲྀΕΛ௫Ή͜ͱ͕େ੾ w44)ϓϩΩγαʔό͸ΫϥΠΞϯταʔόͷؒʹׂͬͯೖͬͯɺ ҉߸Խ͞Εͨτϥϯεϙʔτ૚Λ஥հ͢Δඞཁ͕͋Δ
  23. 44)ηογϣϯཱ֬·ͰͷྲྀΕ  5$1ίωΫγϣϯͷཱ֬  ύϥϝʔλωΰγΤʔγϣϯ  ηογϣϯ伴ަ׵  ϗετೝূʢαʔόೝূʣ 

    Ϣʔβೝূ  44)ηογϣϯͷཱ֬
  24. TTISͷॲཧͷྲྀΕ $MJFOU TTIS 44)ϦΫΤετ

  25. TTISͷॲཧͷྲྀΕ $MJFOU TTIS 44)ϦΫΤετ τϥϯεϙʔτ૚ͷ҉߸Խ ύϥϝʔλωΰγΤʔγϣϯ %)伴ަ׵

  26. TTISͷॲཧͷྲྀΕ $MJFOU TTIS 44)ϦΫΤετ τϥϯεϙʔτ૚ͷ҉߸Խ ύϥϝʔλωΰγΤʔγϣϯ %)伴ަ׵ 'JOE6QTUSFBN)PPL

  27. TTISͷॲཧͷྲྀΕ $MJFOU TTIS 44)ϦΫΤετ τϥϯεϙʔτ૚ͷ҉߸Խ ύϥϝʔλωΰγΤʔγϣϯ %)伴ަ׵ 'JOE6QTUSFBN)PPL 4FSWFS

  28. TTISͷॲཧͷྲྀΕ $MJFOU TTIS 44)ϦΫΤετ τϥϯεϙʔτ૚ͷ҉߸Խ ύϥϝʔλωΰγΤʔγϣϯ %)伴ަ׵ 'JOE6QTUSFBN)PPL 4FSWFS τϥϯεϙʔτ૚ͷ҉߸Խ

    ҉߸Խ͞Εͨτϥϯεϙʔτ૚ͷίωΫγϣϯཱ֬
  29. TTISͷॲཧͷྲྀΕ 4FSWFS $MJFOU TTIS 44)ϦΫΤετ τϥϯεϙʔτ૚ͷ҉߸Խ τϥϯεϙʔτ૚ͷ҉߸Խ 'JOE6QTUSFBN)PPL ϢʔβೝূʹΑΔΫϥΠΞϯτͷਖ਼౰ੑ֬ೝ ҉߸Խ͞Εͨτϥϯεϙʔτ૚ͷίωΫγϣϯཱ֬

    ύϥϝʔλωΰγΤʔγϣϯ %)伴ަ׵
  30. TTISͷॲཧͷྲྀΕ 4FSWFS $MJFOU TTIS 44)ϦΫΤετ τϥϯεϙʔτ૚ͷ҉߸Խ τϥϯεϙʔτ૚ͷ҉߸Խ 'JOE6QTUSFBN)PPL ϢʔβೝূʹΑΔΫϥΠΞϯτͷਖ਼౰ੑ֬ೝ ҉߸Խ͞Εͨτϥϯεϙʔτ૚ͷίωΫγϣϯཱ֬

    ύϥϝʔλωΰγΤʔγϣϯ %)伴ަ׵ ೝূΛͲ͏΍Δ͔ ͕໰୊ʂ
  31. Ϣʔβೝূͷ࣮૷ʹ ۤ͠Μͩɾɾ

  32. ϓϩΩγΛհͨ͠Ϣʔβೝূ TTIS͸ೝূϝοηʔδͷύέοτΛͦͷ··αʔόʹ౉͠ɺ αʔό͔ΒͷϨεϙϯεΛͦͷ··ΫϥΠΞϯτʹฦ͢ 4FSWFS $MJFOU TTIS ೝূϦΫΤετ ೝূϨεϙϯε

  33. ϓϩΩγΛհͨ͠Ϣʔβೝূ TTIS͸ೝূϝοηʔδͷύέοτΛͦͷ··αʔόʹ౉͠ɺ αʔό͔ΒͷϨεϙϯεΛͦͷ··ΫϥΠΞϯτʹฦ͢ 4FSWFS $MJFOU TTIS ύεϫʔυೝূ ⭕ ೝূϦΫΤετ ೝূϨεϙϯε

  34. ϓϩΩγΛհͨ͠Ϣʔβೝূ TTIS͸ೝূϝοηʔδͷύέοτΛͦͷ··αʔόʹ౉͠ɺ αʔό͔ΒͷϨεϙϯεΛͦͷ··ΫϥΠΞϯτʹฦ͢ 4FSWFS $MJFOU TTIS ύεϫʔυೝূ ެ։伴ೝূ ⭕ ❌

    ೝূϦΫΤετ ೝূϨεϙϯε
  35. ެ։伴ೝূɿηογϣϯ*%໰୊ $MJFOUTTISؒͱTTIS4FSWFSؒ͸ҟͳΔηογϣϯ*%Λ͍࣋ͬͯΔ 4FSWFS $MJFOU TTIS ηογϣϯ*%YYY ηογϣϯ*%ZZZ ஈ֊ͷެ։伴ೝূ͕ඞཁ τϥϯεϙʔτ૚ͷ҉߸Խ 伴ަ׵࣌ʹηογϣϯ͝ͱʹ

    Ұҙͳηογϣϯ*%͕ੜ੒͞ Εɺσδλϧॺ໊ʹ࢖ΘΕΔ
  36. ެ։伴ೝূɿTTISͷ৔߹ 4FSWFS $MJFOU TTIS ެ։伴ͷొ࿥֬ೝ ʢ$IFDL1VCMJD,FZ)PPLʣ LFZ" LFZ# ൿີ伴ʹΑΔॺ໊ ʢ'FUDI1SJWBUF,FZ)PPLʣ

    w$MJFOUTTISؒͱTTIS4FSWFSؒ͸ผͷΩʔϖΞͰެ։伴ೝূΛߦ͏ wެ։伴ͷొ࿥֬ೝ΍ൿີ伴ʹΑΔॺ໊͸ϑοΫʹΑΓࣗ༝ʹ֦ுͰ͖Δ
  37. ·ͱΊ wಁաతͳ௨৴Λఏڙͯ͘͠ΕΔϓϩτίϧʹҙਤతʹׂͬͯ ೖΔ͜ͱͰɺͦͷڍಈΛࣗ༝ʹίϯτϩʔϧͰ͖Δ wTTISʹΑͬͯϢʔβ͕઀ଓઌΛҙࣝͤͣɺϢʔβ໊ϕʔεͰ ಈతʹ઀ଓઌΛಛఆͰ͖ΔΑ͏ʹͳΔ wϓϩΩγΛհͨ͠ެ։伴ೝূ͸ηογϣϯ*%ͷؔ܎Ͱஈ֊ ʹެ։伴ೝূΛ͢Δඞཁ͕͋Δ

  38. ͝ਗ਼ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠ʂʂ