ახალი ვერსიების წინასწარი ხედები, ანგარიშები, შიდა ხელსაწყოები: ბევრი გვერდი საჯარო არ უნდა იყოს, თუმცა საკუთარი მომხმარებლების მართვა არ სჭირდება. საერთო პაროლს (HTTP Basic Auth) ერთმანეთს გადასცემენ და არასოდეს ცვლიან, სრული იდენტიფიკაციის პლატფორმა კი რამდენიმე გვერდისთვის ზედმეტია.
ამისთვის შევქმენით Gatekeeper – პატარა სერვისი reverse proxy-ის უკან, რომელიც წყვეტს, ვის შეუძლია რომელი გვერდის ნახვა.
როგორ მუშაობს
ყოველ მოთხოვნაზე reverse proxy ეკითხება Gatekeeper-ს – nginx auth_request-ით, Traefik forwardAuth-ით. სესიის გარეშე ვიზიტორი შესვლის გვერდს პირდაპირ იმ მისამართზე ხედავს, რომელიც გახსნა, შესვლის შემდეგ კი იქვე ბრუნდება.
თითოეული ჰოსტისთვის შესვლის ორი გზაა:
- ერთჯერადი კოდი ელფოსტით: რვა ციფრი, მოქმედებს 15 წუთი და მხოლოდ იმ ბრაუზერში, რომელმაც ის მოითხოვა.
- ნებისმიერი OpenID Connect პროვაიდერი: Zitadel, Google, Microsoft, GitLab ან სხვა.
ორივე შემთხვევაში ჯგუფების სია წყვეტს, ვის შეუძლია რომელ ჰოსტზე შესვლა – სიაში შეიძლება იყოს ცალკეული მისამართები ან მთელი დომენი.
უსაფრთხოება ჩანაფიქრიდანვე
- ეჭვის შემთხვევაში – დახურულია: უცნობი ჰოსტი, დაზიანებული cookie ან პროვაიდერის შეცდომა შესვლის გვერდზე მთავრდება და წვდომას არასოდეს იძლევა.
- არანაირი მინიშნება მისამართებზე: მისამართი წვდომის გარეშე იმავე პასუხს იმავე დროში იღებს, რასაც მისამართი წვდომით – წერილს მხოლოდ ეს უკანასკნელი იღებს.
- სესიები დაშიფრული cookie-ებია, ჰოსტზე მიბმული; კოდები მხოლოდ ჰეშის სახით ინახება.
- მისამართის ველამდე არასავალდებულო proof-of-work ჩვენი ALTCHA სერვისის მეშვეობით ბოტებს აჩერებს.
- თუ წერილი კოდით უკან დაბრუნდა, ამ მისამართზე 48 საათის განმავლობაში ახალი წერილი აღარ იგზავნება.
- შესვლის გვერდები სკრიპტების გარეშე მუშაობს და მკაცრი Content Security Policy აქვს; მხოლოდ არასავალდებულო ALTCHA ნაბიჯი ტვირთავს თავის ვიჯეტს.
მსუბუქი ექსპლუატაციაში
Gatekeeper ერთი სტატიკური Go პროგრამაა: 15 MB-იანი იმიჯი, რომელსაც უმოქმედო რეჟიმში დაახლოებით 5 MiB მეხსიერება სჭირდება. არ არის არც მონაცემთა ბაზა, არც volume – სესიები cookie-ში ინახება, მოლოდინში მყოფი კოდები – მეხსიერებაში, მომხმარებლები და ჯგუფები – ერთ JSON ფაილში. gatekeeper check კონფიგურაციას გადატვირთვამდე ამოწმებს. შესვლის გვერდები და წერილები ინგლისურ, გერმანულ, რუსულ და ქართულ ენებზეა, თქვენი სახელით, ლოგოთი და ფერებით ან ნეიტრალური იერით.
nginx-ში დაცულ არეს სამი სტრიქონი სჭირდება; სრული მაგალითი README-შია:
location / {
auth_request /_gatekeeper/auth;
error_page 401 = /_gatekeeper/sign_in;
error_page 403 = /_gatekeeper/denied;
}
გამოყენებაში
Gatekeeper იცავს ჩვენი ვებგვერდების Lighthouse და SEO ანგარიშებს და ახალი ვერსიების წინასწარ ხედებს.
წყაროს კოდი განთავსებულია GitLab-სა და GitHub-ზე, იმიჯი – Docker Hub-ზე, MIT ლიცენზიით.
სიამოვნებით დავაყენებთ მას თქვენი გვერდებისთვისაც.