مسدود کردن یک نشانی و قفل کردن یک حساب دو سازوکار متفاوت‌اند و در دو جهت مخالف شکست می‌خورند. مسدودسازی نشانی یک منبع را متوقف می‌کند و حساب هدف از جای دیگر در دسترس می‌ماند؛ قفل حساب آن هویت را همه‌جا متوقف می‌کند، حتی روی رایانهٔ خود کاربر.

برای VPNی که احراز هویت را به PAM می‌سپارد، شمارنده همان چیزی است که پشتهٔ PAM به آن می‌رسد، نه آنچه شنونده ثبت کرده است.

دو شمارنده، دو قربانی متفاوت

محدودکنندهٔ نرخ به یک منبع نگاه می‌کند و می‌پرسد اخیراً چند تلاش از آن آمده است. قفل به یک هویت نگاه می‌کند و می‌پرسد آن حساب چند شکست انباشته است. اولی دسترس‌پذیری خدمت را حفظ می‌کند و دومی اعتبارنامه را؛ هیچ‌کدام جای دیگری را نمی‌گیرد.

به همین دلیل جملهٔ پس از پنج شکست IP را مسدود می‌کنیم پاسخ یک گزارش پرکردن اعتبارنامه نیست. مهاجم منابع را عوض می‌کند، هر منبع چند تلاش کم می‌گیرد و حساب هرگز شمرده نمی‌شود. برعکس، قفل بدون کنترل منبع به مهاجم اجازه می‌دهد با شکست عمدی حساب را نامحدود قفل نگه دارد.

این دو کنترل داستان بازیابی متفاوتی هم دارند. مسدودسازی نشانی با زمان‌سنجی منقضی می‌شود که کسی لازم نیست به آن فکر کند؛ قفل حساب ممکن است به مدیر، دورهٔ انتظار مستند یا بازنشانی خودخدمتی نیاز داشته باشد.

انباره‌ای را بیابید که از پیش شمارش را دارد

پیش از افزودن هر چیز، بررسی کنید آیا انبارهٔ شکست از قبل وجود دارد. حساب محلی لینوکس، سرویس دایرکتوری و ارائه‌دهندهٔ هویت بیرونی هرکدام شمارش خود را نگه می‌دارند و ماژول PAM که جلوی آن‌ها گذاشته می‌شود دومی را می‌سازد نه اینکه اولی را گسترش دهد.

grep -rnE 'faillock|pam_tally|pam_unix' /etc/pam.d/
ls -l /etc/pam.d/ | head -20

فایل سرویسی را که VPN واقعاً نام می‌برد بخوانید و خطوط درج آن را دنبال کنید. در بسیاری از توزیع‌ها سرویس VPN یک فایل مشترک را درج می‌کند، یعنی شمارشی که تنظیم می‌کنید برای SSH و ورودهای محلی هم اعمال می‌شود.

اگر دایرکتوری از قبل قفل را اعمال می‌کند، پرسش سودمند این است که گفت‌وگوی PAM چگونه به آن تصمیم می‌رسد و VPN چگونه آن را گزارش می‌کند. شمارش محلی روی آن، شمارندهٔ دایرکتوری نمی‌شود و دو سیاست می‌توانند دربارهٔ زمان باز شدن حساب اختلاف داشته باشند.

pam_faillock سه جای فراخوانی دارد، نه یکی

ماژول سه عملیاتی را جدا می‌کند که یک خط کپی‌شده معمولاً محو می‌کند: بررسی اینکه حساب از قبل قفل است، ثبت شکست و پاک کردن تاریخچه پس از موفقیت.

اینجاست که مهاجرت از ماژول شمارش قدیمی‌تر معمولاً اشتباه می‌شود. کپی کردن خطی از نمونهٔ کاری pam_tally2 به پشتهٔ pam_faillock تغییر نام نیست؛ پیکربندی مستند متفاوت است و فراخوانی در جای نادرست می‌تواند شکست‌ها را بدون هیچ بررسی ثبت کند.

faillock --user alice
faillock --user alice --reset

ابزار بازرسی سریع‌ترین راه دیدن واقعی بودن شمارنده است: شکست‌های ثبت‌شدهٔ یک حساب را نشان می‌دهد و می‌تواند پاکشان کند. اگر یک شکست کنترل‌شده آن خروجی را تغییر ندهد، جای فراخوانی نادرست است.

نام سرویس اختصاصی جداسازی نیست

دادن فایل سرویس PAM اختصاصی به VPN سیاست موردنظر را دیدنی می‌کند، اما اثر را محدود نمی‌کند. هر درج یک فایل مشترک آنچه را آن فایل می‌کند می‌آورد، از جمله شمارش‌های سراسری سیستم.

روشن تصمیم بگیرید که قفل فقط دسترسی VPN را بپوشاند یا هر سرویسی را که همان حساب را احراز می‌کند. هر دو پاسخ قابل دفاع‌اند؛ خطا این است که باور کنید یکی را انتخاب کرده‌اید در حالی که پشته دیگری را اجرا می‌کند.

سپس هزینه را در نظر بگیرید. مهاجم می‌تواند قفل را برانگیزد و کاربری که آسیب می‌بیند صاحب همان حساب است. آستانه، دورهٔ انتظار و مسیر بازیابی اداری بخشی از سیاست‌اند و بازیابی نباید به پیکربندی مجدد VPN در میانهٔ رخداد وابسته باشد.

توالی را بپذیرید، نه یک رد تنها

با هویت‌های تعیین‌شده و بر پایهٔ برنامهٔ تأییدشده آزمایش کنید و زنجیره را بیازمایید نه یک رخداد تنها: حساب معتبر احراز می‌شود، گذرواژهٔ عمداً نادرست شمارنده را جابه‌جا می‌کند، قفل پیکربندی‌شده اعمال می‌شود و بازیابی مستند دسترسی را برمی‌گرداند.

faillock --user test-vpn-01
journalctl -u openvpn-server@lab -n 30 --no-pager | grep -i 'auth\|pam'

رفتار موفقیت را به همان دقت رفتار شکست ببینید. اگر ورود موفق تاریخچه را پاک نکند، حساب پس از انباشت آهستهٔ خطاهای معمولی قفل می‌شود. اگر همه چیز را از هر سرویس پاک کند، شمارنده ضعیف‌تر از ادعای سیاست است.

در پایان پیش از اعلام پیروزی کلاینت‌های بدون نظارت را متوقف کنید. اعتبارنامهٔ ذخیره‌شده‌ای که در پس‌زمینه تلاش می‌کند چند دقیقه پس از بازیابی دوباره شکست می‌سازد و حساب را باز قفل می‌کند. محدودسازی نرخ بر پایهٔ منبع می‌تواند به‌عنوان کنترل افزوده بماند، اما سیاست حساب نیست.

مقالات مرتبط