UDP-ის VPN ჩუმად არის პორტის სკანირებისას? რატომ ხდება ასე
WireGuard და გამაგრებული OpenVPN ავტორიზაციას ვერ გადალახულ დატაგრამებს უპასუხოდ ყრიან. სკანერის მხრიდან სიჩუმე მოსალოდნელი ქცევაა და არა დახურული პორტი.
თქვენ სკანირებთ VPN-ის პორტს, პასუხს არ იღებთ და ასკვნით, რომ სერვისი გათიშულია ან firewall დახურულია. WireGuard-ისა და საკუთარი ავტორიზაციის მქონე OpenVPN-ის საკონტროლო არხების შემთხვევაში ეს დასკვნა არ გამომდინარეობს. მოქმედი ავტორიზაციის მასალის გარეშე დატაგრამა უპასუხოდ იშლება, ამიტომ სიჩუმე არის ის, როგორ გამოიყურება ჯანსაღი სერვისი გარედან. შემოწმება მცდარია იმაზე ადრე, ვიდრე გვირაბი.
სიჩუმე პროტოკოლია და არა ხარვეზი
UDP-ს არ აქვს კავშირის დამყარება, ამიტომ არც SYN არსებობს და არც დადასტურება, რომელიც სკანერს საშუალებას მისცემდა ღია პორტი გაფილტრულისგან გაერჩია. შემოწმება ცალკეული დატაგრამის სახით მოდის და სერვისი ამოწმებს, შეესაბამება თუ არა ის მოსალოდნელ პროტოკოლს. თუ არ შეესაბამება, პაკეტი იშლება, ხოლო გაუქმება დოკუმენტირებული ქცევაა და არა გაუმართაობა.
WireGuard თავის handshake შეტყობინებებს კრიპტოგრაფიულად ამოწმებს და უგულებელყოფს ყველაფერს, რაც ვერ გადის. OpenVPN tls-auth ან tls-crypt-ით იგივეს აკეთებს თავისი საკონტროლო არხისთვის. ორივე შემთხვევაში თვითნებური დატვირთვა არასოდეს აღწევს მომხმარებლისკენ მიმართულ საფეხურს, ამიტომ საპასუხოდ არაფერია და დასაბრუნებელი შეცდომაც არ არსებობს.
TCP დახურული პორტიდან reset-ს მოგცემდათ. UDP გაურკვევლობაში გტოვებთ, რომელსაც სკანერები წაკითხვით წყვეტენ: ბეჭდავენ ღიას ან გაფილტრულს, ვიდრე გამოიცნობდნენ.
რა შეუძლია და რა არ შეუძლია სკანერს დაასკვნას
სკანირების შედეგი მხოლოდ იმდენად ინფორმატიულია, რამდენადაც გაგზავნილი დატვირთვა. დაალაგეთ შესაძლო დაკვირვებები იმის მიხედვით, თუ რას ამტკიცებს თითოეული მათგანი რეალურად:
| Probe | Observed result | What it supports |
|---|---|---|
| Empty datagram | No reply | Nothing beyond the fact that UDP was used |
| Random payload | No reply | Consistent with an authenticated service |
| Valid handshake from a real client | A protocol reply | The service is alive and reachable |
| ICMP port unreachable | Unreachable message | The host answered, usually because nothing listens |
მესამე სტრიქონი წაიკითხეთ როგორც სიაში ერთადერთი დადებითი ტესტი. მას სჭირდება ნამდვილი პროფილი, ნამდვილი გასაღები და სწორი ბოლო წერტილი, და სწორედ ეს არ აქვს ზოგად სკანერს.
შეხედეთ ბილიკის ორივე ბოლოს
თქვენ მიერ მართული სერვერისთვის, სანამ რაიმე დასკვნას გამოიტანთ, ჩაიწერეთ ინტერფეისზე, შემდეგ ჰკითხეთ სერვისს, რა დაინახა. ორივე ბრძანებას სჭირდება root შესახსრებზე:
tcpdump -ni any udp port 51820
tcpdump -ni any udp port 1194
wg show
თუ ინტერფეისზე არც ერთი პაკეტი არ გამოჩნდა, ბილიკმა ის გააუქმა მანამ, სანამ სერვისი რამეს დაინახავდა, და შემდეგი გაჩერება მარშრუტიზაცია და ფილტრაციაა. თუ პაკეტები მოდის, მაგრამ არც ერთი handshake არ სრულდება, სერვისი ხელმისაწვდომია და შეუსაბამობა გასაღებებში, ბოლო წერტილის კონფიგურაციაში ან პროტოკოლის ვერსიაშია. ეს შედარება პასუხობს კითხვას, რომელზეც სკანერმა ვერ უპასუხა. გაუშვით ის მაშინ, როცა ნამდვილი კლიენტი ცდილობს დაკავშირებას, და არა მაშინ, როცა სკანერი თავის თავს იმეორებს.
შეცვალეთ ტესტი და არა დაცვა
მაცდუნებელი მოკლე გზა საკონტროლო არხის დაცვის გამორთვაა, რომ დიაგნოსტიკამ პასუხი მიიღოს. ეს რეალურ უსაფრთხოების თვისებას ცვლის უფრო ლამაზ სკანირების შედეგზე და ეს არასწორი მიმართულებაა. სამაგიეროდ გამოიყენეთ მოქმედი პროფილი დამტკიცებული ქსელიდან და ჩაწერეთ ბოლო წერტილი და დრო, რომ შედარება განმეორებადი იყოს.
ყველაზე სასარგებლო ტესტი დიფერენციალურია: იგივე პროფილი მუშა ბილიკზე და იმ ბილიკზე, რომელიც არ მუშაობს. თუ მუშა ბილიკი handshake-ს წარმოქმნის, ხოლო წარუმატებელი ბილიკი ინტერფეისზე არაფერს წარმოქმნის, თქვენ იპოვეთ გაწყვეტის ადგილი, არაფრის შესუსტების გარეშე.
ამრიგად, უპასუხო UDP პაკეტი არ ამტკიცებს არც იმას, რომ სერვერი ოფლაინ არის, არც იმას, რომ ის უსაფრთხოა. ის ამტკიცებს, რომ ეს შემოწმება, ამ ბილიკზე, ამ მომენტში, არ მიღებულა.