مدیریت سرورمقالات وب
چگونه 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 را در سرور مجازی لینوکس با هم مرور کردیم.