Waf چیست؛ نصب و راه اندازی Waf روی سرورهای لینوکسی
برای آموزش نصب WAF روی سرورهای لینوکسی در ابتدا باید بدانیم WAF چیست؟ شما از فایروالهای مبتنی بر میزبان و فایروالهای شبکه استفاده کردهاید اما آیا تا به حال به پیادهسازی فایروال برنامههای وب یا WAF فکر کردهاید؟ فایروالها به هر شکلی از ابتدای شبکهسازی وجود داشتهاند. اولین فایروالها حتی به عنوان فایروال شناسایی نشدند. آنها چیزی بیش از موانع فیزیکی بین شبکهها نبودند. در دهه ۱۹۸۰ اولین دستگاهی که بهطور خاص برای فایروال طراحی شده بود توسط DEC توسعه یافت. از آن زمان، فایروالها به شکلهای بی شماری تکامل یافتهاند. در ادامه این نوشته با ما همراه باشید تا به بررسی Waf چیست و نصب و راه اندازی آن روی سرور لینوکس خواهیم پرداخت.
فهرست مطالب
فایروال چیست؟
فایروال در هسته خود دستگاهی است که برای اجازه یا رد ترافیک بر اساس مجموعهای از قوانین طراحی شده است. این قوانین میتوانند به سادگی «اجازه دادن به HTTP و مسدود کردن هر چیز دیگری» باشند یا میتوانند بینهایت پیچیدهتر باشند، از جمله پروتکلها، پورتها، آدرسها و حتی اثر انگشت برنامه. برخی از فایروالهای مدرن حتی از یادگیری ماشینی نیز در ترکیب استفاده کردهاند.
Waf چیست؟
مانند سایر فناوریها، با تکامل فایروالها، برخی کاربردهای خاص شناسایی شدهاند. فایروالهای برنامههای کاربردی وب (WAF) یکی از این موارد کاربردی هستند. WAF یک فایروال است که به طور خاص برای مدیریت ترافیک “وب” یعنی ترافیک با استفاده از پروتکل HTTP طراحی شده است.
به طور کلی، نقش WAF این است که تمام ترافیک HTTP را که برای یک وب سرور تعیین میشود، بررسی کند، درخواستهای “بد” را کنار بگذارد و ترافیک “خوب” را به آن منتقل کند. همانطور که ممکن است حدس بزنید جزئیات نحوه عملکرد این کار کمی پیچیدهتر است.
مانند فایروالهای معمولی، انتظار میرود که WAF انواع خاصی از ترافیک را مسدود کند. برای انجام این کار، باید لیستی از مواردی که باید مسدود شوند را در اختیار WAF قرار دهید. در نتیجه، محصولات اولیه WAF بسیار شبیه به سایر محصولات مانند نرمافزار ضد ویروس، محصولات IDS/IPS و موارد دیگر هستند. این همان چیزی است که به عنوان تشخیص مبتنی بر امضا شناخته میشود. امضاها معمولاً مشخصه خاصی از بسته HTTP را مشخص میکنند که میخواهید اجازه دهید یا رد کنید.
نمونههای WAF چیست؟
به عنوان مثال،WAF ها اغلب برای مسدود کردن حملات تزریق SQL استفاده میشوند. یک امضای بسیار ساده ممکن است فقط به دنبال عناصر شناسایی کلیدی یک حمله تزریق SQL معمولی باشد. به عنوان مثال، ممکن است به دنبال چیزی مانند AND 1=1 باشد که به عنوان بخشی از درخواست GET یا POST درج شده است. اگر این با یک بسته دریافتی مطابقت داشته باشد، WAF آن را به عنوان بد علامت گذاری کرده و آن را دور میاندازد.
امضاها به خوبی کار میکنند اما نیاز به نگهداری زیادی دارند تا اطمینان حاصل شود که موارد مثبت کاذب به حداقل میرسد. علاوه بر این، نوشتن امضا اغلب بیشتر یک شکل هنری است تا یک کار برنامهنویسی ساده.
نوشتن امضا نیز میتواند بسیار پیچیده باشد. شما اغلب سعی میکنید یک الگوی حمله کلی را بدون مطابقت با ترافیک قانونی مطابقت دهید. به صراحت، این میتواند بسیار اعصاب خردکن باشد.
پروژه ModSecurity یک پروژه منبع باز WAF است که به عنوان یک ماژول برای وبسرور Apache شروع شد اما از آن زمان به یک بسته ماژولار تبدیل شده است که با IIS، Nginx و دیگران کار میکند. ModSecurity یک WAF مبتنی بر امضا است و اغلب با مجموعهای از امضاهای پیشفرض به نام مجموعه قوانین هسته OWASP ModSecurity ارسال میشود.
مجموعه قوانین اصلی (CRS) یک نقطه شروع عالی برای استقرار یک WAF مبتنی بر امضا است. این شامل امضاهایی برای همه خطرات امنیتی برنامه وب ده برتر OWASP و همچنین طیف گستردهای از حملات دیگر است. توسعهدهندگان تمام تلاش خود را انجام دادهاند تا اطمینان حاصل کنند که CRS هشدارهای نادرست کمی دارد اما ناگزیر، هر کسی که CRS را به کار میگیرد، باید قوانین را تغییر دهد. این شامل یادگیری زبان قوانین و داشتن درک عمیق از پروتکل HTTP است.
با این حال، فناوری تکامل مییابد و ارائه دهندگان WAF جدیدتر از روشهای دیگری برای جلوگیری از ترافیک بد استفاده میکنند.
حرکت بسیار گستردهای از رویکردهای پیکربندی ایستا مانند لیستهای مجاز و مسدود کردن به روشهای پویاتر شامل API ها و یادگیری ماشین صورت گرفته است. این حرکت در چندین فناوری، از جمله فایروالهای سنتی، نرمافزار ضد ویروس وWAF ها انجام شده است.
یک WAF میتواند یاد بگیرد
در دنیای جدید و شجاع مجموعه قوانین پویا، WAFها از رویکردهای هوشمندتر برای شناسایی ترافیک خوب و بد استفاده میکنند. یکی از روشهای “آسانتر” استفاده شده، قرار دادن WAF در حالت “یادگیری” است تا بتواند ترافیک جریان یافته به وب سرور محافظت شده را کنترل کند. هدف در اینجا آموزش WAF چیست برای شناسایی ترافیک خوب است. این ممکن است شامل ترافیکی باشد که با الگوهایی مطابقت دارد که هنگام استفاده از امضاها به عنوان بد برچسبگذاری شدهاند. هنگامی که WAF آموزش داده شد، به حالت اجرایی منتقل میشود.
آموزش یک WAF مانند این، شبیه چیزی است که وقتی یک سیستم ایمیل را برای شناسایی هرزنامه آموزش میدهید، اتفاق میافتد. سیستمهای ایمیل اغلب از یک الگوریتم فیلتر برای شناسایی هرزنامه استفاده میکنند. این الگوریتمها نسبتاً خوب کار میکنند اما میتوانند برای اجازه دادن به اسپم مسموم شوند. مشکلات مشابهی در مورد الگوریتمهای استفاده شده توسط ارائهدهندگان WAF وجود دارد، به خصوص زمانی که WAF در حالت یادگیری است.
ارائهدهندگان پیشرفتهتر WAF از تکنیکهای اختصاصی برای اجازه دادن و مسدود کردن ترافیک استفاده میکنند. این تکنیکها شامل الگوریتمهایی هستند که میتوانند تشخیص دهند که آیا حملات خاصی علیه سیستم هدف کار میکنند یا خیر؟ و فقط حملاتی را که مضر هستند مسدود میکنند. با این حال، تکنیکهای پیشرفتهای مانند این، معمولاً فقط در ارائهدهندگان WAF SaaS یافت میشوند و نه در دستگاههای WAF مستقل.
نصب برنامه مبتنی بر وب فایروال (WAF)
پیش نیازهای نصب WAF
- یک وب سرور لینوکس راکی که آپاچی را اجرا میکند.
- تسلط به ویرایشگر خط فرمان. ما در این مثال از vi استفاده میکنیم.
- درک این موضوع که نصب این ابزار مستلزم نظارت بر اقدامات و تنظیم محیط شما است.
- یک حساب کاربری در سایت WAF Comodo
- همه دستورات به عنوان کاربر ریشه یا sudo اجرا میشوند
مقدمه
mod_security یک فایروال مبتنی بر وب منبع باز (WAF) است. این تنها یکی از اجزای ممکن از راهاندازی سرور وب سختشده Apache است و میتواند با یا بدون ابزارهای دیگر استفاده شود.
یکی از مواردی که هنگام نصب از مخازن عمومی راکی لینوکس در mod_security وجود ندارد، این است که قوانین نصب شده در بهترین حالت حداقل هستند. برای دریافت بسته گستردهتر از قوانین mod_security رایگان، ما از روش نصب WAF Comodo پس از نصب بسته پایه استفاده میکنیم.
توجه داشته باشید که Comodo یک تجارت است که ابزارهای زیادی را برای کمک به امنیت شبکهها میفروشد از جمله این ابزارها گواهینامه ssl است. ابزارهای رایگان mod_security ممکن است برای همیشه رایگان نباشند و لازم است برای دسترسی به قوانین، یک لاگین با Comodo تنظیم کنید.
نصب mod_security
برای نصب بسته پایه، از این دستور استفاده کنید که وابستگیهای گم شده را نصب میکند. ما همچنین به wget نیاز داریم، بنابراین اگر آن را نصب نکردهاید، این کار را نیز انجام دهید:
dnf install mod_security wget
راهاندازی حساب Comodo خود
برای راهاندازی حساب رایگان خود، به سایت WAF Comodo بروید و روی پیوند “ثبت نام” در بالای صفحه کلیک کنید. از شما خواسته میشود اطلاعات نام کاربری و رمز عبور را تنظیم کنید، اما هیچ صورتحساب کارت اعتباری یا دیگر صورت حسابی نیاز نیست. اعتبارنامههایی که برای ورود به وبسایت استفاده میکنید در راهاندازی نرمافزار Comodo و همچنین برای بهدست آوردن قوانین استفاده میشود، بنابراین باید آنها را در یک مدیر رمز عبور در جایی امن نگه دارید.
لطفاً توجه داشته باشید که بخش “شرایط و ضوابط” فرمی که برای استفاده از فایروال برنامه وب Comodo (CWAF) باید پر کنید، برای پوشش همه محصولات و خدمات آنها نوشته شده است. گفته شده، قبل از موافقت با شرایط، باید ان را با دقت بخوانید!
نصب CWAF
قبل از شروع، برای اینکه اسکریپت بعد از بارگیری ما اجرا شود، به برخی ابزارهای توسعه نیاز دارید. بسته را با استفاده از:
dnf group install 'Development Tools'
علاوه بر این، برای مشاهده صحیح mod_security باید وب سرور خود را برای Comodo اجرا کنید. بنابراین اگر از قبل در حال اجرا نیست، آن را شروع کنید:
systemctl start httpd
پس از ثبت نام در Comodo، یک ایمیل حاوی دستورالعملهایی در مورد اقدامات بعدی دریافت خواهید کرد. در اصل، کاری که باید انجام دهید این است که با اعتبار جدید خود وارد وب سایت شوید و سپس اسکریپت نصب کلاینت را دانلود کنید. از دایرکتوری روت سرور خود، از دستور wget برای دانلود نصبکننده استفاده کنید:
wget https://waf.comodo.com/cpanel/cwaf_client_install.sh
نصبکننده را با تایپ کردن اجرا کنید:
bash cwaf_client_install.sh
با این کار نصبکننده استخراج شده و فرآیند شروع میشود و به صفحه بازتاب مییابد. یک پیام دریافت خواهید کرد:
No web host management panel found, continue in 'standalone' mode? [y/n]:
“y” را تایپ کنید و اجازه دهید اسکریپت ادامه پیدا کند. همچنین ممکن است این اطلاعیه را دریافت کنید:
Some required perl modules are missed. Install them? This can take a while. [y/n]:
اگر چنین است، “y” را تایپ کنید و به ماژولهای گم شده اجازه نصب را بدهید.
Enter CWAF login: username@domain.com
Enter password for 'username@domain.com' (will not be shown): *************************
Confirm password for 'username@domain.com' (will not be shown): ************************
لطفاً در اینجا توجه داشته باشید که احتمالاً باید قوانین را بارگیری کرده و آنها را در مکان صحیح نصب کنید، زیرا فیلد رمز عبور به علامت یا کاراکتر خاصی نیاز دارد اما ظاهراً فایل پیکربندی هنگام ارسال آن به سایت Comodo از نصبکننده یا نویسه دارای مشکل است.
به روز رسانی اسکریپت
این اسکریپتها همیشه با یک خطای اعتبارنامه خراب میشوند. این مورد احتمالاً روی مدیرانی که سرورهای وب با رابط کاربری گرافیکی (Cpanel / Plesk) را اجرا میکنند تأثیری نمیگذارد اما اگر برنامه را بهطور مستقل اجرا میکنید، همانطور که در مثال ما وجود داشت، این کار را میکند. در زیر می توانید راه حل را پیدا کنید.
Enter absolute CWAF installation path prefix (/cwaf will be appended): /usr/local
Install into '/usr/local/cwaf' ? [y/n]:
فقط مسیر را به عنوان داده شده بپذیرید و سپس “y” را در قسمت بعدی برای مسیر نصب تایپ کنید. اگر یک مسیر غیر استاندارد برای فایل پیکربندی برای Apache/nginx دارید، آن را در اینجا وارد کنید، در غیر این صورت فقط «Enter» را بدون تغییر فشار دهید:
If you have non-standard Apache/nginx config path enter it here:
اینجا جایی است که خرابی رخ می دهد و تنها راه حل این است که به صورت دستی قوانین را دانلود و نصب کنید. مطابق شکل زیر به دستورات پاسخ دهید:
Do you want to use HTTP GUI to manage CWAF rules? [y/n]: n
Do you want to protect your server with default rule set? [y/n]: y
اما انتظار داشته باشید که پیام بعدی را نیز دریافت کنید:
Warning! Rules have not been updated. Check your credentials and try again later manually
+------------------------------------------------------
| LOG : Warning! Rules have not been updated. Check your credentials and try again later manually
+------------------------------------------------------
| Installation complete!
| Please add the line:
| Include "/usr/local/cwaf/etc/modsec2_standalone.conf"
| to Apache config file.
| To update ModSecurity ruleset run
| /usr/local/cwaf/scripts/updater.pl
| Restart Apache after that.
| You may find useful utility /usr/local/cwaf/scripts/cwaf-cli.pl
| Also you may examine file
| /usr/local/cwaf/INFO.TXT
| for some useful software information.
+------------------------------------------------------
| LOG : All Done!
| LOG : Exiting
این کمی ناامید کننده است. می توانید به حساب خود در وب سایت Comodo بروید و رمز عبور خود را تغییر دهید و اسکریپت نصب را مجدداً اجرا کنید، اما چیزی را تغییر نمیدهد. اعتبارنامه ها همچنان ناموفق خواهند بود.
راه حل فایل قوانین CWAF
برای رفع این مشکل، باید قوانین را به صورت دستی از وب سایت نصب کنیم. این کار با ورود به حساب کاربری خود در https://waf.comodo.com و کلیک بر روی لینک “دانلود مجموعه قوانین کامل” انجام میشود. سپس باید قوانین را با استفاده از scp در وب سرور خود کپی کنید.
مثال: scp cwaf_rules-1.233.tgz root@mywebserversdomainname.com:/root/
پس از کپی شدن فایل tar gzip، فایل را به دایرکتوری قوانین انتقال دهید:
mv /root/cwaf_rules-1.233.tgz /usr/local/cwaf/rules/
سپس به دایرکتوری قوانین بروید:
cd /usr/local/cwaf/rules/
و قوانین را از حالت فشرده خارج کنید:
tar xzvf cwaf_rules-1.233.tgz
هر گونه بهروزرسانی جزئی قوانین باید به همین ترتیب انجام شود. اینجاست که پرداخت قوانین و پشتیبانی میتواند مفید واقع شود. همه چیز به بودجه شما بستگی دارد.
پیکربندی CWAF
وقتی mod_security
را نصب کردیم، فایل تنظیمات پیشفرض در /etc/httpd/conf.d/mod_security.conf
نصب شد.
در دو مکان با ویرایش فایل شروع کنید:
vi /etc/httpd/conf.d/mod_security.conf
در بالای فایل، خواهید دید:
<IfModule mod_security2.c>
# Default recommended configuration
SecRuleEngine On
زیر SecRuleEngine On Line SecStatusEngine On را اضافه کنید تا اکنون بالای فایل به شکل زیر درآید:
<IfModule mod_security2.c>
# Default recommended configuration
SecRuleEngine On
SecStatusEngine On
سپس به انتهای این فایل پیکربندی بروید. ما باید به mod_security بگوییم که قوانین را کجا بارگذاری کند. قبل از ایجاد تغییرات باید این را در پایین فایل مشاهده کنید:
# ModSecurity Core Rules Set and Local configuration
IncludeOptional modsecurity.d/*.conf
IncludeOptional modsecurity.d/activated_rules/*.conf
IncludeOptional modsecurity.d/local_rules/*.conf
</IfModule>
ما باید در یک خط در پایین اضافه کنیم تا پیکربندی CWAF را اضافه کنیم، که به نوبه خود قوانین CWAF را بارگیری میکند. این خط شامل “/usr/local/cwaf/etc/cwaf.conf” است.
وقتی کارتان تمام شد، پایین این فایل باید به شکل زیر باشد:
# ModSecurity Core Rules Set and Local configuration
IncludeOptional modsecurity.d/*.conf
IncludeOptional modsecurity.d/activated_rules/*.conf
IncludeOptional modsecurity.d/local_rules/*.conf
Include "/usr/local/cwaf/etc/cwaf.conf"
</IfModule>
جمع بندی
WAF ها و به طور کلی فایروالها در طول سالها بسیار تکامل یافتهاند و از روشهای ایستا به روشهای پویا برای شناسایی و مسدود کردن ترافیک رفتهاند. این تکنیکها فقط در آینده بهتر خواهند شد. راه حلهای مختلفی از منبع باز تا ارائهدهندگان تجاری موجود است. مهم نیست نیازهای شما چیست، یک WAF برای شما وجود دارد.
اکنون تغییرات خود را ذخیره و httpd را مجددا راهاندازی کنید.
systemctl restart httpd
اگر httpd خوب شروع شود، آنگاه شما آماده شروع استفاده از mod_security
با CWAF هستید.