VPN روی UDP در پیمایش پورت بیصدا میماند؟ چرا این اتفاق میافتد
WireGuard و OpenVPN سختشده، بستههای دادهای را که احراز هویت را رد کنند بدون پاسخ دور میریزند. سکوت اسکنر رفتار مورد انتظار است، نه پورت بسته.
پورت VPN را اسکن میکنید، پاسخی نمیگیرید و نتیجه میگیرید که سرویس از کار افتاده یا فایروال بسته است. در WireGuard و در کانالهای کنترل OpenVPN که احراز هویت خودشان را حمل میکنند، این نتیجه درست نیست. بسته دادهای که ماده احراز هویت معتبر ندارد بدون پاسخ دور ریخته میشود، پس سکوت همان چیزی است که یک سرویس سالم از بیرون دارد. پیش از آنکه تونل اشتباه باشد، خود آزمون اشتباه است.
سکوت خود پروتکل است، نه نقص
UDP راهاندازی اتصال ندارد، بنابراین نه SYN وجود دارد و نه تأییدی که به اسکنر اجازه دهد پورت باز را از پورت فیلترشده تشخیص دهد. آزمون به صورت یک بسته داده جداگانه میرسد و سرویس بررسی میکند که آیا با پروتکلی که انتظار دارد مطابقت دارد. وقتی مطابقت ندارد، بسته دور ریخته میشود و دور ریختن رفتار مستند است، نه نقص عملکرد.
WireGuard پیامهای دستدهی خود را بهصورت رمزنگاریشده اعتبارسنجی میکند و هر چیزی را که شکست بخورد نادیده میگیرد. 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
اگر هیچ بستهای روی رابط ظاهر نشود، مسیر آن را پیش از آنکه سرویس چیزی ببیند دور ریخته است و ایستگاه بعدی مسیریابی و فیلترکردن است. اگر بستهها برسند اما هیچ دستدهی کامل نشود، سرویس در دسترس است و ناسازگاری در کلیدها، پیکربندی نقطه پایانی یا نسخه پروتکل است. این مقایسه به پرسشی پاسخ میدهد که اسکنر نمیتوانست. آن را وقتی اجرا کنید که یک کاربر واقعی در حال اتصال است، نه وقتی اسکنر خودش را تکرار میکند.
آزمون را عوض کنید، نه محافظت را
میانبُر وسوسهانگیز این است که محافظت کانال کنترل را غیرفعال کنید تا یک تشخیص پاسخ بگیرد. این یک ویژگی امنیتی واقعی را با نتیجه اسکن زیباتر معاوضه میکند و جهت اشتباهی است. در عوض از یک پروفایل معتبر از شبکهای تأییدشده استفاده کنید و نقطه پایانی و زمان را یادداشت کنید تا مقایسه تکرارپذیر باشد.
مفیدترین آزمون، آزمونی تفاضلی است: همان پروفایل روی مسیری که کار میکند و روی مسیری که کار نمیکند. اگر مسیر کارکننده یک دستدهی تولید کند و مسیر ناموفق روی رابط هیچ چیزی تولید نکند، گسیختگی را بدون تضعیف هیچ چیز پیدا کردهاید.
بنابراین یک بسته UDP بیپاسخ نه ثابت میکند که سرور آفلاین است و نه اینکه امن است. اثبات میکند که این آزمون، در این مسیر، در این لحظه، پذیرفته نشد.