اطلاعیه

بستن
هنوز اطلاعیه ای در دست نیست.

محافظت از در مقابل حملات DDOS و Brute Force با استفاده از ماژول های Mod_Security و Mod_evasive

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    محافظت از در مقابل حملات DDOS و Brute Force با استفاده از ماژول های Mod_Security و Mod_evasive

    امن کردن وب سرور آپاچی در برابر حملات برای کسانی که در کار هاستینگ هستند یا دارای سرور شخصی می باشند در اولویت بالایی قرار دارد. ابزار mod_security (موتور Open Source تشخیص و جلوگیری از حملات برای اپلیکیشن های Web که با وب سرور در ارتباط هستند) و همچنین mod_evasive در حقیقت 2 ابزار بسیار مهم میباشند که برای محافظت از یک وب سرور در مقابل حملات DDOS و Brute Force مورد استفاده قرار میگیرد.


    همچنین توصیه میشود مطالعه کنید.

    نحوه نصب و استفاده از LMD (مخفف Linux Malware Detect) با ClamAV به عنوان آنتی ویروس (به زودی)

    13 ترفند برای برقراری امنیت در وب سرور Apache

    25 ترفند موثر از فایل ".htaccess" برای امن کردن و بالا بردن کارایی سایت ها در وب سرو Apache



    mod_evasion : همان طور که از اسمش پیداست مانند چتر، وب سرور ها را از تهدیدات محافظت می کند.
    برای دیدن سایز بزرگ روی عکس کلیک کنید  نام: ddos-1.png مشاهده: 1 حجم: 765.5 کیلو بایت




    در این مقاله ما در مورد چگونگی نصب و تنظیمات و نحوه کار آنها با Apache در RHEL/CentOS 6 - 7 و همچنین Fedora 15-21 صحبت می کنیم. همچنین حملات را شبیه سازی خواهیم کرد تا عملکرد سرور را بسنجیم.

    در ابتدا باید LAMP سرور روی سیستمتان نصب باشد :

    آموزش تصویری نصب LAMP Stack در RedHat/CentOS 7.0


    IPTables را به عنوان فایروال پیش فرض به جای firewalld بر روی RHEL/CentOS 6-7 یا Fedora 21 استفاده کنید.



    گام اول : نصب فایروال IPTable بر روی RHEL/CentOS 7 و Fedora 21

    برای شروع firewalld را stop و disable می کنیم :
    کد PHP:
    # systemctl stop firewalld
    # systemctl disable firewalld 
    برای دیدن سایز بزرگ روی عکس کلیک کنیدنام: Disable-Firewalld-Service.pngمشاهده: 1حجم: 50.1 کیلو بایت



    حالا بسته iptables-services را قبل از فعال کردن iptables نصب کنید :
    کد PHP:
    # yum update && yum install iptables-services
    # systemctl enable iptables
    # systemctl start iptables
    # systemctl status iptables 
    برای دیدن سایز بزرگ روی عکس کلیک کنیدنام: Install-Iptables-Firewall.pngمشاهده: 1حجم: 63.2 کیلو بایت






    گام دوم : نصب Mod_Security و Mod_evasive

    شما باید ریپازیتوری EPEL را در RHEL/CentOS 7/6 نیز فعال کنید تا بتوانید هر دو بسته را نصب کنید. کاربران Fedora نیازی به فعال کردن هیچ ریپازیتوری ندارند.
    کد PHP:
    # yum update && yum install mod_security mod_evasive 
    بعد از کامل شدن نصب، فایلهای تنظیمات را در /etc/httpd/conf.d. می توانید بیابید :
    کد PHP:
    # ls -l /etc/httpd/conf.d 
    برای دیدن سایز بزرگ روی عکس کلیک کنیدنام: mod_security-mod_evasive-Configurations.pngمشاهده: 1حجم: 34.7 کیلو بایت




    حالا برای اینکه این دو ماژول را با آپاچی یکپارچه بکنیم و آپاچی هنگام شروع آنها را نیز Load کند، باید از وجود خط های زیر در فایلهای mod_evasive.conf و mod_security.conf به ترتیب اطمینان حاصل کنیم :
    کد PHP:
    LoadModule evasive20_module modules/mod_evasive24.so
    LoadModule security2_module modules
    /mod_security2.so 
    توجه : modules/mod_security2.so و modules/mod_evasive24.so در واقع مسیرهای مربوطه هستند که در پوشه /etc/httpdازسورس فایل module می باشد. با لیست کردن محتویات پوشه /etc/httpd/modules می توان این را تایید کرد :
    کد PHP:
    # cd /etc/httpd/modules
    # pwd
    # ls -l | grep -Ei '(evasive|security)' 
    برای دیدن سایز بزرگ روی عکس کلیک کنیدنام: Verify-mod_security-mod_evasive-Modules.pngمشاهده: 1حجم: 21.5 کیلو بایت




    حالا آپاچی رو ریستارت کنید و از لود mod_evasive و mod_security اطمینان حاصل کنید :
    کد PHP:
    # service httpd restart         [On RHEL/CentOS 6 and Fedora 20-18]
    # systemctl restart httpd         [On RHEL/CentOS 7 and Fedora 21 
    ]


    کد PHP:
    [Dump a list of loaded Static and Shared Modules]

    # httpd -M | grep -Ei '(evasive|security)' 
    برای دیدن سایز بزرگ روی عکس کلیک کنیدنام: Check-mod_security-mod_evasive-Loaded.pngمشاهده: 1حجم: 26.3 کیلو بایت






    گام سوم : نصب Core RuleSet و تنظیم Mod_Security

    به صورت خلاصه Core Rule Ser یا همان CRS تعیین می کند که وب سرور چه طور در شرایط مشخصی رفتار کند .توسعه دهندگان mod_security یک CRS رایگان به نام OWASP (Open Web Application Security Project) ModSecurity CRS فرآهم کرده اند که به صورت زیر دانلود و نصب می شود.

    1 - OWASP CRS را در پوشه ای که به این منظور ساخته اید دانلود کنید.
    کد PHP:
    # mkdir /etc/httpd/crs-linuxzone
    # cd /etc/httpd/crs-linuxzone
    # wget https://github.com/SpiderLabs/owasp-modsecurity-crs/tarball/master 
    برای دیدن سایز بزرگ روی عکس کلیک کنیدنام: Download-mod_security-Core-Rules.pngمشاهده: 1حجم: 84.2 کیلو بایت





    2 - فایل CRS را از حالت tar خارج کرده و نام پوشه را به یک نام راحت تر تغییر دهید.
    کد PHP:
    # tar xzf master
    # mv SpiderLabs-owasp-modsecurity-crs-ebe8790 owasp-modsecurity-crs 
    برای دیدن سایز بزرگ روی عکس کلیک کنیدنام: Extract-mod_security-Core-Rules.pngمشاهده: 1حجم: 26.2 کیلو بایت





    3 - حالا نوبت تنظیم mod_security هست . فایل نمونه را owasp-modsecurity-crs/modsecurity_crs_10_setup.conf.example به یک فایل دیگر بدون پسوند .example کپی کنید :
    کد PHP:
    # cp modsecurity_crs_10_setup.conf.example modsecurity_crs_10_setup.conf 
    و به Apache بگید که از این فایل همراه با ماژول استفاده بکند برای این کار خط های زیر را به فایل /etc/httpd/conf/httpd.conf اضافه کنید.
    کد PHP:
    <IfModule security2_module>
        Include 
    crs-linuxzone/owasp-modsecurity-crs/modsecurity_crs_10_setup.conf
        
    Include crs-linuxzone/owasp-modsecurity-crs/base_rules/*.conf
    </IfModule> 
    در نهایت ما فایل تنظیمات خودمان را در درون پوشه /etc/httpd/modsecurity.d می سازیم جایی که ما دستورات مورد نظر مان را قرار خواهیم داد به جای این که فایل های CRS را به صورت مستقیم تغییر بدهیم.با این کار آپگرید CRS ها وقتی ورژن جدیدی ایجاد می شود راحت تر خواهد بود.
    کد PHP:
    <IfModule mod_security2.c>
        
    SecRuleEngine On
        SecRequestBodyAccess On
        SecResponseBodyAccess On
        SecResponseBodyMimeType text
    /plain text/html text/xml application/octet-stream
        SecDataDir 
    /tmp
    </IfModule
    به منظور دسترسی به یک راهنمای کامل درباره دستورات کانفیگ mod_security میتوانید به ریپازیتوری SpiderLabs’ ModSecurity GitHub مراجعه کنید.



    گام چهارم : تنظیمات Mod_Evasive

    Mod_evasive توسط دستورات موجود در /etc/httpd/conf.d/mod_evasive.conf تنظیم می شود. چون هنگام آپگرید بسته هیچ رولی برای آپدیت وجود ندارد، بر عکس mod_security نیازی نیست یک فایل جداگانه برای دستورهای مورد نظر اضافه کنیم.

    به صورت پیش فرض در فایل mod_evasive.conf دستورات زیر فعال هستند. (توجه کنید که این فایل خطوط زیادی دارد که کامنت هستند در نتیجه با دقت دستورات زیر را از کامنت در بیاورید) :
    کد PHP:
    <IfModule mod_evasive24.c>
        
    DOSHashTableSize    3097
        DOSPageCount        2
        DOSSiteCount        50
        DOSPageInterval     1
        DOSSiteInterval     1
        DOSBlockingPeriod   10
    </IfModule

    توضیح دستورات :
    • DOSHashTableSize : این دستور سایز جدول هش که برای نگه داری فعالیتهای بر اساس ادرس IP را تعیین می کند. با افزایش این عدد سریع تر می توانیم سایتهایی که کلاینت در گذشته مشاهده کرده است را بیابیم, اما این کار بر بازدهی تاثیر می گذارد.
    • DOSPageCount : تعداد قانونی درخواست های مجزا به یک URI خاص که توسط یک مشاهده گر در طول بازه زمانی DOSPageInterval روی می دهد.
    • DOSSiteCount : مانند قبلی , با این تفاوت که تعداد درخواست ها برای کل سایت را لحاظ می کند.
    • DOSBlockingPeriod : اگر بازدید کننده از محدودیت های DOSPageCount و DOSSiteCount تجاوز کند IP آدرس او به مدت زمان DOSBlockingPeriod در بلک لیست قرار می گیرد. در این مدت تمام درخواست های رسیده از آن IP با ارور Forbiddden 403 مواجه می شود.


    میتوانید این مقدارها را آزمایش کنید به طوری که وب سرورتان قادر خواهد بود مقدار مورد نیاز و نوع ترافیک را handel کند.

    نکته : اگر این مقادیر به درستی set نشوند، شاید بازدید کننده های معمولی block شوند.


    چند دستور دیگر :

    DOSEmailNotify : اگر شما یک ایمیل سرور دارید که در حال اجرا هست, می توانید پیغام های خطا را توسط آپاچی بفرستید. به این نکته توجه داشته باشید که باید به یوزر آپاچی مجوز SELinux رو بدهید.(گر SELinux بر روی enforcing ست شده است)
    توسط این دستور این کار رو انجام می دهیم :
    کد PHP:
    # setsebool -P httpd_can_sendmail 1 
    بعد، این دستور را در فایل mod_evasive.conf اضافه کنید :
    کد PHP:
    DOSEmailNotify you@yourdomain.com 
    اگر این مقدار ست شده باشد و میل سرور شما به درستی کار کند, هر وقت یک IP به بلک لیست اضافه شود یک ایمیل به آدرس ذکر شده فرستاده می شود.

    DOSSystemCommand : به یک دستور سیستمی معتبر به عنوان آرگومان نیاز دارد :
    کد PHP:
    DOSSystemCommand </command
    این عبارت دستوری را معین می کند تا هر وقت یک ip بلاک شد، اجرا شود. که بیشتر اوقات به همراه یک شل اسکریپت استفاده می شود که یک رول فایروال رو اضافه می کند تا اتصالات بعدی امده از ان ip را بلاک کند.


    نوشتن یک شل اسکرپت که ip های بلاک شده را در سطح فایروال مدیریت می کند

    وقتی یک ip آدرس بلاک می شود، ما نیاز داریم تا اتصالات آتی از آن ip را بلاک کنیم. ما از شل اسکریپت زیر برای این منظور استفاده خواهیم کرد. یک پوشه بسازید در مسیر /usr/local/bin و یک فایل به نام ban_ip.sh در این پوشه بسازید.
    کد PHP:
    #!/bin/sh
    # IP that will be blocked, as detected by mod_evasive
    IP=$1
    # Full path to iptables
    IPTABLES="/sbin/iptables"
    # mod_evasive lock directory
    MOD_EVASIVE_LOGDIR=/var/log/mod_evasive
    # Add the following firewall rule (block all traffic coming from $IP)
    $IPTABLES -I INPUT -s $IP -j DROP
    # Remove lock file for future checks
    rm -"$MOD_EVASIVE_LOGDIR"/dos-"$IP
    DOSSystemCommand ما به صورت زیر خواهد بود :
    کد PHP:
    DOSSystemCommand "sudo /usr/local/bin/scripts-linuxzone/ban_ip.sh %s" 
    در خط بالا %s نشاندهنده ی ip مجرم هست که توسط mod_evasive تشخیص داده شده است.


    اضافه کردن یوزر آپاچی به فایل Sudoers

    به این نکته توجه کنید که شما باید به یوزر آپاچی مجوز بدهید تا اسکریپت شما را بدون ترمینال و پسورد اجرا کند. با تایپ visudo به عنوان کاربر روت به فایل /etc/sudoers دسترسی خواهید داشت و دو خط زیر را به آن اضافه کنید :
    کد PHP:
    apache ALL=NOPASSWD: /usr/local/bin/scripts-linuxzone/ban_ip.sh
    Defaults
    :apache !requiretty 
    برای دیدن سایز بزرگ روی عکس کلیک کنیدنام: Add-Apache-User-to-Sudoers.pngمشاهده: 1حجم: 18.2 کیلو بایت




    نکته : به صورت پیش فرض، شما فقط می توانید sudo رو در ترمینال اجرا کنید. در صورتی که در این مورد ما به sudo بدون tty نیاز داریم، پس باید خط هایلایت شده را کامنت کنیم :
    کد PHP:
    #Defaults requiretty 
    برای دیدن سایز بزرگ روی عکس کلیک کنیدنام: Disable-tty-for-Sudo.pngمشاهده: 1حجم: 12.0 کیلو بایت




    در نهایت وب سرور را restart می کنیم :
    کد PHP:
    # service httpd restart         [On RHEL/CentOS 6 and Fedora 20-18]
    # systemctl restart httpd         [On RHEL/CentOS 7 and Fedora 21] 


    گام پنجم : شبیه سازی حمله های DDOS بر روی آپاچی

    ابزارای متعددی برای شبیه سازی یک حمله خارجی بر روی سرور وجود دارد. شما می توانید تنها این عبارت را برای یافتن این شبیه سازها جستجو کنید “tools for simulating ddos attacks

    دقت کنید که تنها شما مسئول نتایج شبیه سازی تان هستید لطفا حملات شبیه سازی شده را روی سروری که هاست آن با خودتان نیست انجام ندهید.

    اگر شما از یک vps استفاده میکنید که توسط شخص دیگری میزبانی میشود شما باید به Provider هاست تان هشدار دهید یا و درخواست پرمیژن برای این چنین جریان ترافیکی را در شبکه شان داشته باشید. سایت ما تحت هیچ شرایطی مسئول فعالیت های شما در این زمینه نخواهد بود.

    علاوه بر این اعمال یک حمله DOS شبیه سازی شده تنها از یک هاست به منزله یک حمله واقعی نمیباشد. برای شبیه سازی این چنین حملاتی شما باید سرور مقصدتان را از چندین کلاینت و در زمانی یکسان مورد حجوم قرار دهید

    محیط تست ما از یک سرور CentOS7 [IP 192.168.0.17] و یک حمله کننده که ویندوز [IP 192.168.0.103] می باشد تشکیل شده است :
    برای دیدن سایز بزرگ روی عکس کلیک کنیدنام: Confirm-Host-IPAddress.pngمشاهده: 1حجم: 12.6 کیلو بایت





    لطفا ویدویی زیر را مشاهده کنید و مراحل مشخص شده به منظور شبیه سازی یک حمله DDOS ساده را دنبال نمایید :
    Protect Apache Aginst DDoS Attacks Using Mod_Security and Mod_evasive.rar


    بعد از حمله دیده می شود که ip مهاجم توسط iptable بلاک می شود :
    برای دیدن سایز بزرگ روی عکس کلیک کنیدنام: Blocked-Attacker-IP.pngمشاهده: 1حجم: 42.3 کیلو بایت




    خلاصه

    با فعال کردن 2 ماژول mod_security و mod_evasive در حقیقت حمله شبیه سازی شده باعث میشود CPU و RAM یک پیک (peak) مصرف موقت (آزمایشی) تنها برای چند ثانیه قبل از اینکه Ip های source توسط فایروال Block شوند را داشته باشند. بدون این ابزار قطعا شبیه ساز سرور را به سرعت به هم خواهد ریخت و در طول حمله آن را Render خواهد کرد.

    لینک های مرجع :
    https://www.modsecurity.org
    فایل های پیوست شده
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 01-30-2021, 04:51 PM.

درباره انجمن منطقه لینوکسی ها

انجمن منطقه لینوکسی ها با هدف ارتقاء سطح علمی کاربران در سطح جهانی و همچنین کمک به بالا بردن سطح علمی عمومی در زمینه های تخصصی فوق پایه گذاری شده است. انجمن منطقه لینوکسی ها از طریق کارشناسان و متخصصان پاسخگوی سوالات گوناگون کاربران مبتدی یا پیشرفته میباشد تا حد امکان تلاش شده که محیطی متنوع و کاربر پسند و به دور از هرگونه حاشیه جهت فعالیت کاربران در این انجمن ایجاد شود. لذا ما به صورت مستمر برای پیشرفت کمی و کیفی محتوی و اطلاعات انجمنمان میکوشیم که این برای ما ارزشمند و حائز اهمیت است. کلیه حقوق،اطلاعات و مقالات در این انجمن متعلق به سایت منطقه لینوکسی ها میباشد، و هرگونه نسخه برداری بدون ذکر منبع مورد پیگرد قانونی خواهد شد.

شبکه های اجتماعی
در حال انجام ...
X