مدت زمان مطالعه:
0

Bot Mitigation در FortiWeb مجموعهای از قابلیتها برای شناسایی، کنترل و کاهش ترافیک Bot است. این ترافیک میتواند از نوع Crawler، Scanner، Credential Stuffing، Content Scraping، Slow Attack، DoS Bot، Spam Bot یا حتی Search Engineهای قانونی باشد. نکته مهم این است که همه Botها بد نیستند؛ بعضی مثل Search Engineها برای کسبوکار مفیدند، اما Botهای مخرب میتوانند باعث مصرف منابع، جمعآوری داده، تست آسیبپذیری، حمله به صفحه Login و خراب شدن تجربه کاربر شوند.
این مقاله بر اساس FortiWeb 7.6 و با تمرکز روی پیادهسازی عملیاتی نوشته شده است. هدف این است که ادمین FortiWeb بتواند قبل از فعالسازی Bot Mitigation بفهمد این قابلیت برای سناریوی او مناسب است یا نه، سپس مرحلهبهمرحله Ruleها را بسازد، آنها را در Bot Mitigation Policy تجمیع کند، Policy را به Web Protection Profile وصل کند و در نهایت Log و False Positive را بررسی کند.
مروری بر این مقاله
FortiWeb برای مقابله با Botها فقط به یک روش تکی وابسته نیست. در مستندات Fortinet، Bot Mitigation شامل چند لایه مثل Biometrics-Based Bot Detection، Threshold-Based Bot Detection، Bot Deception، Known Bots، Machine Learning Based Bot Detection و Advanced Bot Protection معرفی شده است. هرکدام از این بخشها یک نوع رفتار Bot را پوشش میدهد و باید بر اساس سناریوی سایت انتخاب شود.
در عمل، Bot Mitigation به FortiWeb کمک میکند رفتارهایی مثل تعداد زیاد درخواست، اسکن URLهای غیرواقعی، دریافت مکرر صفحات، نبود رفتار انسانی در مرورگر، دنبال کردن لینک مخفی، استفاده از User-Agentهای شناختهشده مخرب یا حمله به صفحه Login را شناسایی کند. سپس بسته به Action تعریفشده، FortiWeb میتواند فقط Alert بدهد، درخواست را Deny کند، برای مدتی Client را Block کند، CAPTCHA یا Real Browser Enforcement اعمال کند یا درخواست را به صفحه خاصی Redirect کند.
Bot Mitigation برای هر سایتی لازم نیست با یک سطح سختگیرانه فعال شود. قبل از پیادهسازی باید مشخص کنید مشکل شما چیست. اگر مشکل اصلی Search Engine نیست و فقط میخواهید Google و Bing را مدیریت کنید، Known Bots کافی است. اگر مشکل Scraper، Scanner یا Credential Stuffing دارید، باید Threshold و Biometrics را جدیتر تنظیم کنید. اگر هدف کشف Crawlerهای ساده و Botهایی است که همه لینکها را دنبال میکنند، Bot Deception مفید است.
| نشانه در لاگ یا رفتار سایت | قابلیت پیشنهادی | Action شروع |
|---|---|---|
| تعداد زیاد 404 یا تست مسیرهای غیرواقعی مثل /admin و /.env | Threshold Based Detection - Vulnerability Scanning | Alert سپس Alert & Deny |
| درخواستهای پشتسرهم برای صفحات محصول، لیست قیمت یا Search | Threshold Based Detection - Content Scraping | Alert سپس Block Period |
| حمله به صفحه Login یا تست پسورد | Biometrics + Threshold + CAPTCHA | Real Browser Enforcement یا CAPTCHA |
| رباتهایی که همه لینکها حتی لینکهای مخفی را دنبال میکنند | Bot Deception | Alert & Deny |
| Search Engineهای قانونی که نباید Block شوند | Known Bots | Bypass یا Alert |
| API یا Mobile App بدون تعامل انسانی | Threshold + Exception دقیق | Monitor اول، سپس کنترل مرحلهای |
Known Bots برای شناسایی Botهای شناختهشده استفاده میشود. در CLI Reference نسخه 7.6.7، Fortinet توضیح میدهد که این قابلیت هم Botهای مخرب مثل DoS، Spam و Crawler را پوشش میدهد و هم known good bots مثل Search Engineها را بدون اختلال در ترافیک مهم مدیریت میکند. این بخش برای جلوگیری از Block اشتباه Search Engineهای قانونی بسیار مهم است.
Threshold Based Detection رفتارهای مشکوک را بر اساس تعداد رخداد در یک بازه زمانی بررسی میکند. در CLI Reference نسخه 7.6.7 رفتارهایی مثل Crawler، Vulnerability Scanning، Slow Attack، Content Scraping و Illegal User Scan برای این بخش ذکر شدهاند. این قابلیت برای سناریوهایی که Bot با سرعت بالا یا الگوی غیرعادی کار میکند بسیار کاربردی است.
Biometrics Based Detection تلاش میکند رفتار Client را از نظر رویدادهای انسانی بررسی کند؛ مثل Mouse Movement، Click، Keyboard، Screen Touch، Scroll و Page Focus. Fortinet در مستندات اشاره میکند که FortiWeb از رویدادهای Client استفاده میکند تا تشخیص دهد درخواست از انسان آمده یا Bot. این روش برای صفحات وب تعاملی و Login مفید است، اما برای API یا Mobile App باید با احتیاط استفاده شود.
Bot Deception با اضافه کردن یک لینک مخفی به صفحه HTML کار میکند. کاربر واقعی آن لینک را نمیبیند و کلیک نمیکند، اما Bot یا Crawler ممکن است لینک را دنبال کند و همین رفتار به FortiWeb نشان میدهد که Client احتمالاً Bot است. برای سایتهایی که HTML کامل دارند و Crawler مشکل اصلی است، این روش ساده و مؤثر است.
ML Based Bot Detection در FortiWeb رفتار Clientها را در چند بعد یاد میگیرد و با الگوریتم SVM رفتارهای غیرعادی را تشخیص میدهد. Advanced Bot Protection هم سرویس SaaS Fortinet برای Botهای پیشرفتهتر است و طبق مستندات، ترافیک Client برای تحلیل Bot Behavior به سرویس FortiGuard ABP هدایت میشود. این دو بخش برای سناریوهای بزرگتر یا Botهای پیچیدهتر مناسباند، اما مقاله حاضر تمرکز عملیاتی را روی Bot Mitigation Policy داخلی قرار میدهد.
برای محیط عملیاتی، پیشنهاد میشود Bot Mitigation را مرحلهای فعال کنید. مرحله اول فقط Alert است؛ مرحله دوم بررسی لاگ و ساخت Exception؛ مرحله سوم اعمال Block روی رفتارهای واضحاً مخرب؛ و مرحله چهارم سختگیری روی صفحات حساس مثل Login یا Search.
از مسیر زیر وارد شوید:
یک Rule جدید بسازید. برای شروع، پیشنهاد عملیاتی این است که Known Good Bots را روی Bypass یا Alert بگذارید و Botهای مخرب مثل Crawler، Scanner، Spam، DoS و Trojan را ابتدا Alert و بعد از بررسی روی Alert & Deny یا Block Period قرار دهید.
| نوع Bot | پیشنهاد شروع | پیشنهاد بعد از بررسی لاگ |
|---|---|---|
| Known Search Engines | Bypass یا Alert | Bypass برای Botهای معتبر |
| Crawler مشکوک | Alert | Block Period |
| Scanner | Alert | Alert & Deny |
| DoS Bot | Alert | Block Period |
| Spam Bot | Alert | Alert & Deny |
نمونه CLI پایه:
config waf known-bots
edit "KB-Production"
set known-engines-status enable
set known-engines-action bypass
set known-engines-severity Info
set crawler-status enable
set crawler-action alert
set crawler-severity Medium
set scanner-status enable
set scanner-action alert_deny
set scanner-severity High
set spam-status enable
set spam-action alert_deny
set spam-severity Medium
set dos-status enable
set dos-action block_period
set dos-block-period 300
set dos-severity High
next
end
برای مشاهده Syntax دقیق همان نسخه:
config waf known-bots
edit "KB-Production"
?
از مسیر زیر وارد شوید:
در این بخش باید مشخص کنید FortiWeb کدام رفتارهای مشکوک را بررسی کند. مهمترین رفتارها عبارتاند از Crawler، Vulnerability Scanning، Slow Attack، Content Scraping و Illegal User Scan. برای شروع، عددها را خیلی سختگیرانه نگذارید. اول Alert بگیرید، سپس بر اساس لاگ واقعی سایت مقدارها را کم یا زیاد کنید.
نمونه CLI شروع محافظهکارانه:
config waf threshold-based-detection
edit "TBD-Production-Monitor"
set bot-recognition real-browser-enforcement
set validation-timeout 20
set max-attempt-times 3
set crawler-detection enable
set crawler-action alert
set crawler-severity Medium
set crawler-occurrence-num 80
set crawler-within 60
set scanner-detection enable
set scanner-action alert_deny
set scanner-severity High
set scanner-occurrence-num 20
set scanner-within 60
set slow-attack-detection enable
set slow-attack-action alert
set slow-attack-severity Medium
set slow-attack-occurrence-num 10
set slow-attack-within 60
set slow-attack-HTTP-transaction-timeout 30
set slow-attack-packet-interval-timeout 10
set content-scraping-detection enable
set content-scraping-action alert
set content-scraping-severity Medium
set content-scraping-occurrence-num 120
set content-scraping-within 60
next
end
از مسیر زیر وارد شوید:
در این بخش FortiWeb از Client Eventها استفاده میکند. پیشفرضهای مهم شامل Mouse Movement، Click و Keyboard هستند. برای صفحه Login، Register و فرمهای مهم، این قابلیت ارزشمند است. برای API، Webhook و Mobile App ممکن است باعث False Positive شود؛ چون آنها الزاماً Mouse یا Keyboard ندارند.
نمونه GUI پیشنهادی برای صفحه Login:
| گزینه | مقدار پیشنهادی | توضیح |
|---|---|---|
| Mouse Movement | Enable | برای تشخیص رفتار انسانی |
| Click | Enable | برای فرمها و دکمهها |
| Keyboard | Enable | برای Login و Search |
| Screen Touch | Enable در صورت وجود Mobile Web | برای کاربران موبایل |
| Bot Traits | Enable | لایه اضافه برای Headless Browser و Scriptها |
| URL List | محدود به Login/Register | فعالسازی روی کل سایت توصیه نمیشود |
نمونه CLI:
config waf biometrics-based-detection
edit "BBD-Login"
set mouse-movement enable
set click enable
set keyboard enable
set screen-touch enable
set scroll disable
set page-focus enable
set bot-traits enable
set bot-traits-num 5
set event-collection-time 15
set bot-effective-time 5
set action alert
set severity medium
set bot-access-rate 5
config url-list
edit 1
set host-status enable
set host "www.example.com"
set type simple-string
set url "/login"
next
edit 2
set host-status enable
set host "www.example.com"
set type simple-string
set url "/register"
next
end
next
end
از مسیر زیر وارد شوید:
یک Deception URL تعریف کنید؛ یعنی URLای که برای کاربر عادی قابل مشاهده نیست و فقط داخل HTML بهصورت مخفی تزریق میشود. اگر Bot آن URL را درخواست کند، FortiWeb آن را بهعنوان رفتار Bot تشخیص میدهد. برای نام URL از مسیر واقعی، مهم یا قابل حدس استفاده نکنید. بهتر است اسم آن طبیعی ولی غیرواقعی باشد.
نمونههای خوب برای Deception URL:
/assets/cache/customer-map.js /static/report/health-check.html /resource/legacy/catalog-sync.php
نمونه CLI:
config waf bot-deception
edit "BD-General"
set deception-url "/assets/cache/customer-map.js"
set action alert_deny
config url-list
edit 1
set url "/"
next
edit 2
set url "/products"
next
edit 3
set url "/blog"
next
end
next
end
Exception Policy زمانی لازم است که یک مسیر، IP، Host یا پارامتر خاص در حالت عادی باعث Trigger شدن Bot Mitigation میشود. برای مثال Monitoring داخلی، Scanner مجاز، Health Check، API Gateway، سرویس پرداخت، Callback بانک، CDN یا مسیرهای Mobile App ممکن است رفتار انسانی نداشته باشند و باید از بعضی چکها مستثنی شوند.
از مسیر زیر وارد شوید:
نمونه CLI برای Exception یک IP مانیتورینگ و یک URI:
config waf bot-mitigate-exception
edit "BOT-EXC-Internal-Monitoring"
config exception-element-list
edit 1
set match-target CLIENT_IP
set operator EQ
set ip-range "192.168.10.50"
set concatenate-type OR
next
edit 2
set match-target URI
set operator STRING_MATCH
set value "/health"
set concatenate-type OR
next
end
next
end
بعد از اینکه Known Bots، Threshold، Biometrics، Bot Deception و Exception را ساختید، باید همه را در Bot Mitigation Policy انتخاب کنید. Fortinet در مستندات توضیح میدهد که Bot Mitigation Policy این بخشها را تجمیع میکند و سپس در Web Protection Profile اعمال میشود.
مسیر GUI ساخت Policy:
سپس این Policy را در Web Protection Profile انتخاب کنید:
نمونه CLI برای تجمیع Ruleها:
config waf bot-mitigate-policy
edit "BMP-Production"
set known-bots "KB-Production"
set threshold-based-detection "TBD-Production-Monitor"
set biometrics-based-detection "BBD-Login"
set bot-deception "BD-General"
next
end
نمونه اتصال به Web Protection Profile:
config waf web-protection-profile inline-protection
edit "WPP-Production"
set bot-mitigation-policy "BMP-Production"
next
end
نمونه زیر یک سناریوی پایه برای سایت Production است. این نمونه برای شروع طراحی است، نه نسخه نهایی همه سایتها. قبل از اعمال در Production، نام Host، URLها، Thresholdها، Actionها و Exceptionها باید با ترافیک واقعی سازمان تطبیق داده شوند.
config waf known-bots
edit "KB-Production"
set known-engines-status enable
set known-engines-action bypass
set crawler-status enable
set crawler-action alert
set scanner-status enable
set scanner-action alert_deny
set dos-status enable
set dos-action block_period
set dos-block-period 300
next
end
config waf threshold-based-detection
edit "TBD-Production-Monitor"
set bot-recognition real-browser-enforcement
set validation-timeout 20
set max-attempt-times 3
set crawler-detection enable
set crawler-action alert
set crawler-occurrence-num 80
set crawler-within 60
set scanner-detection enable
set scanner-action alert_deny
set scanner-occurrence-num 20
set scanner-within 60
set content-scraping-detection enable
set content-scraping-action alert
set content-scraping-occurrence-num 120
set content-scraping-within 60
next
end
config waf biometrics-based-detection
edit "BBD-Login"
set mouse-movement enable
set click enable
set keyboard enable
set screen-touch enable
set bot-traits enable
set bot-traits-num 5
set event-collection-time 15
set action alert
config url-list
edit 1
set host-status enable
set host "www.example.com"
set type simple-string
set url "/login"
next
end
next
end
config waf bot-deception
edit "BD-General"
set deception-url "/assets/cache/customer-map.js"
set action alert_deny
config url-list
edit 1
set url "/"
next
edit 2
set url "/products"
next
end
next
end
config waf bot-mitigate-policy
edit "BMP-Production"
set known-bots "KB-Production"
set threshold-based-detection "TBD-Production-Monitor"
set biometrics-based-detection "BBD-Login"
set bot-deception "BD-General"
next
end
config waf web-protection-profile inline-protection
edit "WPP-Production"
set bot-mitigation-policy "BMP-Production"
next
end
در فروشگاه اینترنتی معمولاً مشکل اصلی Scraping قیمت، Product Enumeration، Search Abuse و Credential Stuffing است. برای این سناریو، Threshold روی Product Listing و Search فعال شود، Biometrics فقط روی Login و Register فعال شود، Known Good Bots بایپس شوند و Bot Deception روی صفحات HTML عمومی قرار بگیرد.
در پرتال سازمانی، تمرکز روی Login، Session، اسکن مسیرهای مدیریتی و جلوگیری از Password Guessing است. Biometrics و Real Browser Enforcement برای Login مفید است. Scanner Detection باید سریعتر سختگیرانه شود، اما Health Checkها و مانیتورینگ داخلی باید Exception شوند.
برای API، Biometrics معمولاً انتخاب خوبی نیست چون Clientها مرورگر انسانی نیستند. در این سناریو بیشتر روی Threshold، Rate/DoS Protection، Signature، API Protection، Client Certificate، JWT یا Authentication بیرونی تمرکز کنید. Bot Mitigation میتواند کمک کند، اما باید URLها و Exceptionها دقیق باشد.
مشکل اصلی معمولاً Crawler و Scraper است. Bot Deception و Content Scraping Detection مفید هستند. Known Good Bots باید با دقت Bypass شوند تا SEO آسیب نبیند.
برای بررسی رخدادها از مسیرهای زیر استفاده کنید:
دستورهای مفید برای بررسی Config:
show waf known-bots show waf threshold-based-detection show waf biometrics-based-detection show waf bot-deception show waf bot-mitigate-policy show waf web-protection-profile inline-protection
اگر Bot Mitigation کار نمیکند، این موارد را بررسی کنید:
| قابلیت | مناسب برای | نامناسب یا پرریسک برای | Action پیشنهادی شروع | نکته مهم |
|---|---|---|---|---|
| Known Bots | تفکیک Bot خوب و بد | زمانی که دیتابیس/Update در دسترس نیست | Good Bots: Bypass، Bad Bots: Alert | برای SEO حیاتی است |
| Threshold Based Detection | Scanner، Scraper، Slow Attack، Crawler | سایتهایی با Burst طبیعی زیاد بدون تیونینگ | Alert | Threshold باید با لاگ واقعی تنظیم شود |
| Biometrics Based Detection | Login، Register، فرمهای تعاملی | API، Webhook، Mobile App بدون Browser Event | Alert یا Real Browser | روی کل سایت فعال نشود |
| Bot Deception | Crawlerهای ساده و Scraperهای HTML | API و مسیرهای غیر HTML | Alert & Deny بعد از تست | Deception URL نباید واقعی باشد |
| ML Based Bot Detection | ترافیک زیاد و الگوهای پیچیده | سایت کمترافیک یا تازه راهاندازیشده | Learning سپس Monitor | به زمان یادگیری نیاز دارد |
| Advanced Bot Protection | Botهای حرفهای و سناریوهای Enterprise | محیطهای آفلاین یا بدون امکان ارتباط Cloud | Sample Collection سپس Enforce | سرویس SaaS و نیازمند طراحی جداست |