مدیریت سرورمقالات وب

چگونه LAMP سرور را امن کنیم؟

پشته LAMP به معنای لینوکس، آپاچی، MySQL/MariaDB و PHP/Python/Perl است که ترکیب بسیار محبوبی از نرم افزارهای متن باز و رایگان برای اجرای میلیون ها سایت می باشد.  اگرچه بیشتر افراد از پشته LEMP استفاده می کنند اما تعداد زیادی از کاربران هم هستند که برای اجرای پروژه های خود به سراغ LAMP می روند. در حقیقت، بیش از 30 درصد سایت های فعال امروزی  بر روی LAMP اجرا می شود. این پشته یکی از موارد قابل اعتماد و بسیار مناسب برای اجرای اپلیکیشن های وب با عملکرد بالاست. در این مقاله سعی می کنیم نحوه امن  کردن این پشته بر روی سرور مجازی لینوکس را با هم مرور کنیم. پس همراه وب ایده باشید.

 به روزرسانی های خودکار را فعال کنید:

باید به خاطر داشته باشید که پشته LAMP بر اساس لینوکس است و کل جامعه متن باز آن بر روی بهبود شرایط موجود کار می کنند. بر روی سرور مجازی اوبونتو، همه به روزرسانی های  موجود را می توان به صورت خودکار دریافت کرد.  بعد از اینکه قابلیت به روزرسانی خودکار را فعال کردید دیگر مجبور نخواهید بود به روزرسانی های مورد نیاز برای سرور مجازی را به صورت دستی انجام دهید. برای فعال کردن به روزرسانی و ارتقا خودکار باید بسته unattended-upgrades را نصب کنید. برای اینکار از دستور زیر کمک بگیرید:

sudo apt-get install unattended-upgrades

 

برای پیکربندی طبقه بندی پکیج هایی که باید به طور خودکار به روزرسانی شوند می توانید فایل /etc/apt/apt.conf.d/50unattended-upgrades را ویراش کنید.

 فایروال را  پیکربندی کنید:

پیکربندی مناسب فایروال یکی از موارد مهم برای امنیت سرور مجازی شماست. UFW  ابزار پیکربندی فایروال پیش فرض برای اوبونتوست و  غیر فعال شده است. برای فعال کردن این فایروال می توانید از دستور زیر استفاده کنید:

sudo ufw enable

 

دسترسی به سرویس های اصلی همچون آپاچی و OpenSSH را به کمک دستور زیر فعال کنید:

sudo ufw allow 22

sudo ufw allow 80

sudo ufw allow 443

 

فعال کردن دسترسی به سایر سرویس ها بسیار اسان است. کافیست شماره پورت را در نمونه های بالا با پورت سرویس مدنظر خود جایگزین سازید. قوانین فایروال بعد از ریبوت اعمال خواهد شد.

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

اگر سرویس های فعالی دارید که از آن ها استفاده نمی کنید می توانید غیر فعالشان کنید. به عنوان مثال اگر سرویسی همچون Dovecot را دارید که بر روی سرور مجازی اجرا می شود اما اصلا کاربردی برایتان ندارد می توانید به کمک دستور زیر آن را غیر فعال کنید:

sudo systemctl stop dovecot.service

sudo systemctl disable dovecot.service

 

Fail2ban را بر روی سرور خود نصب کنید:

همانطور که می دانید Fail2ban سرویسی است که فایل های لاگ را بررسی می کند تا لاگین هایی که با موفقیت انجام نشده اند را پیدا کند. بعد از پیدا کردن این موارد، ای پی آدرس مربوطه بلاک می شود.  اگر از مکانیسم های تایید هویت دو مرحله ای یا خصوصی استفاده نمی کنید این سرویس برایتان بسیار مفید خواهد بود. برای نصب این سرویس دستور زیر را وارد کنید:

sudo apt-get install fail2ban

 

از فایل پیکربندی پیش فرض کپی بگیرید تا بتوانید تغییرات را بدون دردسر ایجاد نمایید:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

 

فایل Jail.local را ویرایش کنید:

sudo nano /etc/fail2ban/jail.local

 

بلوک SSHD باید شبیه زیر باشد:

[sshd]

enabled  = true

port     = ssh

filter   = sshd

logpath  = /var/log/auth.log

maxretry = 5

bantime = 600

 

فایل را ذخیره کنید و سرویس را ریستارت نمایید تا تغییرات اعمال شود:

sudo systemctl restart fail2ban.service

 

این سرویس را به گونه ای تنظیم کنید که بتواند در بوت سیستم اجرا شود:

sudo systemctl enable fail2ban.service

 

آپاچی را امن کنید:

پیکربندی های پیش فرض آپاچی اطلاعات حساسی را در اختیار افراد قرار می دهد.  پنهان کردن این اطلاعات می تواند برایتان بسیار مفید باشد. یک فایل پیکربندی برای تنظیمات جدید ایجاد کنید. برای اینکار از دستور زیر کمک بگیرید:

sudo nano /etc/apache2/conf-available/custom.conf

 

محتوای زیر را در فایل پیست کنید:

ServerTokens Prod

ServerSignature Off

TraceEnable Off

Options all -Indexes

Header unset ETag

Header always unset X-Powered-By

FileETag None

 

ماژول هدر آپاچی را به کمک دستور زیر فعال کنید:

sudo a2enmod headers

 

پیکربندی ها را فعال سازید:

sudo a2enconf custom.conf

 

آپاچی را ریستارت کنید:

sudo systemctl restart apache2.service

 

mod_security را نصب و فعال سازید:

همانطور که می دانید mod_security فایروال وب اپلیکیشن است و می توان آن را به عنوان ماژول اضافی برای آپاچی نصب کرد.  این گزینه برای محافظت از سرور در برابر حملات متعدد به کار می رود. برای نصب و فعالسازی آن از دستور زیر کمک بگیرید:

sudo apt-get install libapache2-modsecurity

sudo a2enmod security2

 

بعد از اینکه نصب شد باید ماژل را پیکربندی کنید و CSR را فعال نمایید:

sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

 

حالا فایل /etc/modsecurity/modsecurity.conf باز کنید و تنظیمات زیر را به آن اضافه کنید یا ویرایش نمایید:

SecRuleEngine On

SecResponseBodyAccess Off

SecRequestBodyLimit 8388608

SecRequestBodyNoFilesLimit 131072

SecRequestBodyInMemoryLimit 262144

 

فایل را ذخیره کنید و ببندید. CRS فعلی را حذف کنید و به کمک دستور زیر OWASP CRS را دانلود نمایید:

sudo rm -rf /usr/share/modsecurity-crs

sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /usr/share/modsecurity-crs

cd /usr/share/modsecurity-crs

sudo mv crs-setup.conf.example crs-setup.conf

 

فایل /etc/apache2/mods-enabled/security2.conf file را ویرایش کنید. فایل باید شبیه فایل زیر باشد:

<IfModule security2_module>

     SecDataDir /var/cache/modsecurity

     IncludeOptional /etc/modsecurity/*.conf

     IncludeOptional "/usr/share/modsecurity-crs/*.conf"

     IncludeOptional "/usr/share/modsecurity-crs/rules/*.conf

</IfModule>

 

حالا آپاچی را ریستارت کنید تا تغییرات اعمال شود:

sudo systemctl restart apache2.service

 

mod_evasive را نصب و فعال کنید:

mod_evasive ماژول آپاچی است که می توان از آن برای محافظت از وب سرور در برابر DOS، حملات DDOS و بروت فورس استفاده کرد. برای نصب آن بر روی سرور مجازی، دستور زیر را اجرا کنید:

sudo apt-get install libapache2-mod-evasive

 

فایل پیکربندی /etc/apache2/mods-enabled/evasive.conf  را باز کنید و تنظیمات زیر را انجام دهید:

<IfModule mod_evasive20.c>

     DOSPageCount        5

     DOSSiteCount        50

     DOSPageInterval     1

     DOSSiteInterval     1

     DOSBlockingPeriod   600

     DOSLogDir           "/var/log/mod_evasive"

</IfModule>

 

فایل را ذخیره کنید و ببندید. یک دایرکتوری برای فایل لاگ ایجاد کنید:

sudo mkdir /var/log/mod_evasive

sudo chown -R www-data: /var/log/mod_evasive

 

آپاچی را به کمک دستور زیر ریستارت کنید:

sudo systemctl restart apache2.service

 

MYSQL را امن سازید:

اولین کاری که برای امن کردن این گزینه باید انجام دهید اجرای اسکریپت mysql_secure_installation  است.

sudo mysql_secure_installation

 

این اسکریپت به شما کمک می کند وظایف امنیتی مهم همچون تنظیم پسورد روت، غیر فعالسازی لاگین روت و حذف کاربران ناشناس را انجام دهید.

دسترسی ریموت به MYSQL را غیر فعال کنید:

اگر بر روی سرور MYSQL خود کارهای ریموت را انجام نمی دهید بهتر است این دسترسی را غیر فعال سازید.  شما می توانید اینکار را با ویرایش فایل /etc/mysql/mysql.conf.d/mysqld.cnf  و تغییر bind-address  به 127.0.0.1 انجام دهید:

bind-address = 127.0.0.1

 

سرویس را ریستارت کنید تا تغییرات اعمال شود:

sudo systemctl restart mysql.service

 

کاربران MYSQL جداگانه ای ایجاد کنید:

موضوع دیگری که باید مدنظر داشته باشید ایجاد کاربر جداگانه برای هر پایگاه داده و اپلیکیشن است: به عنوان کاربر روت به MYSQL وارد شوید:

mysql -u root -p

 

شما می توانید پایگاه داده MYSQL را ایجاد کنید و همه دسترسی ها را به کمک دستور زیر به کاربر جدید بدهید:

mysql> CREATE DATABASE new_db;

mysql> GRANT ALL PRIVILEGES on new_db.* to 'new_user'@'localhost' identified by 'PaSsW0rD';

mysql> FLUSH PRIVILEGES;

mysql> EXIT

 

حالا می توانید پایگاه داده جدید و کاربر را برای اپلیکیشن خود به کار ببرید.

LOCAL INFILE را غیر فعال کنید:

اگر به طور واضح از این گزینه استفاده نمی کنید آن را غیر فعال نمایید. فایل پیکربندی MYSQL را ویرایش کنید و خط زیر را  به بخش زیرین بلوک MYSQLD اضافه نمایید:

local-infile=0

 

سرویس MYSQL را ریستارت کنید.

PHP را امن تر نمایید:

اگر مراحل بالا را انجام داده اید، باید سروز مجازی تان امن شده باشد. آخرین بخش امن کردن PHP است. موقعیت فایل  PHP ini را بیابید. برای اینکار از دستور زیر کمک بگیرید:

php --ini | grep "Loaded Configuration File"

 

همه  تغییرات در این فایل اعمال خواهد شد.

اطلاعات اصلی PHP را پنهان کنید:

اولین مرحله پنهان کردن اطلاعات فراهم شده توسط PHP است که برخی از هکرها از آن استفاده می کنند. فایل Php.ini را باز کنید و تغییرات زیر را در آن اعمال نمایید:

expose_php = Off

display_errors = Off

mail.add_x_header = Off

 

فایل را ببندید و خارج شوید:

sudo systemctl restart apache2.service

 

PHP functions های خطرناک را غیر فعال کنید:

بخش disable_functions  به شما اجازه می دهد برخی از فانکشن هایی که می تواند برای سرور مجازی لینوکس مضر باشد را غیر فعال کنید. این گزینه را در فایل php.ini به صورت زیر ویرایش کنید:

disable_functions = show_source,system,shell_exec,passthru,exec,phpinfo,popen,proc_open,allow_url_fopen,curl_exec,curl_multi_exec

 

دستور زیر را اجرا کنید:

allow_url_fopen=Off

allow_url_include=Off

 

آپلود فایل ها را محدود سازید:

اگر از قابلیت آپلود فایل ها استفاده نمی کنید بهتر است این گزینه را محدود سازید. فایل php.ini را باز کنید و تنظیمات زیر را انجام دهید:

file_uploads=Off

 

در مواردی که از این قابلیت استفاده می کنید می توانید از دستور زیر کمک بگیرید:

file_uploads=On

upload_max_filesize=1M

 

حالا آپاچی را ریستارت کنید.

 زمان اجرای حداکثری را تنظیم کنید:

فایل PHP.ini را باز کنید  و تغییرات زیر را اعمال نمایید:

max_execution_time = 30

max_input_time = 30

memory_limit = 40M

 

open_basedir را فعال کنید:

این گزینه به شما اجازه می دهد موقعیتی که از آن PHP به فایل های شما دسترسی دارد را تعیین نمایید. فایل php.ini  را  ویرایش کنید و موقعیت را تنظیم نمایید:

open_basedir="/path/to/the/directory/"

 

فراموش نکنید که باید آپاچی را ریستارت کنید.

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

Rate this post
برچسب ها

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

بستن