სამუშაო სახელმძღვანელო: ორი OpenVPN მომხმარებლის ცალ-ცალკე დაშვება
ერთ OpenVPN ჰოსტზე ორ მომხმარებელს სჭირდება ცალკე მსმენელები, პულები, ნდობის ფაილები და გაუქმების მიწოდება, მიღების ტესტთან ერთად, რომელიც მათ განაცალკევებს.
ორი მომხმარებელი ერთ ჰოსტზე ჟღერს როგორც კიდევ ერთი სერვერის ბლოკი და მეორე პორტი. ეს სხვა პროექტად იქცევა, როგორც კი ჩამოთვლით ყველაფერს, რაც მომხმარებელს ნამდვილად ეკუთვნის: მსმენელი, გვირაბის პული, იდენტობა, ნდობის ფაილები, მარშრუტები და გაუქმების გრაფიკი. გამოტოვეთ ერთი მათგანი და მეორე მომხმარებელი ჩუმად მემკვიდრეობით იღებს პირველის ნაწილს. შექმენით ბარათი თითოეული მომხმარებლისთვის და შეავსეთ ის პირველი კლიენტის დაკავშირებამდე.
მიანიჭეთ სრული რესურსების ბარათი თითოეულ მომხმარებელს
დაჯავშნეთ მთელი ნაკრები ერთად: საჯარო პორტი, გვირაბის ქვექსელი, კონფიგურაციის გზა, ჟურნალის დანიშნულება, სერვისის ეგზემპლარის სახელი და მოწყობილობა. მათი ჯგუფად დასახელება სწორედ ის არის, რაც ხელს უშლის მომუშავე ფაილის კლასიკურ ასლს, რომელიც ჯერ კიდევ შეიცავს პირველი მომხმარებლის პულს ან ინტერფეისს. მნიშვნელობები მაგალითებია და არა დაჯავშნილი პორტები, ამიტომ შეამოწმეთ, რას იყენებს ჰოსტი უკვე. დაწყებული სერვისი არ არის იგივე, რაც სრული მომხმარებელი.
შეინახეთ ბარათი კონფიგურაციის გვერდით და განაახლეთ ყოველ ჯერზე, როცა მნიშვნელობა იცვლება. რეალობას ჩამოშორებული დოკუმენტაცია უარესია, ვიდრე არარსებული.
შეინახეთ ნდობის მასალა თითოეული მომხმარებლის შიგნით
ცალკე გამომცემი ორგანო თითოეული მომხმარებლისთვის საზღვარს ადვილად გასაანალიზებელს ხდის და ხელმოწერის გასაღებს ინტერნეტისკენ მიმართული ჰოსტისგან მოშორებით ინახავს. საერთო ფესვიც შეიძლება მუშაობდეს, მაგრამ საერთო ანკერი ორ სერვისს ერთ წევრობის დომენად არ აქცევს. გადაწყვიტეთ, რომელ ჯაჭვებს იღებს თითოეული მსმენელი და რომელ კლიენტის იდენტობებს ანიჭებს უფლებას, შემდეგ ორივე ჩაწერეთ. ნუ მოაშორებთ სერთიფიკატებს ჯაჭვიდან ცდისა და შეცდომის გზით, სანამ რამე არ დაუკავშირდება.
თავად სერვერის კერძო გასაღები ეკუთვნის თითოეული მომხმარებლისთვის დაცულ ფაილს და არა შაბლონების კატალოგს, რომელიც კონფიგურაციასთან ერთად მრავლდება.
გაყავით ქსელები ისევე, როგორც პროცესები
ორი პროცესი ორ პორტზე კვლავ იზიარებს ჰოსტს და მარშრუტიზაციის ცხრილს, თუ არ გააცალკევებთ მათ. დაადასტურეთ, რა უსმენს, სანამ დიზაინს ენდობით.
ss -lunp | grep -E '1194|1195'
openssl verify -CAfile customer-a/ca.crt customer-a/client.pemმსმენელის შემოწმება გვიჩვენებს, რომელი პროცესი ფლობს თითოეულ საჯარო პორტს, ხოლო გადამოწმება გვიჩვენებს, ჯაჭვდება თუ არა კლიენტის სერთიფიკატი განსაზღვრულ ანკერთან. არც ერთი გამოსავალი არ ამტკიცებს, რომ A-ს კლიენტი ვერ მიაღწევს B-ს ქვექსელს, ამიტომ განსაზღვრეთ წყაროსა და დანიშნულების პოლიტიკა, დაბრუნების მარშრუტები და ნებისმიერი განზრახ საერთო სერვისი. ქსელის სახელთა სივრცეები ან კონტეინერები ყოფს მარშრუტიზაციის კონტექსტებს და ამცირებს შემთხვევით შერევას, მაგრამ ისინი სრული მოიჯარის საზღვარი არ არიან თავისთავად. აირჩიეთ უფრო ძლიერი იზოლაციის მექანიზმი, როცა საფრთხის მოდელი ამას მოითხოვს.
გაუქმება მიაწოდეთ გადაცემამდე
სერთიფიკატის განლაგება არ არის სრული, სანამ გაუქმებას მიწოდების გზა არ ექნება. შეამოწმეთ CRL-ის გამომცემი და მოქმედების ფანჯარა დაშვების ნაწილად.
openssl crl -in customer-a/crl.pem -noout -lastupdate -nextupdate
systemctl status openvpn@customer-aCRL-ის შემოწმება აცნობებს, როდის გაიცა სია და როდის იწურება, ხოლო სერვისის სტატუსი ადასტურებს, რომ მისი მკითხველი ეგზემპლარი მუშაობს. განაახლეთ სია გამოცემის პოლიტიკის გრაფიკის მიხედვით მაშინაც, როცა ახალი არაფერი გაუქმებულა, რადგან ვადაგასული CRL შეიძლება ყველა კლიენტი უარყოს. გამოაქვეყნეთ სრული ფაილი, ნაცვლად იმისა, რომ მკითხველებს ნაწილობრივი ჩანაწერი შეხვდეთ, და განლაგებამდე გადაამოწმეთ ხელმოწერა. ჩაწერეთ, ვის ეკუთვნის გამოცემა, საბოლოო წერტილის ოპერირება და პენსიაზე გასვლა, რათა A მომხმარებლის გამორთვამ B არ შეაწუხოს.
შემდეგ გაუშვით მიღების წყვილი: ნებადართული კლიენტი აღწევს საკუთარ სერვისს, ხოლო A-ს სამოწმებო მონაცემები B-ის მსმენელის მიერ უარყოფილია. ეს არის საზღვარი, გამოხატული როგორც ტესტი.