ورود VPN پس از Access-Challenge در RADIUS متوقف میشود
Access-Challenge نه موفقیت است و نه رد نهایی. ببینید NAS، دروازه و کلاینت چگونه باید پاسخ بعدی را در همان تبادل منتقل کنند.
رمز عبور درست است، ورود VPN با این حال شکست میخورد، و ممکن است سرور RADIUS دقیقاً همان کاری را کرده باشد که به آن گفته شده بود. دروازه احتمالاً یک Access-Challenge دریافت کرده، چیز مفیدی نشان نداده و سپس مهلتش تمام شده یا آن پاسخ را رد تلقی کرده است. از سمت کلاینت مانند اعتبارنامه اشتباه یا تونل خراب به نظر میرسد. علت معمولاً در میانه گفتوگویی است که هیچکس آن را ثبت نکرده است.
یک ورود، دو تبادل RADIUS
وقتی بکاند عامل دوم را میخواهد، به درخواست اول با پذیرش یا رد پاسخ نمیدهد. با کد 11 پاسخ میدهد و منتظر پاسخ بعدی کاربر میماند که دروازه باید آن را در یک درخواست پیگیری بازگرداند. آن پیگیری به همان گفتوگوی احراز هویت تعلق دارد، نه به تلاش ورود تازه.
در پیکربندی سالم کاربر یک اعلان دوم میبیند: ابتدا رمز عبور، سپس یک کد یکبارمصرف، یا یک اعلان ترکیبی واحد اگر اپراتور آن را مستند کرده باشد. در پیکربندی خراب اعلان دوم هرگز ظاهر نمیشود و ورود بهسادگی شکست میخورد.
این همان نشانهای است که باید دنبالش بروید، و تأیید آن فقط از سمت کلاینت آسان است: اگر کلاینت VPN دقیقاً یک راز بخواهد و سپس رمزی را که میدانید معتبر است رد کند، تبادل احتمالاً در همان چالش پایان یافته است.
چالش در واقع چه چیزی حمل میکند
مشخصات RADIUS کد 11 را در بخش 4.4 توصیف میکند و دو ویژگی را که اینجا مهماند مجاز میداند. Reply-Message متنی را نگه میدارد که برای کاربر است، و State یک مقدار مبهم را نگه میدارد که سرور میخواهد بازگردانده شود. NAS نباید State را تفسیر کند، فقط باید آن را بدون تغییر برگرداند.
درخواست پیگیری از Identifier جدید و Request Authenticator جدید استفاده میکند و باید همان مقدار State بههمراه پاسخ کاربر را حمل کند. سرور آن را از طریق همان State با چالش در انتظار تطبیق میدهد، به همین دلیل دروازهای که ویژگی را دوباره میسازد یا دور میاندازد نمیتواند مراسم را کامل کند. response authenticator در هر پاسخ نیز باید معتبر باشد، وگرنه NAS باید بسته را دور بریزد.
بخش 4.4 جزئیاتی را اضافه میکند که بیشتر شکستهای خاموش را توضیح میدهد: NASی که نمیتواند چالشها را پشتیبانی کند، Access-Challenge را رد میداند. اگر سرویس VPN دروازه شما پیش از این پشتیبانی باشد یا آن را حذف کرده باشد، درخواست بکاند برای عامل دوم به «احراز هویت ناموفق» فوری و بدون هیچ اعلانی تبدیل میشود.
درخواست زنجیرهای کجا گم میشود
اولین مظنون مسیر اعلان است نه اعتبارنامه. درگاهی که برای ورودهای وب فیلد OTP نشان میدهد، این کار را بهطور خودکار برای سرویس VPN انجام نمیدهد، و برخی دروازهها فقط به کلاینتهایی چالش میفرستند که این توانایی را اعلام میکنند. همان حساب را در هر دو نقطه ورود آزمایش کنید؛ اگر درگاه کار میکند و VPN نه، شما به تحویل نگاه میکنید نه به توکن.
قالب ورودی دومین مظنون است. چسباندن رمز و کد بدون جداکننده مستند فروشنده، یا اجازه دادن به اعتبارنامه ذخیرهشده برای تکرار کد قدیمی، به شکلی شکست میخورد که با رمز اشتباه یکسان به نظر میرسد. از اعلان جداگانه یا قالب ترکیبی مستند اپراتور استفاده کنید و هرگز جداکننده از خودتان نسازید.
نقصهای وابسته به نسخه وجود دارند، اما فهرستی از نسخههای اصلاحشده از سالها پیش تشخیص امروز نیست. یادداشتهای انتشار نرمافزاری را که واقعاً اجرا میکنید بخوانید و مرحله مشاهدهشده تبادل را بهعنوان شاهد نگه دارید.
یک تلاش را از ابتدا تا انتها ردیابی کنید
یک بار با اشکالزدایی سمت سرور روشن بازتولید کنید و هر نشست دیگر را بیرون از پنجره ضبط نگه دارید:
$ sudo radsniff -i eth0 -x -f 'udp port 1812'
$ sudo freeradius -X
$ radtest alice 'password' 127.0.0.1 0 testing123
در خروجی بهجای یک خط، شکل گفتوگو را جستوجو کنید. یک Access-Request نخست با Identifier 3، یک Access-Challenge حامل State، سپس Access-Request دومی با Identifier 4 که همان State را تکرار میکند و پاسخ کاربر را در بر دارد. اگر درخواست دوم غایب باشد، دروازه هرگز پیگیری نکرده است. اگر بدون State برسد، سرور نمیتواند آن را با چالش در انتظار تطبیق دهد و معمولاً رد میکند.
هنگام به اشتراک گذاشتن رد، اعتبارنامهها، توکنها و دادههای هویتی غیرضروری را پنهان کنید و رویدادها را از همان یک تلاش به هم مرتبط کنید، نه اینکه تلاشهای تکراری چند زبانه مرورگر را با هم مخلوط کنید. مهرهای زمانی اینجا دوست شما هستند؛ چالشی که پس از تسلیم کلاینت میرسد برای کاربر رد و در گزارش پاسخ کند به نظر میرسد.
وضعیت پایانی مطلوب شما گفتوگویی کامل و مجاز است که پس از آن دسترسی موردنظر به سرویس میآید. پاسخی که از سرور RADIUS میرسد بسیار کمتر از این را اثبات میکند.