ერთი OpenVPN პორტი, სამი სერვისი: რატომ არის მნიშვნელოვანი შიდა პორტები
ერთი გვირაბი, სამი სერვისი, ერთი საჯარო პორტი. გამოყავით გარე VPN მსმენელი აპლიკაციების შიდა პორტებისგან, შემდეგ გამოსცადეთ თითოეული შიდა ნებართვა ცალკე.
ერთ SSH სესიას, ერთ ვებ აპლიკაციას და ერთ სახელის ძიებას შეუძლიათ გაიზიარონ ერთი VPN კავშირი პორტებისთვის ჩხუბის გარეშე. კლიენტი აშენებს ერთ დაშიფრულ ნაკადს კარიბჭისკენ და ყოველი აპლიკაციის საუბარი მის შიგნით მოძრაობს. გარეთ ჩანს მხოლოდ გვირაბის საკუთარი ტრანსპორტი და პორტი. შიგნით თითოეული სერვისი ინარჩუნებს საკუთარ პორტს და მაინც საკუთარი ნებართვა სჭირდება.
რას ატარებს გარე ნაკადი და რას მალავს
კლიენტი ყოველ პაკეტს გვირაბის ტრანსპორტში ახვევს, სანამ ის მანქანას დატოვებს. ამ გარე ნაკადს აქვს ერთი დანიშნულების პორტი, რომელიც VPN-ის კონფიგურაციისას დაფიქსირდა. გარსის შიგნით ყოველი ორიგინალური პაკეტი ინარჩუნებს იმ სერვისის მისამართსა და პორტს, რომელსაც მიმართავს. კარიბჭე ხსნის გარსს და მარშრუტიზაციას ახდენს შიდა სათაურით, ამიტომ დანიშნულება ხედავს ჩვეულებრივ კლიენტს, რომელიც ქსელიდან მოდის.
ამიტომ WAN ინტერფეისზე ჩაწერა აჩვენებს ერთ საუბარს და არა სამს. შიდა პორტები ჩნდება მხოლოდ დეკაპსულაციის შემდეგ. ამიტომ ერთი ფაირვოლის ღიობა შეიძლება ერთდროულად ატარებდეს SSH-ს, HTTPS-ს და DNS-ს.
# WAN side: one outer tuple, whatever the inner services are
tcpdump -ni wan0 'udp port 443'
# tunnel side: the inner tuples appear after decapsulation
tcpdump -ni tun0
TUN/TAP-ის დოკუმენტაცია აღწერს იმ გადაცემას, როცა მარშრუტიზებული TUN მოწყობილობა IP პაკეტებს გადასცემს ბირთვსა და მომხმარებლის სივრცის პროცესს შორის. სწორედ ეს გადაცემა ხდის შიდა სათაურს ხილვადს კარიბჭის მარშრუტიზაციისა და ფაირვოლის კოდისთვის. ის ასევე ხსნის, რატომ არ ამბობს გარე პორტი არაფერს იმაზე, თუ რომელი სერვისებია დაშვებული.
NAT-ის გადამისამართება მსმენელს ეკუთვნის და არა აპლიკაციებს
IPv4 NAT-ის უკან მდგარ თვითჰოსტინგურ კარიბჭეს სჭირდება ერთი შემომავალი თარგმანი: საჯარო მისამართი და პორტი აისახება VPN-ის მსმენელზე. არავითარი წესი არ არის საჭირო SSH-ისთვის, HTTPS-ისთვის ან DNS-ისთვის მხოლოდ იმიტომ, რომ გვირაბის მომხმარებლები აღწევენ მათ. ამ პორტების გამოქვეყნება გამოაჩენდა სერვისებს, რომლებსაც გვირაბი უკვე იცავს. გადამისამართების წესი აღწერს მსმენელის ხელმისაწვდომობას და არა შიგნით რაიმეს ნებართვას.
საპირისპიროც მართალია. გვირაბის პორტის გახსნა არაფერ სხვას არ ამჟღავნებს, ამიტომ მხოლოდ გვირაბის გავლით ხელმისაწვდომი სერვისი თავის საჯარო ზედაპირს დახურულად ინარჩუნებს. სწორედ ეს გამიჯვნაა ჩვეულებრივ მიზეზი, რატომაც სერვისი თავიდანვე კერძო რჩება.
შიდა პოლიტიკაა ის ადგილი, სადაც წვდომა რეალურად წყდება
დაშიფვრა იცავს გზას; ის არ ანიჭებს უფლებას დანიშნულებას. კლიენტის მარშრუტები ირჩევს, რომელი პრეფიქსები შედის გვირაბში, კარიბჭის გადამისამართების პოლიტიკა წყვეტს, შეიძლება თუ არა პაკეტებმა მისი დატოვება, ხოლო დანიშნულების ფაირვოლი და შესვლა წყვეტს, პასუხობს თუ არა სერვისი. DNS ყველაზე ნათელი შემთხვევაა: მოთხოვნების ტარება არ იწვევს იმას, რომ გამხსნელი მათ თქვენი კლიენტების აუზიდან მიიღოს. თითოეულ ფენას დამოუკიდებლად შეუძლია თქვას არა.
გამოსცადეთ თითოეული სერვისი ცალკე გვირაბის გავლით. წარმატებული ძიება არაფერს ამბობს ვებ პორტზე და წარმატებული ვებ მოთხოვნა არაფერს ამბობს SSH-ზე.
dig @10.40.0.53 app.corp.example
nc -vz 10.40.0.10 8443
ssh -p 2222 [email protected]
როცა გვირაბი მუშაობს და ყველაფერი ფარდება, ჯერ წაიკითხეთ კლიენტის მარშრუტების ცხრილი. როცა ერთი სერვისი ფარდება და სხვები მუშაობენ, ხარვეზი იმ დანიშნულებაშია. ეს ორი დაკვირვება სხვადასხვა პასუხისმგებელზე მიუთითებს და მათი არევა დროს კარგავს.
WireGuard იგივე ხაზს ხაზავს
WireGuard თავის გარე მსმენელს ListenPort სახელს აძლევს, ხოლო შიდა აპლიკაცია მაინც იყენებს იმ სერვის პორტს, რომელიც სჭირდება. AllowedIPs მარშრუტიზებული პრეფიქსების სიმრავლეა და არა დაშვებული სერვის პორტების სია. მისი, როგორც პორტების ნებართვების სიის, კითხვა ქმნის წესებს, რომლებიც არ ემთხვევა იმას, რასაც გვირაბი აკეთებს. დასახელება განსხვავებულია; ფენებად დაყოფა არა.
დაუშვით სერვისი ლოკალური შემავალი პოლიტიკაში, როცა ის თავად საბოლოო წერტილზე მუშაობს, ან გადამისამართების პოლიტიკაში, როცა ის ამ საბოლოო წერტილის უკანაა. ეს განსხვავება წყვეტს, რომელი წესების ნაკრები ხედავს პაკეტს.
ზოგადი ფორმაა ერთი გარე ტრანსპორტი მრავალი შიდა საუბრით. პროდუქტები, რომლებსაც რამდენიმე გარე გაცვლა ან განსხვავებული IP პროტოკოლი სჭირდებათ, გვახსენებს, რომ ერთი საჯარო პორტის ნიმუში ამ დიზაინს აღწერს და არა ყველა VPN-ს.