Посилення безпеки веб-стеку (LAMP) за допомогою ізоляції мережевих служб для віртуальних машин
13:19, 26.03.2024
Веб-стек - це набір різноманітного програмного забезпечення з відкритим вихідним кодом, такого як мова програмування серверної частини, операційна система, сервер баз даних та веб-сервер. Найпоширеніший стек називається LAMP. Ця назва є скороченням від Linux, сервера Apache, MySQL та PHP (в деяких випадках це може бути Python або Perl). З міркувань безпеки найкращим варіантом є запуск різних мережевих сервісів на окремих віртуальних машинах або системах. Очевидно, що в такій системі потенційні зловмисники не зможуть зламати багато сервісів.
У цій статті ми надамо найкориснішу інформацію про налаштування рішення, яке може обслуговувати кешування, динамічний/статичний контент та базу даних, функціонуючи на віртуальних машинах або окремих серверах.
LAMP: Традиційна конфігурація VS розділена конфігурація
Традиційна конфігурація сервера, коли всі сервіси знаходяться на одній машині, є надзвичайно ризикованою в наш час. Існує дуже багато хакерів, які можуть отримати доступ до вашого сервера і всіх даних на ньому з однієї спроби. Щоб виключити такі неприємності, краще розглянути варіант з розділеною конфігурацією.
Розділена конфігурація розділяє кеш, базу даних та інші частини на одному сервері. Переваги такого підходу полягають у наступному:
- Оптимізація
- Безпека
- Простота використання
- Зростання та масштабованість
- Спрощення моніторингу
Ролі для кожної віртуальної машини/сервера в архітектурі Split LAMP
У наведеному нижче прикладі описано різні віртуальні машини, які можуть мати відношення до блогів, користувацьких додатків або веб-сайтів на основі Drupal.
Сервер/ВМ | Характеристика | Програмне забезпечення |
VM0 | Такий вузол/ВМ повинен мати 2 інтерфейси - приватний і публічний. Публічний інтерфейс допомагає користувачам підключатися до сайту. Приватний використовується для мережевого трафіку між вузлами. | Netfilter як брандмауер і haproxy/nginx як зворотний проксі |
VM1 | Цей вузол використовується для обслуговування таких статичних файлів, як css, images або js. Файли повинні зберігатися на сервері VM5. | Tux, Linux nfs клієнт, lighttpd та nginx |
VM2 | Цей вузол використовується для динамічних сторінок. Наприклад, на цій віртуальній машині можуть знаходитися кастомний додаток та встановлений WordPress. Файли програми зберігаються на VM5. | Linux nfs клієнт та Apache 2 з python/php5/fastcgi/perl/etc |
VM3 | Вузол використовується для кешування об'єктів і даних в оперативній пам'яті. Це зменшує частоту звернень до зовнішніх даних і таким чином прискорює роботу. | Redis або Memcached |
VM4 | Ця частина відповідає за зберігання даних mysql або postgresql в СУБД. | Сервер MySQL |
VM5 | Цей вузол функціонує як розподілена файлова система. На цьому сервері зберігаються лише такі дані, як зображення, php/python файли, css, js. Для доступу до даних, що запитуються з VM2 та VM1, використовується команда mount. | СерверNFSv4 |
Порт висхідного зв'язку або маршрутизатор провайдера | VM0 підключається до Інтернету через лінію зв'язку, надану провайдером. | Site-specific |
Фактичне налаштування сервера
- Встановлення та налаштування NFS-сервера.
- Встановлення та налаштування сервера MySQL.
- Встановлення та налаштування сервера Memcached.
- Встановлення та налаштування сервера Apache.
- Встановлення та налаштування сервера Lighttpd.
- Встановлення та налаштування сервера Nginx.
Переваги розділення служб LAMP з точки зору продуктивності та безпеки
Деякі з основних переваг розділення служб LAMP включають в себе наступні:
- Масштабування. З окремими сервісами набагато легше масштабувати всю систему. Наприклад, якщо у вас лише один сервер/віртуальна машина, то стратегія має бути дуже складною, щоб охопити кожен маленький компонент. Ви також повинні враховувати баланс навантаження, який суттєво впливає на характеристики продуктивності.
- Розгортання. Як правило, ці вузли є незмінними. Це означає, що розгортання відбувається шляхом створення нового вузла, а не додавання чогось до вже існуючого. Процес значно спрощується, коли база даних і додаток знаходяться в різних вузлах.
- Безпека. У разі будь-якого ризику атак, ви можете втратити доступ до одного вузла, а не до всіх одразу, що значно мінімізує проблеми.
Керування взаємодією між компонентами Split LAMP
Для більш практичного розуміння взаємодії між компонентами, давайте створимо реальний приклад і пояснимо все відповідно до нього. Наприклад, ім'я сайту www.ex.com, він відноситься до IPv4-адреси 102.23.1.4 і призначений на eth0. Внутрішня IP-адреса - 837.234.1.1 і вона призначена для eth1. Всі сервіси знаходяться в локальній мережі, а веб-сайт працює через реверсний проксі.
Правила апаратного брандмауера дозволяють тільки 102.23.1.4 на портах 443 і 80. Решта портів заблоковані. Кожен вузол дозволяє доступ до необхідних портів і запускає iptables. Пул серверів визначається наступним чином:
upstream mybackend {
server 837.234.1.10:80; #server1
server 837.234.1.11:80; #server2
....
..
..
server 837.234.1.100:80; # server100
}
Сервер lighttpd та Apache можуть отримати доступ до файлів на VM05 за допомогою nfs-сервера. На сервері Apache налаштовано PHP. PHP-додаток налаштовано на зв'язок з базою даних на ВМ04. Кешування SQL через сервер Memcached на VM03 використовується в додатку PHP.
Додатково можна встановити зворотній проксі на DMZ та інших серверах у брандмауері, щоб підвищити рівень безпеки. Таким чином, це дозволить максимізувати вартість проекту.
Підсумки
Щоб значно підвищити рівень безпеки веб-додатку, важливо розгорнути мережу віртуальних машин для кожного рівня цього стеку. Якщо говорити про бюджет на таке вдосконалення, то, звісно, це не дешевий варіант, адже обслуговування та налаштування системи може влетіти в копієчку. Незважаючи на вартість стратегії, покращення безпеки є величезним і тому вигідним у будь-якому випадку. Крім того, віртуалізація сервера робить процеси відновлення, резервного копіювання та міграції на інше обладнання набагато швидшими та простішими.
Завдяки двійковій природі віртуальних машин у файловій системі хоста, їх набагато простіше перенести на інші машини, коли це необхідно. Крім того, трохи вищі ціни, які вкладаються в цю систему, стають майже несуттєвими, коли ви відновлюєте всі машини за лічені хвилини. Коли ви опинитеся в такій ситуації, ви дійсно зрозумієте основні переваги, які дає ізоляція мережевих сервісів на рівні віртуальних машин. Крім того, при такому підході набагато простіше здійснювати моніторинг різних ВМ в мережі.