Налаштування безпеки сайтів на VPS
Ви придбали виділений або віртуальний сервер або зліпили свій у домашніх умовах. І тепер настав час задуматися про безпеку сайтів, оскільки пролом в одному з них може наразити на небезпеку і всі інші.
На хостингу ці проблеми вирішує сам хостер, а на власному сервері це вже завдання адміністратора. І навіть якщо у Вас хостинг з попередньою установкою, то ймовірність того, що на ньому обмежені права для кожного користувача та сайту малоймовірна. Швидше за все Ваш провайдер обмежився встановленням стандартних програм vsftpd, Apache, nginx, php, mysql і тд і тп.
Вважатимемо, що необхідний комплект на сайті встановлений і настав час подбати про безпеку. Якщо ж ні, то знаходимо відповідну інструкцію з «налаштування nginx як front-end до apache» і повертаємося до питання безпеки.
Безпеку будуватимемо з наступних принципів:
Перше створення користувачів з оболонкою /bin/false на прикладі vsftpd і proftpd. Це обмежить виконання скриптів у межах своєї директорії.
Другий поділ користувачів на сайті. Ми зможемо запускати наші сайти від імені різних користувачів, і доступ до одного з них, аж ніяк не наразить на небезпеку інший.
Почнемо з налаштування proftpd. Для цього відкриємо конфігураційний файл ProFTPd /etc/proftpd/proftpd.conf
Тепер розглянемо приклад на vsftpd. Конфігураційний файл vsftpd /etc/vsftpd.conf
У файлі /etc/shells додамо оболонку
Додавати користувача будемо з оболонкою /bin/false, і ключем -m для створення домашньої директорії одночасно при додаванні користувача, і відразу заборонимо запис у кореневу директорію, тому що всі необхідні директорії та файли у нас прописані вище/etc/skel
Поділ користувачів та встановлення fast-cgi
Для поділу користувачів існує як мінімум 2 реалізації: suexec та apache2-mpm-itk. Для роботи через suexec потрібно запускати php додаток для кожного користувача окремо, на відміну від аpache2-mpm-itk, який запускається через mod_php один раз для всіх процесів. Тим не менш, я упущу налаштування аpache2-mpm-itk, так як запуск одного процесу не дає достатньої гнучкості, і зокрема запуску окремого php.ini, а втрату продуктивності можна компенсувати використанням Fast-CGI. Звичайно, тій швидкості, що дає php_mod отримати не вдасться, зате вдасться заощадити ресурси системи.
Для початку встановимо необхідні модулі. Передбачається, що сервер у Вас вже встановлений та налаштований.
На прикладі Ubuntu
Якщо Apache2 було встановлено з PHP5 у вигляді модуля Apache, відключаємо його:
Включимо такі модулі, якщо не включені
Сценарій для виконання PHP розміщується в коревій директорії Suexec, якою за умовчанням є /var/www, проте перевірити це допоможе наступна команда
У ній створимо директорію fcgi, де і зберігатимуться наші сценарії та налаштування php для кожного користувача та визначимо вкладену папку безпосередньо для власника
Внутни створимо файл php5, де пропишемо сценарій для виконання php
У /var/www/fcgi/login/php5 додамо запис
Лінія PHPRC містить каталог, де знаходиться файл php.ini (наприклад, /var/www/fcgi/login/ перекладається /var/www/fcgi/login/php.ini). PHP_FCGI_MAX_REQUESTS відповідає за кількість запитів, які оброблять один процес. PHP_FCGI_CHILDREN вказує кількість дочірніх процесів, які запускаються PHP для обробки вхідних запитів. php5 повинен бути виконуваним, і він (і йогокаталоги) повинні належати користувачеві веб-сайту та групи.
Тепер перенесемо дефолтовий файл php.ini з дефолтової директорії /etc/php5/cgi/ в нашу /var/www/fcgi/login/php5, і налаштуємо основні параметри. Для кожного сайту вони будуть індивідуальні, але на основні слід одразу звернути увагу
Для коригування шляхів у файлі /etc/apache2/mods-available/fcgid.conf додайте
а також встановіть параметр FcgidMaxRequestLen, вказавши максимальний розмір запиту
Також швидкості додасть memcached та xcache
Захист від різних ін'єкцій
Для додаткової безпеки встановимо розширення mod_security
Перейменуємо конфігураційний файл
Тепер відкриємо його та змінимо конфігурації
Підвантажимо базові правила, для чого між IfModule security2_module> у файлі /etc/apache2/mods-enabled/mod-security.conf додамо
Захист від DOS, DDOS та FLUD атак, а також перебору паролів
Встановимо mod-evasive для Apache
та змінимо конфігурації у файлі /etc/apache2/mods-available/mod-evasive.conf
Для захисту від перебору паролів встановимо Fail2ban
Перезапускаємо apache, nginx і memcached
Хардкорна конфа за С++. Ми запрошуємо лише профі.