ერთმა კლიენტმა უნდა მიაღწიოს მეორე კლიენტის SSH სერვისს, ხოლო აუზის დარჩენილი ნაწილი ისეთივე იზოლირებული უნდა დარჩეს, როგორც დღეს. მაცდური გადამრთველია client-to-client, რომელიც ერთდროულად რთავს თანასწორებს შორის წვდომას ყველასთვის და გადაწყვეტილებას ბირთვის ნაცვლად OpenVPN-ს გადასცემს. უფრო ვიწრო პასუხი ამ გადამრთველს გამორთულს ტოვებს და საშუალებას აძლევს სერვერის საკუთარ მარშრუტიზაციასა და ფაიერვოლს ზუსტად ერთი ნაკადი ატაროს.

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

სად გადააქვს client-to-client პაკეტი

client-to-client ჩართული როდესაც არის, სერვერი თანასწორის პაკეტს შიდა გზით გადასცემს იმის ნაცვლად, რომ ისევ გვირაბის მოწყობილობიდან გარეთ გაგზავნოს, ამიტომ პაკეტი ბირთვის გატარების გზაზე არასოდეს მიდის. ეს მოხერხებულია და ასევე ნიშნავს, რომ თქვენი ფაიერვოლი არასოდეს ხედავს იმ ნაკადს, რომელიც უნდა აკონტროლოს. დატოვეთ პარამეტრი გამორთული და სერვერი პაკეტს იმავე ინტერფეისიდან გარეთ მიმართავს, რაც მას netfilter-ის წინ აყენებს. იგივე ინტერფეისი შემოდის, იგივე გადის, და FORWARD ჯაჭვს ხმა აქვს.

გაცვლა ნათელია: იძენთ ერთ პოლიტიკის წერტილს და იღებთ იმ მარშრუტიზაციასა და გატარებას, რომელსაც მოკლე გზა თქვენთვის აკეთებდა. ეს სამუშაო ერთი ნაკადისთვის მცირეა და იზრდება ყოველი დამატებული გამონაკლისით. დათვალეთ გამონაკლისები ახლა, რადგან სწორედ წესების კრებულში ცხოვრობს თანასწორებს შორის პოლიტიკა.

გზა, რომელსაც თანასწორის პაკეტი რეალურად გადის

დავუშვათ Linux Community OpenVPN 2.6 სერვისი, TUN დამუშავება მომხმარებლის სივრცეში და არა DCO, ქვექსელის ტოპოლოგია, tun0 და 10.44.0.0/24-ის აუზი კლიენტ A-ით 10.44.0.21-ზე და კლიენტ B-ით 10.44.0.37-ზე. ქვექსელის ტოპოლოგიისას A-ს მიღებული მისამართი და ნიღაბი უკვე ფარავს აუზს, ამიტომ A პაკეტს დამატებითი უბიძგებელი მარშრუტის გარეშე უგზავნის გვირაბის მოწყობილობას. შეამოწმეთ A-ზე ფაქტობრივი მარშრუტი და ნუ ივარაუდებთ მას.

სერვერზე პაკეტი B-ზე მისამართით მოდის, რაც ლოკალური მისამართი არ არის, ამიტომ გადაეცემა. IPv4 გატარება ჩართული უნდა იყოს, რომ ეს საერთოდ მოხდეს, და მარშრუტის ძიებამ პაკეტი ისევ tun0-იდან გარეთ უნდა გაგზავნოს. ამიტომ ფაიერვოლი ხედავს გადაცემულ ნაკადს ორივე მხარეს იმავე ინტერფეისით, და ეს არის ის დეტალი, რომელსაც წესების უმეტესი კრებული გამოტოვებს. აქ წყაროს თარგმნა საჭირო არ არის, და სწორედ A-ს მისამართის უცვლელად შენახვა აძლევს B-ს საშუალებას გამოიყენოს საკუთარი წყაროზე დაფუძნებული წესი.

ორი წესი სერვერზე, ამ თანმიმდევრობით

სამი წესი ატარებს მთელ ნებართვას: გატარება, წყვილის გამონაკლისი და ნაგულისხმევი ჩაგდება გვირაბის წყვილისთვის. მიღების წესი ასახელებს წყვილსა და სერვისს, ამიტომ ნებართვა გადაურჩება მზარდ აუზს. მოათავსეთ ის ნებისმიერ ზოგად აკრძალვამდე გვირაბ-გვირაბ ტრაფიკისთვის, რადგან პირველი დამთხვევა იმარჯვებს:

sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i tun0 -o tun0 -s 10.44.0.21 -d 10.44.0.37 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -j DROP

ეს ბრძანებები საილუსტრაციოა და ეკუთვნის იმ მექანიზმს, რომელსაც თქვენი ჰოსტი წესების შესანახად იყენებს; მუშაობის დროს ჩასმა შემდეგ ჩატვირთვაზე ქრება. სწორედ მდგომარეობიანი წესი აძლევს B-ის პასუხებსა და TCP ხელის ჩამორთმევას უფლებას უკან დაბრუნდეს მეორე, სარკული მიღების გარეშე.

შეამოწმეთ მრიცხველები შემდეგ და არა წესების სია, რადგან წესი, რომელიც არასოდეს ემთხვევა, იდენტურად გამოიყურება მოქმედის მსგავსად. თუ მრიცხველები ნულზე დარჩა, პაკეტი არ მიდის იმ გზით, რომელსაც ფიქრობთ.

რა უნდა დაუშვას B-მ კიდევ

B უშვებს SSH სერვისს, ამიტომ B წყვეტს, უსმენს თუ არა რამე გვირაბის მისამართზე და იღებს თუ არა მისი საკუთარი ჰოსტის ფაიერვოლი წყაროს. ქსელური ნებართვა სერვერზე ნებართვა არ არის B-ის არც ერთი ანგარიშისთვის, და ჰოსტის გასაღების შემოწმება და მომხმარებლის ავთენტიფიკაცია კვლავ მოქმედებს, როგორც ნებისმიერი სხვა ადგილიდან.

ჯერ გამოსცადეთ დადებითი შემთხვევა: ახალი SSH კავშირი A-დან B-ის გვირაბის მისამართზე, მიღებული მოსალოდნელი ჰოსტის გასაღებით. შემდეგ გამოსცადეთ სხვა თანასწორი ან სხვა პორტი და დაადასტურეთ, რომ უარყოფილია, რადგან ნებართვა, რომელიც ჩუმად ყველაფერს უშვებს, არ განსხვავდება მოქმედისგან, სანამ ეს მნიშვნელოვანი არ გახდება. ამ ტესტის ორივე ნახევარი აუცილებელია, და მეორეა ის, რომელსაც ხალხი გამოტოვებს.

ჩაწერეთ მინიჭებული მისამართები, ფაქტობრივი მარშრუტები ორივე კლიენტზე და ზუსტი წესები სერვერზე და B-ზე. წარმატებული ping შესასვლელამდე ან ღია პორტი სერვერზე ამათგან არაფერს ამტკიცებს, რადგან ორივე შეიძლება მართალი იყოს, სანამ თანასწორებს შორის გატარება ჯერ კიდევ დაბლოკილია. ჩაწერეთ ეს რიცხვები, სანამ გვირაბი აწეულია, რადგან მისამართი, რომელსაც კლიენტი ხელახალი დაკავშირების შემდეგ იღებს, შეიძლება სხვა იყოს.

დაკავშირებული სტატიები