reverse ssh tunnel

ხშირად ხდება ხოლმე როცა კომპიუტერი ნატის ქვეშ არის და ssh ზე გვინდა დაკავშირება ყველაფერი მარტივია როცა Port Forwarding შეგვიძლია, მაგრამ რა უნდა ვქნათ მაშინ, როცა პორტები არ არის დაფორვარდებული ან კომპიუტერი იმყოფება ფაირვოლის უკან? სწორედ აქ შეგვიძლია გამოვიყენოთ reverse ssh ანუ სახელიდან გამომდინარე მარტივად რომ ვთქვათ ქონექშენის ინიციატორი ვართ არა ჩვენ არამედ Remote კომპიუტერი.

მოკლედ თუ  შეგვიძლია კონტაქტზე გავიდეტ office pc დან home pc ზე რომელიმე პორტზე ჩვენ გვექნება შესაძლებლობა ამ აწეულ ლინკში Home Pc დან უკან office pc სკენ გავატაროთ ტრაფიკი.

ესეთი სქემის გაკეთება შეგვიძლია ssh ით:

ssh -R 2210:localhost:22 homepc@xx.xx.xx.xx – ამას ვაკეთებთ office pc ზე და ხდება ზუსტად ის მოქმედება რაც სურათზე არის ასახული მწვანე ხაზით. -R პარამეტრი ნიშნავს reverse ს 2210 არის ის პორტი რასაც მოუსმენს home pc და ყველა ქონექშენი რაც მოვა ამ პორტზე გადაფორვარდდება Office Pc ის 22 ე პორტზრე. ამ ყველაფრის შემდეგ თუ შევალთ Home Pc ზე და დავწერთ ssh -p 2210 localhost აღმოვჩნდებით ფაირვოლის უკან მყოფ ოფისის კომპიუტერზე.  ეს არის პრინციპი reverse ssh ტუნელის. ეხლა ვნახოთ უფრო დახვეწილი მაგალითები თუ როგორ შეგვიძლია გამოვიყენოთ ეს ყველაფერი.  წარმოვიდგინოთ რომ home Pc არ არის ყოველთვის ჩართული ან კიდე გვინდა რომ Office pc  სხვადასხვა ადგილიდან დავუკავშირდეთ ხოლმე. ამისთვის არის საკმაოდ კარგი გამოსავალი იმ შემთხვევაში თუ კიდევ მესამე კომპიუტერი არსებობს მას მივცემთ middle man ის როლს (ანუ იქნება შუამავალი)  მოკლედ სურათზე უკეთ ჩანს ყველაფერი:

სურათზე მოცემული სქემის განსახორციელებლად Office pc ზე ვაკეთებთ ასე:
ssh -R 2210:localhost:22 server@xx.xx.xx.xx შემდეგ იგივენაირად ნებისმიერი ადგილიდან შევდივართ სერვერზე და ვწერთ იგივეს რაც ზევითა მაგალითში: ssh -p 2210 localhost და რათქმაუნდა თავს ამოვყოფთ Office pc ში.

ცოტა არ იყოს მოსაბეზრებელია Middle server ზე ssh ით შესვლა და მერე კიდე იქიდან ბრძანების გაშვება. მოკლედ ssh ტუნელი მარტო ბინდავს ლოკალჰოსტს დეფაულტად სხვა ინტერფეისებსაც რომ მოუსმინოს ამისათვის საჭიროა GatewayPorts on ამ პაარამეტრის დამატება ssh ში.

ssh -R xx.xx.xx.xx:2210:localhost:22 user@middleman  აი ამ ბრძანებით კონკრეტული აიპი შეგვიძლია დავბინდოთ, თუ არ მივუთითებთ აიპის მაშინ ყველა ინტერფეისს მოუსმენს როდესაც ჩართულია პარამეტრი GatewayPorts on ssh ში.  რახან უკვე შეგვიძლია 2210 პორტი მოვასმენინოთ public Ip ზე აღარ არის საჭირო middle man ზე შესვლა და შემდეგ ტუნელის აწევა:

ssh -p 2210 user@middleman  სულ ეს არის

კიდევ ერთი მაგარი რაღაცა რაც შესაძლებელია reverse ssh ით გაკეთდეს. მაგალითად თუ გვაქვს ფაირვოლის უკან პრინტერი ან რამე სხვა კომპიუტერი სადაც აქსესი აქვს მხოლოდ office pc ის შეგვიძლია გავაკეთოთ ესეთი რაღაცა:
ssh -R xx.xx.xx.xx:2211:192.168.0.5:21 user@middleman
ssh -R [bind_address:]port:host:hostport და გვექნება ესეთი სქემა:

საქმის გასალამაზებლად შეგვიძლია გამოვიყენოთ f და N პარამეტრი f ი უშვებს ბეგრაუნდში და N ი მიუთითებს რომ არ გვინდა ბრძანების შესრულება Remote ჰოსტზე, ანუ:

ssh -N -f -R [bind_address:]port:host:hostport
ssh -N -f -R xx.xx.xx.xx:2211:192.168.0.5:21

იდეები:   შეგვიძლია გავაკეთოთ ცენტრარიზებული Middle Man სადაც ბევრ კომპზე იქნება ტუნელი და ჩერეზ იქიდან დავუკავშირდებით ჰოსტებს. დამატებით შეიძლება სკრიპტების გაშვება თუ ინტერნეტი გაითიშება ავტომატურად ახლიდან გააკეთოს ტუნელი, მარა ცუდი მხარეც არის წარმოიდგინე რა მოხდება თუ ვინმე middle man ზე მოახერხებს შესვლას ?

Link #1 #2 #3 #4 #5

Some other stuff you might find it is useful: RSTunnel autossh sslh  #2 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s