შეაჩერეთ VPN კლიენტების ერთმანეთთან მიღწევა გვირაბში
სერვისამდე მიღწევა მარშრუტია, სხვა კლიენტამდე მიღწევა პოლიტიკაა. იპოვეთ გადაცემის წერტილი, რომელიც წყვეტს პარტნიორებს შორის ტრაფიკს, შემდეგ დაამტკიცეთ აკრძალვა კლიენტიდან.
ორ კლიენტს შეუძლია ორივემ გახსნას ნახტომის ჰოსტი და მაინც არ ჰქონდეთ საქმე ერთმანეთის გახსნასთან. სერვისამდე მიღწევა გადაცემის გადაწყვეტილებაა, ხოლო პარტნიორამდე მიღწევა პოლიტიკის გადაწყვეტილებაა, და VPN-ის უმეტესი სტეკები მათ ცალკე ობიექტებში ინახავს. პირველისთვის დაყენებული არაფერი ასრულებს მეორეს. ამიტომ ამოცანა წესის დამატება არ არის, არამედ იმ ობიექტის პოვნა, რომელიც ამ სერვერზე პარტნიორებს შორის ტრაფიკს წყვეტს, იქ აკრძალვის დაწერა და კლიენტიდან მისი დამტკიცება.
მარშრუტი საერთო სერვისამდე არ არის ნებართვა პარტნიორებს შორის
კლიენტების ქვექსელის გამოცხადება პარტნიორს ეუბნება, როგორ დააყენოს პაკეტი მავთულზე სხვა კლიენტის მისამართისკენ. გადაეცემა თუ არა ეს პაკეტი, შემდეგ წყდება, იმით, რაც მას გადასცემს. Linux-ის კარიბჭეზე ეს FORWARD ჯაჭვია; მომხმარებლის სივრცის დემონში — გვირაბის საკუთარი სესიების ცხრილი. მარშრუტი ხელმისაწვდომობას პასუხობს და ნებართვას ხელუხლებლად ტოვებს.
ამიტომ მხოლოდ მარშრუტების წამკითხველი იზოლაციის შემოწმება არაფერს ამტკიცებს. /24 შეიძლება ყველა კლიენტს გაეგზავნოს, მაშინ როცა პარტნიორებს შორის ყოველი პაკეტი გადაცემის კაუჭთან უგულებელყოფილია. საშიში შემთხვევა საპირისპიროა: არავითარი ცხადი წესი, ნებადართული ნაგულისხმევი და იზოლაცია, რომელიც მხოლოდ იმიტომ არსებობს, რომ არავის გამოუცდია ის.
მოთხოვნა ერთ ხაზში ჩაწერეთ ტერმინალის გახსნამდე. მიაღწიეთ სერვისების ბლოკს და ნახტომის ჰოსტს, კლიენტების ბლოკის შიგნით სხვა არაფერს არ მიაღწიოთ.
გაარკვიეთ, ვინ გადასცემს სინამდვილეში პარტნიორის პაკეტს
სერვერის ორი ქცევა კლიენტის მხრიდან ერთნაირად გამოიყურება და სხვადასხვა წესს მოითხოვს. ან ბირთვი პაკეტს კვლავ გადასცემს გვირაბის ინტერფეისიდან, ან დემონი მას სესიებს შორის აკოპირებს და ბირთვი მას ვერასდროს ხედავს.
WireGuard პირველ ჯგუფშია: მას პარტნიორებს შორის გადამრთველი არ აქვს, ამიტომ პაკეტი 10.8.0.4-იდან 10.8.0.5-მდე wg0-ზე მოდის, გადაცემის კაუჭს ეხება და კვლავ wg0-იდან მარშრუტირდება, როცა AllowedIPs ორივე მისამართს ფარავს. OpenVPN მეორე ჯგუფია, როგორც კი სერვერის კონფიგურაციაში დაყენდება client-to-client, რადგან ეს დირექტივა პაკეტს მომხმარებლის სივრცეში სესიებს შორის გადასცემს. სანამ რამეს დაწერთ, შემოწმებულ კონფიგურაციაში ეს დირექტივა ნახეთ. ბირთვის წესი, რომელიც ტრაფიკს ვერასდროს ხედავს, მოქმედ წესს არ განსხვავდება, და სწორედ ასე მთავრდება განლაგება ყოველგვარი იზოლაციის გარეშე.
წაიკითხეთ ეფექტური კონფიგურაცია და არა ის ფაილი, რომელიც ჩატვირთულად მიგაჩნიათ, რადგან დისტრიბუტივების პაკეტები საკუთარ ჩართვებს მოაქვთ. თუ დემონი გადასცემს, აკრძალვა მის საკუთარ თითოეულ-კლიენტის კონტროლშია, და ჰოსტის firewall მხოლოდ ჰოსტისკენ მიმართულ ტრაფიკს ფილტრავს. თუ ბირთვი გადასცემს, გადაცემის კაუჭი ერთადერთი მნიშვნელოვანი ადგილია.
მარშრუტიზებული და ნათარგმნი განლაგებები კიდევ ერთ შემოწმებას მოითხოვს: შორეული კლიენტის მიერ დანახული წყარო შეიძლება არ იყოს ის, რასაც ელით. მაშინ კლიენტების ქვექსელს შესაბამისი წესი არაფერს არ შეესაბამება. შესაბამისობის დაწერამდე ჩაინიშნეთ მისამართი, რომელიც თარგმანს გადაურჩება, და უპირატესობა მიანიჭეთ ინტერფეისების წყვილის შესაბამისობას NAT მისამართების გამოცნობას.
მიეცით თითოეულ მისამართს დამოუკიდებლად გაუქმებადი იდენტობა
იზოლაცია იშლება, როგორც კი ორი მოწყობილობა ერთ სერტიფიკატს იზიარებს. ამ იდენტობაზე მიბმული წესი მათ ვერ გაყოფს, და დაკარგული ლეპტოპის გაუქმება მთელ ჯგუფს აუქმებს. თითოეულ მოწყობილობაზე სერტიფიკატები ან თითოეულ პარტნიორზე გასაღებები გაუქმებას ლოკალურ, ხოლო პოლიტიკას წაკითხვად ინახავს, რადგან თითოეული მისამართი ზუსტად ერთ ადამიანს ან მანქანას შეესაბამება. სადაც დიზაინი ამას ვერ ახერხებს, ეს ოპერაციის სახელმძღვანელოში თქვით და არ აღწეროთ წესი როგორც წვრილმარცვლიანი.
მისამართების განაწილება პოლიტიკას უნდა შეესაბამებოდეს. გამოყავით ბლოკი სერვისებისთვის, ბლოკი კლიენტებისთვის, და კლიენტების მისამართები თქვენ მიერ კონტროლირებული აუზიდან გასცეთ და არა პირველი მოსულის დიაპაზონიდან. თუ სერვერი თარგმნის ან ხიდს აკეთებს, შესაბამისობის ცხრილი კონფიგურაციის გვერდით შეინახეთ, რადგან სწორედ ეს ცხრილი სჭირდება შემდეგ მკითხველს წესის ხელახლა გამოსაყვანად.
აკრძალვა იქ დადეთ, სადაც პაკეტი გვირაბს კვეთს
კარიბჭეზე, რომელიც WireGuard-ის ტრაფიკს გადასცემს, საქმეს ორი წესი ფარავს: დაუშვით სერვისების ბლოკი, შემდეგ ჩააგდეთ კლიენტების ბლოკის დარჩენილი ნაწილი. ინტერფეისების წყვილი ისეთივე მნიშვნელოვანია, როგორც მისამართები, რადგან მხოლოდ დანიშნულებაზე შესაბამისობა LAN-იდან მომავალ ტრაფიკსაც იჭერს. ამ თანმიმდევრობით ჩატვირთეთ, რომ ნებართვა პირველად შეფასდეს.
nftables-ით წყვილი არსებულ inet filter ცხრილში შედის, ჯერ ნებართვა და შემდეგ ჩაგდება. ორივე შესაბამისობა ინტერფეისების წყვილსაც და მისამართებსაც ამაგრებს.
nft add rule inet filter forward iifname "wg0" oifname "wg0" ip saddr 10.8.0.0/24 ip daddr 10.8.2.0/24 accept
nft add rule inet filter forward iifname "wg0" oifname "wg0" ip saddr 10.8.0.0/24 ip daddr 10.8.0.0/24 drop
ჩატვირთვის შემდეგ ჯაჭვი უკან წაიკითხეთ და არ დაეყრდნოთ გასვლის სტატუსს, და დაადასტურეთ, რომ ორივე წესი თქვენთვის სასურველ რიგშია. IPv6 აუზისთვის შესაბამისი ip6 წესები დაამატეთ, თორემ v4 წყვილი ორმაგი სტეკის გვირაბზე მხოლოდ მორთულობაა. თუ სერვერს უკვე აქვს ნებადართული გადაცემის პოლიტიკა, ჩაგდება დაამატეთ და არ შეცვალოთ მთელი ჯაჭვი.
როცა OpenVPN-ზე client-to-client ჩართულია, ეს გადაცემის წესები პარტნიორებს შორის ტრაფიკს ვერასდროს შეესაბამება და აკრძალვა დემონის საკუთარ კონტროლში უნდა იყოს. ბირთვის წესები ჰოსტისკენ მიმართული ტრაფიკისთვის შეინახეთ, მაგრამ იზოლაციის კონტროლად ნუ ჩათვლით.
აკრძალვა კლიენტიდან დაამტკიცეთ, და არა სერვერიდან
კარიბჭიდან ტესტირება არაფერს ამტკიცებს, რადგან ლოკალურად შექმნილი ტრაფიკი გამოსავლის გზას იღებს და გადაცემის კაუჭს ვერასდროს კვეთს. გამოიყენეთ ორი რეალური კლიენტი: ერთი, რომელმაც სერვისამდე უნდა მიაღწიოს, და ერთი, რომელიც უნდა უარყოს. ჯერ ნებადართული შემთხვევა გაუშვით, რომ გატეხილი გვირაბი მოქმედ პოლიტიკად არ მიიჩნიონ.
ნებადართული კლიენტიდან დაადასტურეთ, რომ სერვისი თავის პორტზე პასუხობს. იმავე კლიენტიდან სცადეთ პარტნიორის მისამართი და მოელოდეთ ჩუმ ჩაგდებას და არა უარის თქმას:
ping -c 3 -W 2 10.8.0.5
nc -z -w 2 10.8.0.5 22
nft list chain inet filter forward
iptables -vnL FORWARD
ping -6 -c 3 -W 2 fd00:8::5
ჩაგდებული პაკეტი და ოფლაინ პარტნიორი ორივე დროის ამოწურვას ჰგავს, ამიტომ რაიმე დასკვნამდე მისვლამდე მრიცხველები შეამოწმეთ. დაადასტურეთ, რომ ჩაგდების წესის მრიცხველი იზრდება, სანამ პარტნიორი აშკარად ჩართულია. გაიმეორეთ IPv6-ზე, სადაც არსებობის გარეშე დარჩენილი ip6 წესი v4 აკრძალვას ეფექტურად აჩვენებს. მიღებული და უარყოფილი შედეგები თარიღით ჩაწერეთ სახელმძღვანელოში, რადგან შემდეგი მიგრაცია წესს ხელახლა გამოიყვანს.