ერთი OpenVPN კლიენტის გაძევება: kill, deny თუ სერტიფიკატის გაუქმება?
OpenVPN-ის სამი მოქმედება აშორებს კლიენტს, მაგრამ თითოეული სხვა რამეს ამთავრებს: აქტიურ სესიას, ერთ შესვლის მცდელობას ან ხელახლა დაკავშირების უფლებას. აირჩიეთ იდენტობის მიხედვით.
თქვენს ჩანაწერებში გაქვთ common name და მისამართი, და სამი ბრძანება, რომლებიც ყველა კლიენტის მოცილებას ჰგავს. მხოლოდ ერთი აკეთებს იმას, რაც გსურთ, და არჩევანი დამოკიდებულია იმაზე, გჭირდებათ თუ არა ახლა მიმდინარე სესიის დასრულება, შემდეგი შესვლის უარყოფა, თუ დაკავშირების უფლების სრულად ჩამორთმევა. სანამ რამეს შეეხებით, წაიკითხეთ ის იდენტობა, რომელიც ნამდვილად გაქვთ, რადგან OpenVPN-ის აუზი მოგვიანებით იმავე გვირაბის მისამართს სხვა სესიას გადასცემს.
რეალურად რომელი იდენტობა გაქვთ
ვერსია 3-ის სტატუსის ფაილი ჩვეულებრივი საწყისი წერტილია. CLIENT_LIST ნაწილი ატარებს common name-ს, რეალურ მისამართს, ბაიტების მთვლელებს და დაკავშირების დროს; ROUTING TABLE ნაწილი ვირტუალურ მისამართს უკავშირებს common name-ს ბოლო მითითების დროის ნიშნით. common name არის სტაბილური იდენტობა. ვირტუალური მისამართი განაწილებაა, და NAT-ის უკან არსებული რეალური მისამართი შეიძლება შეიცვალოს სესიებს შორის, სერვერზე არაფერი შეიცვალოს.
მართვის ინტერფეისი მსგავს ხედს აჩვენებს თავისი status ბრძანებით და თითოეულ სესიას ამატებს კლიენტის ID-ს. სწორედ ამ ID-ს ელოდება client-kill, და ეს არ არის გვირაბის მისამართი. თუ უნდა იცოდეთ, რომელმა common name-მა რომელი მისამართი მიიღო დაკავშირების დროს, client-connect სკრიპტის გარემოში ორივეა სანდო გარე მისამართთან ერთად, მაგრამ ეს სკრიპტი OpenVPN მომხმარებლად მუშაობს და სჭირდება ჩაწერადი ლოგის გზა.
| What you hold | Where it came from | What it can act on |
|---|---|---|
| Common name | CLIENT_LIST, or the auth hook | kill, and credential revocation |
| Client ID | status on the management socket | client-kill, that one session |
| Tunnel address | ROUTING TABLE, client-connect environment | Nothing durable, the address is recycled |
მოკალი ახლა, უარყავი შესვლისას, გააუქმე სამუდამოდ
მართვის ინტერფეისში ორივე მოცილების ბრძანება სესიის მოქმედებაა. kill იღებს common name-ს ან რეალურ მისამართს და პორტს; client-kill იღებს კლიენტის ID-ს და დაუყოვნებლივ ამთავრებს ამ ინსტანციას. არც ერთი არ არის ბლოკი: გაძევებული კლიენტი, რომელსაც აქვს მოქმედი სერტიფიკატი და პაროლი, წამებში ხელახლა უკავშირდება, რაც კარგია ტესტური peer-ის ხელახლა გამოყენებისას და უსარგებლოა ლეპტოპის მოპარვისას.
client-deny სხვა ტიპის გადაწყვეტილებაა. ჩვეულებრივ ის გაიცემა authentication ან client-connect კაუჭიდან და უარყოფს სესიას მიზეზით, ამიტომ ერგება პოლიტიკას, რომელიც უარყოფს შესვლას და არა იმას, რომელიც წყვეტს კავშირს. დოკუმენტაცია ასევე აფრთხილებს, რომ TLS-ის ხელახალი მოლაპარაკების დროს გაცემული უარყოფა ბათილად აცხადებს ხელახლა შეთანხმებულ გასაღებს, ხოლო არსებული სესია შეიძლება გაგრძელდეს გადასვლის ფანჯრის დახურვამდე. თუ მოთხოვნაა, რომ კლიენტი ახლა გაქრეს, დოკუმენტირებული პასუხია client-kill.
გრძელვადიანი მოცილება ამ ყველაფრის ქვეშაა. გააუქმეთ სერტიფიკატი და დარწმუნდით, რომ crl-verify მიუთითებს სიაზე, რომელსაც სერვერი ნამდვილად ხელახლა ტვირთავს, გამორთეთ კლიენტისთვის სპეციფიკური კონფიგურაციის ფაილი ccd კატალოგში, ან გამორთეთ ანგარიში იმ backend-ში, რომელსაც authentication კაუჭი ეკითხება. გაუქმება არც მყისიერია: ნაგულისხმევი reneg-sec პარამეტრებით დამყარებული სესია შეიძლება გაგრძელდეს ხელახალ მოლაპარაკებამდე, ამიტომ სესიის მოქმედება და სერტიფიკატის მოქმედება ერთმანეთს ავსებს და არ არის ალტერნატივა.
თავისუფალია მართვის სოკეტი?
მართვის ინტერფეისი ერთდროულად ერთ კლიენტს ემსახურება. თუ GUI ან მონიტორინგის დემონი უკვე ფლობს კავშირს, თქვენი სკრიპტი ვერ მიუერთდება გვერდით, და კლიენტის მიხედვით შეიძლება არსებული გამოდევნოთ და არა სუფთად ჩავარდეთ. მისი პაროლი ამ სოკეტზე ღია ტექსტით მოძრაობს, ამიტომ მისი ადგილი ლოკალური მისამართი ან unix სოკეტია, არასოდეს საჯარო ინტერფეისი.
როცა სოკეტს ვერ იღებთ, ჯერ კიდევ გაქვთ არჩევანი და ყველა ნელია. ჯერ გაათავისუფლეთ GUI-ის სესია, თუ მას აკონტროლებთ, ან მიიღეთ სერტიფიკატის ფენის გზა და დაელოდეთ შემდეგ ხელახალ მოლაპარაკებას. რაც არ უნდა გააკეთოთ, ეს არის სერვისის გადატვირთვა ერთი კლიენტის მოსაშორებლად, რადგან ეს ყველა სხვა სესიასაც ამთავრებს და ამ სესიის სტატუსის ფაილის მტკიცებულებებს ანადგურებს.
თანმიმდევრობა, რომელსაც ცოცხალ სერვერზე ვასრულებ
დაუკავშირდით, წაიკითხეთ მიმდინარე მდგომარეობა, იმოქმედეთ ახლახან წაკითხულ ID-ზე და შემდეგ კვლავ წაიკითხეთ. დოკუმენტიდან კოპირებული მნიშვნელობები არასწორი ადამიანის მოკვლის ყველაზე გავრცელებული გზაა.
status # note the client ID and common name
client-kill 3 # end that session now
kill Test-Client # alternative: by common name
status # confirm the session is goneზემოთ მოცემული სახელი და რიცხვი დამცავი ადგილებია, და ID-ები ხელახლა გამოიყენება მას შემდეგ, რაც სხვა კლიენტები გაითიშებიან. სანამ რაიმეს დასრულებულად ჩაწერთ, დაადასტურეთ, რომ სტრიქონი არ არსებობს, და შეამოწმეთ, რომ დაკავშირებული კლიენტების რაოდენობა ერთით შეიცვალა და არა რამდენიმით.
დაადასტურეთ, რომ ის გარეთ დარჩა
ჩაწერეთ common name, გვირაბის მისამართი, გარე მისამართი და მოცილების წუთი. თუ იგივე common name წუთში კვლავ გამოჩნდება, სესიის მოქმედებამ იმუშავა და სერტიფიკატის ფენამ არა, რაც სრულიად განსხვავებული შეკეთებაა იმ ბრძანებისგან, რომელმაც არასოდეს იმოქმედა.
შემდეგ გამოსცადეთ კლიენტის მხრიდან. გაუქმებული სერტიფიკატი უნდა ჩავარდეს შემდეგ ხელის ჩამორთმევაზე; თუ ის მაინც უკავშირდება, CRL საერთოდ არ იკითხება, და სწორედ ეს არის მოხსენების ღირსი აღმოჩენა. აირჩიეთ მოქმედება იმის მიხედვით, რაც უნდა დაასრულოთ, დაადასტურეთ მეორე status-ით და გაასწორეთ სერტიფიკატის ფენა, როცა პასუხი სესიაზე დიდხანს უნდა გაგრძელდეს.