უკან დაბრუნება
შექმენით საკუთარ სერვერზე გაშვებული localhost-გვირაბი OpenSSH-ითა და nginx-ით
SiTech AI Team2 წთ. საკითხავი

შექმენით საკუთარ სერვერზე გაშვებული localhost-გვირაბი OpenSSH-ითა და nginx-ით

თვითჰოსტინგიანი კონფიგურაცია OpenSSH-ის დისტანციურ გადამისამართებას nginx-თან აერთიანებს, რათა localhost-ის წინასწარი ნახვა გამოაქვეყნოს, wildcard TLS დაუმატოს და გაზიარებული ბმულები ვადიანი, ჰეშზე დაფუძნებული წვდომის მონაცემებით დაიცვას.

ლოკალური წინასწარი ნახვის გადამისამართება

localhost:8080-ზე გაშვებული ბლოგის პრევიუ შეიძლება გაზიარდეს თვითჰოსტინგიანი გვირაბით, კომერციული სერვისის გარეშე. ბრძანება ssh -N -R 0:localhost:8080 web02.luffy.cx OpenSSH-ს სთხოვს, დისტანციური პორტი ლოკალურ სერვისზე გადაამისამართოს. დისტანციური პორტის მნიშვნელობა 0 აიძულებს სერვერს, თავისუფალი პორტი გამოყოს, რაც მაგალითში 41535-ია.

დისტანციურ სერვერზე nginx ამთავრებს HTTPS-კავშირებს და მოთხოვნებს გამოყოფილ loopback-პორტზე პროქსიავს. server-name გამოსახულება გვირაბის ჰოსტნეიმიდან იღებს პორტს, რაც nginx-ს საშუალებას აძლევს, ტრაფიკი სწორ ლოკალურ გადამისამართებაზე გაატაროს. კონფიგურაციას ასევე სჭირდება wildcard DNS-ჩანაწერი *.ssh.luffy.cx-სთვის და Let's Encrypt-ის wildcard სერტიფიკატი.

გაზიარებული URL-ების დაცვა

დამატებითი დაცვის გარეშე გამოყოფილი პორტი ერთადერთი საიდუმლოა, რომელიც კონტენტს დახურულად ინახავს. კონფიგურაცია წვდომის კონტროლს აუმჯობესებს ngx_http_secure_link_module-ით, რომელიც მოთხოვნის მნიშვნელობებიდან და საიდუმლო გასაღებიდან ჰეშს ითვლის. ვინაიდან base64-ით დაშიფრული ჰეში არ შეიძლება ჩაიდოს რეგისტრისადმი მგრძნობიარე დომენის სახელში, ის იგზავნება HTTP Basic Authentication-ის მომხმარებლის სახელის ნაწილად, ვადის გასვლის დროის ნიშნულთან ერთად.

Nginx მომხმარებლის სახელს $remote_user ცვლადიდან კითხულობს. map გამოსახულება ჰეშსა და ვადის გასვლის დროის ნიშნულს ერთმანეთისგან ჰყოფს, ხოლო secure link გამოსახულება გადამოწმებისთვის აერთიანებს დროის ნიშნულს, აღებულ პორტს და კონფიგურებულ საიდუმლო გასაღებს. არ არსებული ან არასწორი ჰეში იწვევს 401 პასუხს WWW-Authenticate ჰედერით. ვადაგასული ბმული იწვევს 410 პასუხს. სანამ სწორ მოთხოვნას პროქსიავს, nginx შლის Authorization ჰედერს და კონფიგურირებულია WebSocket-კავშირების მხარდასაჭერად.

გვირაბის ბმულების გენერაცია

ბმულის ჰეში გენერირდება ვადის გასვლის დროის, პორტისა და საიდუმლო გასაღების OpenSSL-ის MD5-სა და base64-ოპერაციებში გატარებით, შემდეგ კი შედეგი URL-უსაფრთხო ტოკენად გარდაიქმნება. დამხმარე სკრიპტი 86400 წამის სიცოცხლის ხანგრძლივობას იყენებს. ვინაიდან OpenSSH თავის გამოყოფილ პორტს გარემოს ცვლადით არ ამხელს, სკრიპტი მშობელი პროცესების ხეში დადის, რომ იპოვოს sshd-session პროცესები და მათი მოსმენის პორტები.

პორტების მიღების შემდეგ სკრიპტი თითოეულისთვის დაცულ URL-ს გენერირებს და სესიას ღიად ინახავს. http-over-ssh სახელწოდების SSH-კონფიგურაციის ჩანაწერი დამხმარეს დისტანციურ სერვერზე უშვებს. შედეგად მიღებული კონფიგურაცია მხოლოდ OpenSSH-სა და იქ უკვე გაშვებულ nginx-ს ეყრდნობა, ხოლო ცალკე NixOS-კონფიგურაცია ხელმისაწვდომია NixOS-ზე დამხმარის სამართავად.

SSiTech

SiTech — AI-გაძლიერებული ვებ დეველოპმენტი

ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.