این مطلب برای زمانی است که FortiWeb WAF فقط یک اسم روی فاکتور یا یک گزینه داخل دیتاسنتر نیست؛ قرار است در یک شبکه واقعی کار کند، تغییر بگیرد، لاگ بدهد، و وقتی مشکلی پیش آمد مسیر عیبیابی آن روشن باشد. موضوع اصلی این نوشته طراحی mTLS و client certificate برای دسترسی API یا پنلهای حساس است؛ یعنی همان بخشی که اگر از اول درست طراحی نشود، بعداً خودش را به شکل قطعی، خطای مبهم، یا تغییرات پرریسک نشان میدهد.
در کار عملی منطق مهمتر از حفظ کردن چند دستور است. باید بدانیم در سرویسی که فقط باید توسط چند سیستم مشخص، partner یا gateway داخلی مصرف شود چه چیزی ورودی تصمیم است، چه چیزی خروجی تصمیم است، و کدام نشانهها میگویند مشکل از policy، route، certificate، session، health check یا وابستگی بیرونی آمده است. برای همین این متن را مثل یک چکلیست اجرایی نوشتهام، نه توضیح تبلیغاتی محصول.
برای دیدن مطالب مرتبطتر، صفحه FortiWeb WAF هم میتواند مسیر خوبی برای ادامه مطالعه باشد.
سناریوی واقعی مسئله
سناریوی معمول این است که تیم شبکه یک تغییر ظاهراً ساده میدهد: یک policy اضافه میشود، یک interface جابهجا میشود، یک سرویس پشت load balancer قرار میگیرد، یا یک مسیر مانیتورینگ/احراز هویت فعال میشود. در همان لحظه شاید همه چیز سالم به نظر برسد، اما چند ساعت بعد کاربر میگوید بخشی از سرویس کند شده یا بعضی connectionها fail میشوند. اینجا اگر فقط به آخرین تغییر نگاه کنیم، احتمالاً علت اصلی را از دست میدهیم.
در طراحی mTLS و client certificate برای دسترسی API یا پنلهای حساس باید مسیر داده را مرحله به مرحله دید. اول باید معلوم شود packet یا request از کجا وارد میشود، با چه identity یا contextی شناخته میشود، کدام rule روی آن match میشود، بعد از تصمیم امنیتی به کجا میرود، و در نهایت سمت مقصد چه پاسخی میدهد. این نگاه ساده است، اما جلوی بیشتر عیبیابیهای پراکنده و حدسی را میگیرد.
نشانه مهم در این سناریو معمولاً درخواستهای ناشناس به endpointهای حساس یا نیاز به تفکیک machine identity از user identity است. این نشانه بهتنهایی حکم قطعی نمیدهد، ولی جهت بررسی را مشخص میکند. اگر نشانه را درست بخوانیم، لازم نیست دهها گزینه را همزمان تغییر بدهیم. تغییر همزمان چند چیز، بدترین دشمن عیبیابی در شبکه production است.
قبل از تغییر چه چیزهایی باید ثبت شود؟
قبل از هر اصلاح، snapshot عملیاتی لازم است. منظور فقط backup گرفتن از config نیست. باید بدانیم وضعیت sessionها، hit countها، logها، route table، objectها، certificateها و وضعیت health check در همان لحظه چه بوده است. اگر بعداً تغییر جواب نداد، بدون این snapshot نمیشود دقیق برگشت یا فهمید مشکل از کجا شروع شده.
- CA chain و تاریخ انقضای client certificateها
- مسیر revocation یا replacement certificate
- تفکیک endpointهای نیازمند mTLS از بخش عمومی سایت
- هماهنگی با تیم application برای خطای قابل فهم
این موارد شاید بدیهی به نظر برسند، اما در عمل خیلی از downtimeها از همین جا شروع میشود: تغییر انجام شده، اما وضعیت قبل از تغییر ثبت نشده است. وقتی وضعیت قبلی نداریم، rollback هم فقط یک حدس خوشبینانه است.
روش عیبیابی مرحلهای
برای FortiWeb WAF بهتر است عیبیابی را از سادهترین لایه شروع کنیم. اول دسترسی پایه و مسیر را ببینیم، بعد سراغ policy و inspection برویم، بعد وابستگیهای پیشرفتهتر مثل profile، identity، certificate یا automation را بررسی کنیم. اگر از همان ابتدا سراغ گزینههای پیچیده برویم، احتمالاً یک مشکل ساده routing یا object اشتباه را نمیبینیم.
من در این نوع کار معمولاً سه سؤال ثابت میپرسم: آیا ترافیک به نقطه تصمیم میرسد؟ آیا rule درست match میشود؟ آیا بعد از تصمیم، مسیر برگشت و state درست است؟ همین سه سؤال برای بیشتر تجهیزات امنیتی و شبکهای جواب میدهد، حتی اگر اسم featureها فرق کند.
Check TLS handshake failures
Validate client certificate chain
Map mTLS profile only to sensitive API path
Monitor certificate expiry before cutover
دستورها و خروجیها باید در همان change record نگهداری شوند. اگر بعداً یک نفر دیگر بخواهد ادامه کار را بگیرد، نباید مجبور شود از صفر بفهمد چه چیزهایی بررسی شده است.
خطاهای رایج
- استفاده از یک certificate مشترک برای چند client
- نداشتن برنامه تمدید قبل از expiry
- قرار دادن کل سایت پشت mTLS به جای endpointهای حساس
- نادیده گرفتن logهای handshake failure
نقطه مشترک این خطاها عجله است. وقتی یک سرویس قطع است، فشار برای حل سریع طبیعی است، اما حل سریع با تغییر بیحساب فرق دارد. تغییر کوچک، قابل اندازهگیری و قابل برگشت معمولاً از تغییر بزرگ و مبهم بهتر جواب میدهد.
طراحی درست برای محیط production
در محیط production، اینکه اعتبارسنجی certificate در FortiWeb انجام شود یا پشت آن در application هم دوباره کنترل شود باید از قبل مشخص باشد. یعنی تیم بداند اگر تست اول fail شد چه کاری میکند، اگر فقط بخشی از کاربران مشکل داشتند چه چیزی را جدا میکند، و اگر rollback لازم شد دقیقاً کدام object یا policy برمیگردد. طراحی خوب فقط دیاگرام نیست؛ طراحی خوب یعنی تصمیمهای روز حادثه از قبل آماده باشند.
برای طراحی mTLS و client certificate برای دسترسی API یا پنلهای حساس بهتر است naming هم جدی گرفته شود. اسم object، rule، profile و monitor باید طوری باشد که شش ماه بعد هم قابل فهم باشد. اسمهای کوتاه و مبهم شاید زمان ایجاد سریعتر باشند، اما هزینه عیبیابی را بالا میبرند. وقتی policy زیاد میشود، naming ضعیف خودش به یک ریسک امنیتی تبدیل میشود.
موضوع دیگر logging است. لاگ زیاد بدون معنا کمک نمیکند؛ لاگ کم هم تیم را کور میکند. باید مشخص باشد برای چه decisionهایی log لازم داریم، کدام logها فقط noise تولید میکنند، و کدام رویدادها باید به مانیتورینگ یا SIEM بروند. در FortiWeb WAF این تنظیم اگر درست انجام شود، هم troubleshooting را سریعتر میکند و هم ردپای تغییرات را نگه میدارد.
چکلیست اجرا
- CA و client profile را جداگانه مستند کن
- ابتدا فقط یک endpoint محدود را تست کن
- برای clientهای مختلف certificate جدا بده
- expiry monitoring داشته باش
- در زمان fail، لاگ TLS و WAF را کنار هم بخوان
این چکلیست جای تجربه را نمیگیرد، ولی جلوی بینظمی را میگیرد. تجربه زمانی ارزش دارد که به روش تبدیل شود؛ وگرنه هر بار باید همان اشتباهها را دوباره کشف کنیم.
تحویل کار به تیم بعدی
در mTLS تحویل کار باید شامل مالک certificate، تاریخ تمدید، مسیر revoke و سناریوی replacement باشد. بدون اینها، امنیت خوب امروز میتواند قطعی سرویس ماه بعد شود.
در نهایت، معیار موفقیت فقط این نیست که سرویس الان بالا آمده باشد. معیار بهتر این است که اگر همین مشکل دوباره رخ داد، تیم بتواند با داده، لاگ و مسیر تصمیم روشن جلو برود. این همان تفاوت بین خاموش کردن آتش و ساختن یک عملیات قابل اتکا است.
اگر این موضوع در شبکه شما درگیر چند محصول یا چند تیم است، بهتر است قبل از تغییر نهایی یک جدول مسئولیت هم داشته باشید: مالک policy، مالک route، مالک application، مالک certificate، و کسی که decision نهایی rollback را میگیرد. نبودن همین مالکیتها معمولاً زمان حل مشکل را چند برابر میکند.