اطلاعیه

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

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

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

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

    همه ما با وب سرور Apache آشنا هستیم این سرور یکی از معروفترین web server ها برای هاست فایل های وب شما و یا website شما روی web میباشد. در زمینه تنظیمات وب سرور آپاچی روی لینوکس هم مطالبی در انجمن موجود هست.


    در این پست درباره چند ترفند اصلی برای امن کردن وب سرورتان بحث خواهیم کرد. قبل از اعمال هر گونه تغییری روی وب سرورتان شما باید یکسری ملزومات اساسی از سرور اپاچی خود داشته باشید.
    • دایرکتوری Document root : که در مسیر /var/www/html یا /var/www میباشد.
    • فایل اصلی کانفیگ : فایل /etc/httpd/conf/httpd.conf روی RHEL/CentOS/Fedora و فایل /etc/apache/apache2.conf روی Debian/Ubuntu
    • پورت پیش فرض HTTP پورت 80 TCP میباشد.
    • پورت پیش فرض HTTPS پورت 443 TCP میباشد.
    • تنظیمات و syntax فایل کانفیگ خود را تست کنید : httpd -t
    • دسترسی به لاگ های سرور : /var/log/httpd/access_log
    • لاگ Error وب سرور : /var/log/httpd/error_log


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

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

    نحوه پسورد گذاشتن روی یک دایرکتوری در آپاچی با استفاده از فایل htaccess

    آموزش دستورات htaccess برای ریدایرکت/انتقال آدرس یک دامنه قدیمی به جدید



    1 : نحوه پنهان کردن ورژن Apache و ماهیت سیستم عامل از طریق خطاها

    زمانی که شما آپاچی را از طریق سورس و یا دستور YUM نصب میکنید به هنگام نمایش خطاها همانطور که در تصویر زیر میبینید ورژن وب سرور apache شما و همچنین نام سیستم عامل تان نمایش داده میشود همچنین اطلاعاتی درباره ماژول های آپاچی نصب شده روی سرورتان نمایش میدهد :

    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	Show-Apache-Version.png نمایش ها:	1 اندازه:	52.6 KB شناسه:	20198


    در تصویر بالا میتوانید ببینید که آپاچی ورژن خود و سیستم عامل را نشان میدهد که این موضوع میتواند یک تهدید اصلی امنیتی برای وب سرور شما و همچنین لینوکس تان باشد برای جلوگیری از اینکه آپاچی این چنین اطلاعاتی را برای همه به نمایش نگذارد نیاز به اعمال تغییراتی در فایل اصلی تنظیمات apache داریم.


    فایل کانفیگ را با ادیتور vim باز کنید و عبارت “ServerSignature“ را جستجو کنید که به صورت پیش فرض On میباشد. ما باید آن را Off کنیم و خط دوم “ServerTokens Prod” به آپاچی میگوید که تنها آپاچی را به عنوان محصول در هدر پاسخگویی سرور روی هر page request برگرداند و در حقیقت نمایش سیستم عامل و اطلاعات اصلی و جزئی ورژن را متوقف میکند :
    کد:
    # vim /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora)
    # vim /etc/apache/apache2.conf (Debian/Ubuntu)
    کد:
    ServerSignature Off
    ServerTokens Prod
    کد:
    # service httpd restart (RHEL/CentOS/Fedora)
    # service apache2 restart (Debian/Ubuntu)
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	Hide-Apache-Version.png نمایش ها:	1 اندازه:	54.0 KB شناسه:	20199

    2 : غیر فعال کردن لیست دایرکتوری

    به صورت پیش فرض آپاچی تمام محتویات دایرکتوری Document root را در صورت نبودن فایل index لیست میکند. همانند تصویر زیر :

    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	Apache-Directory-Listing.png نمایش ها:	1 اندازه:	91.7 KB شناسه:	20200


    ما میتوانیم نمایش لیست دایرکتوری را با استفاده از گزینه Options directive در فایل کانفیگ برای یک دایرکتوری خاص غیر فعال کنیم. برای این منظور ما باید تنظیم زیر را در فایل httpd.conf یا apache2.conf قرار دهیم :
    کد:
    <Directory /var/www/html>
        Options -Indexes
    </Directory>
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	Hide-Apache-Directory-Listing.png نمایش ها:	1 اندازه:	54.6 KB شناسه:	20201



    3 : به صورت مرتب آپاچی خود را آپدیت نگه دارید

    جامعه برنامه نویسان آپاچی به صورت مستمر روی مشکلات امنیتی آن کار میکنند و همچنین ورژن های آپدیت شده را با آپشن های امنیتی جدید release مینمایند. بنابراین همیشه پیشنهاد میشود تا از آخرین ورژن آپاچی به عنوان وب سرورتان استفاده کنید.

    برای بررسی ورژن Apache میتوانید ورژن فعلی خود را با دستور httpd -v بررسی کنید :
    کد:
    # httpd -v
    Server version: Apache/2.2.15 (Unix)
    Server built:   Aug 13 2013 17:29:28
    و با استفاده از دستور زیر میتوانید ورژن تان را آپدیت کنید :
    کد:
    # yum update httpd
    # apt-get install apache2
    همچنین توصیه میشود که Kernel و OS خود را همواره به آخرین release پایدار (stable) آپدیت کنید البته اگر هیچ گونه اپلیکیشن خاصی که روی کرنل یا سیستم عامل خاص کار کند روی سرورتان running نباشد.



    4 : غیر فعال کردن ماژول های غیرضروری

    کاهش احتمال قربانی شدن هر گونه حمله وب همیشه امری مهم میباشد بنابراین پیشنهاد میشود تمامی ماژول هایی که استفاده نمیشوند را غیر فعال کنید. شما میتوانید تمامی ماژول های کامپایل شده وب سرورتان را با استفاده از دستور زیر لیست کنید :
    کد:
    # grep LoadModule /etc/httpd/conf/httpd.conf
    
    # have to place corresponding `LoadModule' lines at this location so the
    # LoadModule foo_module modules/mod_foo.so
    LoadModule auth_basic_module modules/mod_auth_basic.so
    LoadModule auth_digest_module modules/mod_auth_digest.so
    LoadModule authn_file_module modules/mod_authn_file.so
    LoadModule authn_alias_module modules/mod_authn_alias.so
    LoadModule authn_anon_module modules/mod_authn_anon.so
    LoadModule authn_dbm_module modules/mod_authn_dbm.so
    LoadModule authn_default_module modules/mod_authn_default.so
    LoadModule authz_host_module modules/mod_authz_host.so
    LoadModule authz_user_module modules/mod_authz_user.so
    LoadModule authz_owner_module modules/mod_authz_owner.so
    LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
    LoadModule authz_dbm_module modules/mod_authz_dbm.so
    LoadModule authz_default_module modules/mod_authz_default.so
    LoadModule ldap_module modules/mod_ldap.so
    LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
    LoadModule include_module modules/mod_include.so
    LoadModule log_config_module modules/mod_log_config.so
    LoadModule logio_module modules/mod_logio.so
    LoadModule env_module modules/mod_env.so
    LoadModule ext_filter_module modules/mod_ext_filter.so
    ....
    خروجی بالا لیستی از ماژول هایی است که به صورت پیش فرض فعال شده اند اما اغلب مورد استفاده قرار نمیگیرند :
    mod_imap, mod_include, mod_info, mod_userdir, mod_autoindex

    برای غیرفعال کردن ماژول خاص میتوانید در ابتدای آن خط یک "#" اضافه کنید و سرویس آپاچی را ریستارت کنید.



    5 : اجرا کردن Apache با یوزر و گروه مجزا

    به صورت پیش فرض و با نصب پیش فرض آپاچی فعالیت خود را با یوزر nobody یا daemon اجرا میکند به دلایل امنیتی توصیه میشود که آپاچی را با اکانت non-privileged خودش اجرا کنیم. به طور مثال http-web

    ایجاد یوزر و گروه Apache :
    کد:
    # groupadd http-web
    # useradd -d /var/www/ -g http-web -s /bin/nologin http-web
    اکنون شما باید به آپاچی بگویید که با این یوزر جدید اجرا شود و برای این منظور نیاز دارید تا یک خط به فایل /etc/httpd/conf/httpd.conf اضافه کنید و سرویس را ریستارت نمایید.

    فایل /etc/httpd/conf/httpd.conf را با ادیتور vim باز کنید و به دنبال کلمه های “User” و “Group” بگردید که در اینجا شما باید username و groupname مورد نظر خودتان را مشخص کنید :
    کد:
    User http-web
    Group http-web


    6 : استفاده از “Allow” و “Deny” برای محدود کردن دسترسی به دایرکتوری ها

    ما میتوانیم دسترسی با دایرکتوری های را با استفاده از گزینه های “Allow” و “Deny” در فایل httpd.conf محدود کنیم. در این مثال ما میخواهیم دایرکتوری root را امن کنیم و برای این منظور باید محتوای زیر را به فایل httpd.conf اضافه کنیم :
    کد:
    <Directory />
       Options None
       Order deny,allow
       Deny from all
    </Directory>
    • Options “None” : این آپشن به یوزرها اجازه نمیدهد که هر ابزار اختیاری را فعال کنند.
    • Order deny, allow : این ترتیبی است که هر کدام از “Deny” و “Allow” اعمال میشوند در اینجا ابتدا “Deny” اعمال میشود و سپس “Allow
    • Deny from all : این گزینه درخواست از هر شخصی را به دایرکتوری root (روت) “Deny” میکند هیچ کسی قادر به دسترسی به دایرکتوری root نخواهد بود.




    7 : استفاده از ماژول های mod_security و mod_evasive برای امن کردن Apache

    در مباحث امنیتی آپاچی 2 ماژول “mod_security” و “mod_evasive” بسیار معروف و رایج هستند.

    Mod_Security
    این ماژول همانند یک فایروال برای اپلیکیشن های وب ما عمل میکند و به ما امکان مانیتور کردن آنلاین ترافیک را میدهد. همچنین به ما کمک میکند تا وب سایت مان یا وب سرورمان را از حملات brute force محافظت کنیم. شما میتوانید به آسانی این ماژول mod_security را روی سرورتان و با کمک دستورات نصب پکیج نصب نمایید.

    نصب mod_security روی Ubuntu/Debian
    کد:
    $ sudo apt-get install libapache2-modsecurity
    $ sudo a2enmod mod-security
    $ sudo /etc/init.d/apache2 force-reload

    نصب mod_security روی RHEL/CentOS/Fedora/
    کد:
    # yum install mod_security
    # /etc/init.d/httpd restart

    Mod_evasive
    این ماژول بسیار ماثر عمل میکند و یک درخواست برای پروسس میگیرد و آن را به نحوه احسن پردازش میکند. این ماژول از حملات DDOS attacks که بسیار مخرب هستند جلوگیری میکند. این قابلیت ماژول mod_evasive باعث میشود که این ماژول بتواند حملات HTTP brute force و Dos یا DDos را کنترل کند. این ماژول حملات را با 3 روش زیر شناسایی میکند :
    • اگر تعداد زیادی درخواست روی یک صفحه و در یک زمان کم (در ثانیه) وارد شود
    • اگر هر child process سعی به ایجاد بیشتر از 50 درخواست همزمان کند
    • اگر هر ip همچنان سعی در ایجاد درخواست های جدید کند در حالی که در blacklist باشد


    ماژول mod_evasive میتواند مستقیما از سورس نصب شود. پست زیر راهنمای نصب و راه اندازی این ماژول هاست که به شما کمک میکند تا این ماژول ها را در آپاچی خود راه اندازی کنید.

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



    8 : غیر فعال کردن Symbolic Link های زیر برای Apache

    به صورت پیش فرض آپاچی symlink ها را دنبال میکند ما میتوانیم این قابلیت را با FollowSymLinks به همراه Options directive غیر فعال کنیم و برای این امر باید خط زیر را به فایل اصلی کانفیگ اضافه کنیم :
    کد:
    Options -FollowSymLinks
    و در صورتی که user یا website خاص نیاز با فعال کردن FollowSymLinks داشته باشد میتوان به آسانی یک rule در فایل “.htaccess” سرورتان بنویسید :
    کد:
    # Enable symbolic links
    Options +FollowSymLinks
    توجه : برای فعال کردن نوشتن rule ها درون فایل “.htaccess” باید در فایل اصلی کانفیگ “AllowOverride All” حتما موجود باشد.



    9 : غیرفعال کردن Server Side Includes و CGI Execution

    ما میتوانیم server side includes (ماژول mod_include) و CGI execution را در صورت عدم نیاز غیر فعال کنید و برای این منظور ما نیاز داریم که فایل کانفیگ اصلی را ویرایش کنیم :
    کد:
    Options -Includes
    Options -ExecCGI
    همچنین میتوانیم مورد بالا را برای یک دایرکتوری خاص با استفاده از Directory tag انجام دهید. در مثال زیر ما includes و همچنین اجرای فایل CGI (یا CGI execution) را برای دایرکتوری “/var/www/html/web1” غیر فعال کنیم :
    کد:
    <Directory "/var/www/html/web1">
    Options -Includes -ExecCGI
    </Directory>
    یکسری مقدارهای دیگر هستند که میتوان با Options فعال یا غیر فعال کنیم :
    • Options All : برای فعال کردن همه option ها در یک آن از این گزینه استفاده میشود که مقدار پیش فرضش و در صورتی استفاده میشود که شما نخواهید مقدار خاصی را در فایل کانفیگ apache یا .htaccess مشخص کنید.
    • Options IncludesNOEXEC : این گزینه server side includes را فعال میکند بدون اینکه پرمیژن برای یک دستور یا فایل CGI را اجرا کند.
    • Options MultiViews : این گزینه content negotiated multiviews را با استفاده از ماژول mod_negotiation فعال میکند.
    • Options SymLinksIfOwnerMatch : این گزینه شبیه به FollowSymLinks میباشد. اما تنها زمانی که owner بین لینک و دایرکتوری اورجینالی که به آن لینک شده یکسان باشد follow خواهد شد.




    10 : محدود کردن سایز درخواست (Request)

    به صورت پیش فرض آپاچی روی سایز کلی در خواست http (یا http request) محدودیتی ندارد و در حقیقت نامحدود میباشد و زمانی که شما درخواست های بیشمار و طولانی را روی یک وب سرور باز میگذارید امکان اینکه شما قربانی حملات Denial of service باشید وجود دارد. ما میتوانیم سایز request های یک آپاچی “LimitRequestBody” را به همراه tag دایرکتوری محدود کنیم.

    شما میتوانید مقدار را به byte و از 0 (به معنای نامحدود) تا 2147483647 (معادل 2 گیگ) تعریف کنید که در یک request body تعریف میشود. شما میتوانید این محدودیت را مطابق با نیاز سایت خود تعریف کنید فرض کنید شما سایتی دارید که upload روی آن فعال هست و میخواهید سایز آپلود را برای یک دایرکتوری خاص محدود کنید.

    در مثال زیر user_uploads در حقیقت دایرکتوری هست که شامل فایل های آپلود شده توسط کاربران میباشد ما قصد داریم محدودیت 500K را برای این دایرکتوری لحاظ کنیم :
    کد:
    <Directory "/var/www/myweb1/user_uploads">
       LimitRequestBody 512000
    </Directory>



    11 : محافظت از حملات DDOS و برقراری امنیت

    اگر چه این درست است که ما نمیتوانیم به طور کامل وب سایت مان را از حملات DDOS محافظت کنیم ولی با یکسری دستورالعمل ها میتوانیم کنترلی روی آن داشته باشیم.
    • TimeOut : با این گزینه شما میتوانید میزان زمانی که سرور منتظر تکمیل event های خاص می ماند را تعریف کنید قبل از اینکه fail شوند. مقدار پیش فرض آن 300 ثانیه است. خوب است که این مقدار را روی سایت هایی که خوراک حملات DDOS هستند پایین بیاوریم. این مقدار به صورت کلی به نوع request که شما روی وب سایت تان دریافت میکنید بستگی دارد.

    توجه : این کار میتواند مشکلاتی را برای اسکریپت های CGI به همراه بیاورد.
    • MaxClients : این گزینه به شما این امکان را میدهد تا روی connection هایی که به صورت همزمان ایجاد میشوند محدودیت اعمال کنید. هر کانکشن جدید بعد از این محدودیت Queue خواهد شد که با Prefork و Worker و هر دو (MPM) در دسترس میباشد. مقدار پیش فرض آن 256 است.
    • KeepAliveTimeout : این گزینه در حقیقت میزان زمانیست که سرور برای یک subsequent request منتظر میماند قبل از اینکه کانکشن بسته شود. میزان پیش فرض آن 5 ثانیه میباشد.
    • LimitRequestFields : این گزینه به ما کمک میکند تا روی تعداد فیلدهای هدر request http که از طرف کلاینت ها accept میشوند محدودیت بگذاریم. میزان پیش فرض آن 100 میباشد. توصیه میشود که اگر حملات DDOS به علت تعداد زیاد header های request http اتفاق میافتد این مقدار را کمتر کنید.
    • LimitRequestFieldSize : این گزینه به ما کمک میکند تا روی سایز http request header محدودیت تعریف کنیم.





    12 : فعال کردن Log در Apache

    آپاچی به شما این امکان را میدهد تا log های آن را به صورت مستقل از لاگ سیستم عامل تان داشته باشید. بهتر است که لاگ apache را فعال کنید زیرا با این کار اطلاعات بیشتری همانند دستوراتی که توسط کاربران (کاربرانی که با وب سرور شما در ارتباط هستند) وارد شده برای شما فراهم میآورد.


    برای این منظور شما نیاز دارید که ماژول mod_log_config را include کنید. 3 نوع پارامتر مربوط به لاگ برای آپاچی موجود است :
    • TransferLog: ایجاد یک log file
    • LogFormat : مشخص کردن یک فرمت custom
    • CustomLog : ایجاد و فرمت یک log file


    همچنین میتوانید آنها را برای یک وب سایت خاص که روی آن Virtual hosting راه انداخته اید نیز استفاده کنید و برای این منظور باید آن را در قسمت تنظیمات virtual host مشخص کنید. برای مثال نمونه زیر تنظیمات virtual host وب سایت من میباشد که لاگ روی آن فعال شده :
    کد:
    <VirtualHost *:80>
    DocumentRoot /var/www/html/example.com/
    ServerName www.example.com
    DirectoryIndex index.htm index.html index.php
    ServerAlias example.com
    ErrorDocument 404 /story.php
    ErrorLog /var/log/httpd/example.com_error_log
    CustomLog /var/log/httpd/example.com_access_log combined
    </VirtualHost>


    13 : امن کردن Apache با استفاده از SSL Certificates

    در آخر شما میتوانید با استفاده از SSL certificates تمام ارتباطات را به شیوه encrypt شده روی اینترنت امن کنید فرض کنید شما وب سایتی دارید که افراد با استفاده از اطلاعات login شان به آن لاگین میکنند و یا اینکه وب سایت E-Commerce دارید که افراد جزییات بانکی شان یا جزییات کارت اعتباری/عابر برای خرید محصولات را وارد میکند به صورت پیش فرض وب سرور شما این جزییات را به فرمت ساده (plain-text) ارسال میکند اما اگر شما در وب سایت تان از SSL certificates استفاده کنید آپاچی تمامی این اطلاعات را به فرمت encrypt شده (encrypted - text) ارسال خواهد کرد.

    شما میتوانید purchase SSl certificates از provider های متفاوت ssl همچون namecheap.com خریداری کنید. اگر یک وب سایت خیلی کوچک دارید و نمیخواهید هیچ SSL certificate خریداری کنید میتوانید یک Self signed certificate به وب سرورتان اختصاص دهید. apache از ماژول mod_ssl برای پشتیبانی از SSL certificate استفاده میکند :
    کد:
    # openssl genrsa -des3 -out example.com.key 1024
    # openssl req -new -key example.com.key -out exmaple.csr
    # openssl x509 -req -days 365 -in example.com.com.csr -signkey example.com.com.key -out example.com.com.crt
    به محض اینکه certificate شما ایجاد و sign شد نیاز دارید که آن را به تنظیمات آپاچی اضافه کنید. فایل کانفیگ اصلی را با استفاده از ادیتور vim باز کنید و خطوط زیر را به آن اضافه کنید و در نهایت سرویس را ریستارت کنید :
    کد:
    <VirtualHost 172.16.25.125:443>
            SSLEngine on
            SSLCertificateFile /etc/pki/tls/certs/example.com.crt
            SSLCertificateKeyFile /etc/pki/tls/certs/example.com.key
            SSLCertificateChainFile /etc/pki/tls/certs/sf_bundle.crt
            ServerAdmin ravi.saive@example.com
            ServerName example.com
            DocumentRoot /var/www/html/example/
            ErrorLog /var/log/httpd/example.com-error_log
            CustomLog /var/log/httpd/example.com-access_log common
    </VirtualHost>
    مرورگر خود را باز کنید و دامین تان برای مثال https://example.com را تایپ کنید و سپس شما قادر خواهید بود که self-signed certificate جدید تان را مشاهده کنید.


    موارد بالا ترفند های کمی از برقراری امنیت برای وب سرور آپاچی هستند برای ایده ها و ترفند های امنیتی مفید بیشتر لینک آنلاین Apache HTTP Server را مشاهده کنید.

    موفق باشید
    محمد هابیلی
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 01-20-2021, 05:53 PM.

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

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

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