تنظیمات امنیتی آپاچی
آپاچی وب سرور مخصوص سرورهای لینوکس میباشد که به دلیل رایگان بودن و متن باز بودن آن یکی از محبوبترین وب سرورها میباشد. با کانفیگ مناسب آپاچی میتوانید سرعت و امنیت بالایی را برای وب سایت های خود ایجاد نمایید. موارد زیر برای افزایش امنیت آپاچی پیشنهاد میشود.
پیکربندی ssl
می توان از طریق سایت زیرصحت پیکربندی اس اس ال را متوجه شد.ssl checker
نحوه مخفی کردن نسخه Apache و خطاها OS
وقتی Apache را از طریق سورس یا package manger مانند yum نصب می کنید ، نسخه وب سرور Apache شما با نام سیستم عامل سرور شما در Errors نمایش داده می شود. همچنین اطلاعات مربوط به ماژول های Apache که در سرور شما نصب شده اند را نشان می دهد.
در تصویر بالا می بینید که نسخه Apache و نام سیستم عامل نصب شده در سرور شما را نشان می دهد. این می تواند یک تهدید امنیتی بزرگ برای وب سرور و همچنین لینوکس شما باشد. برای اینکه Apache این اطلاعات را نشان ندهد ، باید در فایل پیکربندی اصلی Apache تغییراتی ایجاد کنیم.
فایل پیکربندی را با ویرایشگر vim باز کنید و «ServerSignature» را جستجو کنید ، که به طور پیش فرض روشن است. ما باید این ServerSignature را خاموش کنیم و خط دوم «ServerTokens Prod» به Apache می گوید که در هر درخواست صفحه فقط Apache را به عنوان محصول در هدر پاسخ سرور برگرداند ، این سیستم عامل ، اطلاعات نسخه اصلی و جزئی را سرکوب می کند.
# vim /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora) # vim /etc/apache2/apache2.conf (Debian/Ubuntu) #### ServerSignature Off ServerTokens Prod ### # service httpd restart (RHEL/CentOS/Fedora) # service apache2 restart (Debian/Ubuntu)
بعد از اعمال مراحل بالا درخواست درصورت خطا به شکل زیر میشود
همچنین میتوان داده ی اشتباهی هم وارد کرد مثلا در زیر ما سرور را به کاربر از نوع انجینیکس با ورژن خاص نشان داده ایم در صورتی که سرور آپاچی است. بعضا نیاز به نصب این ماژول libapache2-modsecurity نیز هست که پایین تر آن را نصب و فعال سازی کردیم.
SecServerSignature "nginx/1.2.1 (Unix)"
غیرفعال سازی لیست فهرست یا Directory Listing
به طور پیش فرض Apache تمام محتوای دایرکتوری ریشه Document را در غیاب فایل index لیست می کند. لطفاً تصویر زیر را ببینید
ما می توانیم لیست فهرست را با استفاده از Options در فایل پیکربندی یک دایرکتوری خاص را خاموش کنیم. بدین منظور باید یک entry در فایل httpd.conf یا apache2.conf ایجاد کنیم. مثلا
<Directory /var/www/html> Options -Indexes </Directory>
به روزرسانی منظم آپاچی
انجمن توسعه دهندگان Apache به طور مداوم روی مسائل امنیتی کار می کند و نسخه به روز شده آن را با گزینه های امنیتی جدید منتشر می کند. بنابراین همیشه توصیه می شود از آخرین نسخه Apache به عنوان وب سرور خود استفاده کنید.
برای بررسی نسخه Apache: می توانید نسخه فعلی خود را با دستور httpd -v بررسی کنید.
اگر برنامه خاصی روی سرور ندارین که فقط روی سیستم عامل خاص یا هسته خاص کار کند حتما توصیه می شه که هسته و سیستم عامل خود را به جدیدترین نسخه پایدار بروزرسانی کنید.
غیرفعال سازی ماژول های غیرضروری
توصیه می شود آن دسته از ماژولهایی که در حال حاضر استفاده نمی شود را غیرفعال کنید. با استفاده از دستور زیر می توانید تمام ماژول های کامپایل شده وب سرور را لیست کنید.
# 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 .... or sudo apache2ctl -M
در بالا لیستی از ماژول هایی است که به طور پیش فرض فعال می شوند اما اغلب به آنها نیازی نیست: mod_imap، mod_include، mod_info، mod_userdir، mod_autoindex. برای غیرفعال کردن ماژول خاص ، می توانید «#» را در ابتدای آن خط وارد کرده و سرویس را دوباره راه اندازی کنید.
اجرای Apache با User و Group جداگانه
با نصب پیش فرض ، Apache فرآیند خود را با یوزر nobody یا daemon اجرا می کند. به دلایل امنیتی توصیه می شود Apache را در حساب non-privileged خود اجرا کنید. به عنوان مثال: http-web.
groupadd http-web useradd -d /var/www/ -g http-web -s /bin/nologin http-web
اکنون شما باید به Apache بگویید که با این کاربر جدید اجرا شود و برای انجام این کار ، باید در etc/httpd/conf/httpd.conf/ تغییراتی را وارد کرده و سرویس را مجدداً راه اندازی کنیم.
User http-web Group http-web
استفاده از Allow و Deny برای محدود کردن دسترسی به دایرکتوری ها
ما می توانیم دسترسی به دایرکتوری ها را با گزینه های «Allow» و «Deny» در فایل تنظیمات httpd.conf محدود کنیم. در اینجا در این مثال ، با تنظیم موارد زیر در پرونده httpd.conf ، دایرکتوری root را ایمن خواهیم کرد.
<Directory /> Options None Order deny,allow Deny from all </Directory>
Options None – این گزینه به کاربران امکان نمی دهد هیچ ویژگی اختیاری را فعال کنند. Order deny, allow – ترتیب اجرای دستورالعمل های «Deny» و «Allow» است. در اینجا ابتدا «Deny» و سپس «Allow» اجرا خواهد شد. Deny from all – با این کار همه درخواست به دایرکتوری ریشه رد می شود ، هیچ کس نمی تواند به دایرکتوری ریشه دسترسی پیدا کند.
استفاده از ماژول های mod_security و mod_evasive برای امنیت Apache
این دو ماژول «mod_security» و «mod_evasive» از نظر امنیتی ماژول های بسیار محبوب Apache هستند.
Mod_security
mod_security به عنوان فایروال برای برنامه های وب ما کار می کند و به ما امکان می دهد تا بر اساس زمان واقعی ترافیک را کنترل کنیم. همچنین به ما کمک می کند تا از وب سایت ها یا وب سرور خود در برابر حملات وحشیانه محافظت کنیم.
Install mod_security on Ubuntu/Debian $ sudo apt-get install libapache2-modsecurity $ sudo a2enmod mod-security $ sudo /etc/init.d/apache2 force-reload Install mod_security on RHEL/CentOS/Fedora/ # yum install mod_security # /etc/init.d/httpd restart
Mod_evasive
این ماژوا بسیار کارآمد کار است و با پردازش یک درخواست از حملات DDOS جلوگیری می کند. این ویژگی ما را قادر به کنترل HTTP brute force و حمله Dos یا DDos میکند. این ماژول حملات را با سه روش تشخیص می دهد.
-
اگر تعداد زیادی درخواست در چند ثانیه به یک صفحه ارسال شود
-
اگر هر پردازش child سعی در ساختن بیش از 50 درخواست همزمان کند.
-
اگر هر IP در هنگام قرار گرفتن موقت در لیست سیاه همچنان در تلاش برای درخواست جدید باشد.
apt-get install libapache2-mod-evasive Create the log directory for mod_evasive mkdir -p /var/log/apache2/evasive chown -R www-data:root /var/log/apache2/evasive vi /etc/apache2/mods-available/mod-evasive.load --> output LoadModule evasive20_module /usr/lib/apache2/modules/mod_evasive20.so <IfModule mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 5 DOSSiteInterval 1 DOSBlockingPeriod 10 DOSLogDir "/var/log/apache2/evasive" DOSEmailNotify [email protected] DOSWhitelist IPADDRESS_RANGE_FOR_WHITE_LISTING </IfModule> and restart apache: /etc/init.d/apache2 restart or sudo systemctl restart apache2
غیرفعال سازی فالو کردن لینک های Symbolic یا نرم
به طور پیش فرض Apache لینکهای Symbolic را دنبال می کند ، ما می توانیم این ویژگی را به کمک FollowSymLinks در دستورالعمل Options خاموش کنیم. و برای این کار باید ورودی زیر را در پرونده تنظیمات اصلی وارد کنیم.
Options -FollowSymLinks
و اگر هر کاربر یا وب سایت خاصی نیاز به فعال کردن FollowSymLinks داشته باشد ، می توانیم به سادگی یک rule را در فایل «.htaccess» برای آن وبسایت و یا دایرکتوری خاص ایجاد کنیم.
غیرفعال سازی includes و CGI دز سمت سرور
در صورت عدم نیاز می توانیم در سمت سرور شامل mod_include و CGI execution را خاموش کنیم و برای این کار باید فایل پیکربندی اصلی را اصلاح کنیم.
Options -Includes Options -ExecCGI
محدود سازی اندازه درخواست
به طور پیش فرض Apache محدودیتی در اندازه کل درخواست HTTP ندارد یعنی نامحدود است و هنگامی که درخواست های بزرگ را روی وب سرور مجاز می کنید ممکن است قربانی حملات DOS شوید. ما می توانیم اندازه درخواست ها را با دستورالعمل LimitRequestBody محدود کنیم.
می توانید مقدار آن را به صورت بایت از 0 (نامحدود) تا 2147483647 (2 گیگابایت) تنظیم کنید. شما می توانید این محدودیت را با توجه به نیاز سایت خود تعیین کنید ، فرض کنید سایتی دارید که در آن امکان بارگذاری وجود دارد و می خواهید اندازه بارگذاری را برای یک دایرکتوری خاص محدود کنید.
در اینجا در این مثال ، user_uploads یک دایرکتوری است که شامل فایل های بارگذاری شده توسط کاربران است. ما برای این محدودیت 500K در نظر گرفته ایم.
<Directory "/var/www/myweb1/user_uploads"> LimitRequestBody 512000 </Directory>
در انتها برای چک کامل وبسایت میتوانید از آدرس زیر استفاده کنیدو که باعث میشودwebsite Checker.
راضی باشین. یا حق