Усиление безопасности веб-стека (LAMP) с помощью изоляции сетевых сервисов для виртуальных машин
Веб-стек - это набор различного програмного обеспечения с открытым исходным кодом, который включает язык программирования для серверной части, операционную систему, сервер баз данных и веб-сервер. Часто используемый стек называется LAMP. Это название является сокращением от Linux, Apache server, MySQL и PHP (в некоторых случаях это может быть Python или Perl). В целях безопасности лучшим вариантом является запуск различных сетевых служб на отдельных виртуальных машинах или системах. Очевидно, что при такой системе потенциальные злоумышленники не смогут взломать множество сервисов.
- LAMP: Традиционная настройка vs. раздельная конфигурация
- Роли каждой виртуальной машины/сервера в раздельной архитектуре LAMP
- Фактическая настройка сервера
- Преимущества разделения служб LAMP с точки зрения производительности и безопасности
- Управление взаимодействием между разделенными компонентами LAMP
- Подведение итогов
В этой статье мы получим самую полезную информацию о настройке решения, которое может обслуживать кэширование, динамический/статический контент и базу данных, функционируя на виртуальных машинах или отдельных серверах.
LAMP: Традиционная настройка vs. раздельная конфигурация
Традиционная настройка сервера, при которой все службы находятся на одной машине, в наше время крайне рискованна. Существует огромное количество хакеров, которые могут получить доступ к вашему серверу и всем данным на нем всего лишь с одной попытки. Чтобы исключить подобные неприятности, лучше рассмотреть вариант раздельной конфигурации.
Раздельная конфигурация разграничит кэш, базу данных и другие части на каждом сервере. Преимущества такого подхода заключаются в:
- Оптимизации
- Безопасности
- Простоте использования
- Росте и масштабируемости
- Упрощении мониторинга
Роли каждой виртуальной машины/сервера в раздельной архитектуре LAMP
Приведенный ниже пример характеризует различные ВМ, которые могут иметь отношение к блогам, пользовательским приложениям или сайтам на базе Drupal.
Сервер/ виртуальная машина | Описание | Программа |
VM0 | Такой узел/ВМ должен иметь 2 интерфейса - частный и публичный. Публичный интерфейс помогает пользователям подключаться к сайту. Частный используется для передачи сетевого трафика между узлами.Порт подключения или маршрутизатор провайдера | Netfilter в качестве брандмауэра и haproxy/nginx в качестве обратного прокси. |
VM1 | Этот узел используется для обслуживания таких статических файлов, как css, изображения или 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 в RDBMS. | Mysql-сервер |
VM5 | Этот узел функционирует как распределенная файловая система. На этом сервере хранятся только такие данные, как изображения, файлы php/python, css, js. Для доступа к данным, запрашиваемым с VM2 и VM1, используется команда mount. | Сервер NFSv4 |
Порт подключения или маршрутизатор провайдера | VM0 подключается к Интернету через канал связи, предоставленный провайдером. | В зависимости от сайта |
Фактическая настройка сервера
- Установите и настройте сервер NFS.
- Установите и настройте сервер MySQL.
- Установите и настройте сервер Memcached.
- Установите и настройте сервер Apache.
- Установите и настройте сервер Lighttpd.
- Установите и настройте сервер Nginx.
Преимущества разделения служб LAMP с точки зрения производительности и безопасности
К основным преимуществам разделения сервисов LAMP можно отнести следующие:
- Масштабирование. Через отдельные сервисы гораздо проще масштабировать всю систему. Например, если у вас всего один сервер или виртуальная машина, то стратегия должна быть очень разветвленной, чтобы охватить каждый компонент системы. Также необходимо учитывать баланс нагрузки, который существенно влияет на характеристики производительности.
- Развертывание. Как правило, такие узлы являются неизменяемыми. Это означает, что развертывание происходит путем создания нового узла, а не добавления чего-то к уже существующему. Этот процесс намного проще, когда база данных и приложение находятся на разных узлах.
- Безопасность. В случае атак вы можете потерять доступ к одному узлу, но не ко всем сразу, что значительно минимизирует проблемы.
Управление взаимодействием между разделенными компонентами 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 настроено на связь с базой данных на WM04. Для приложения PHP используется кэширование SQL через сервер Memcached на VM03.
Кроме того, можно разместить обратный прокси-сервер в DMZ и другие серверы в брандмауэре для повышения уровня безопасности. Таким образом, это позволит максимально снизить стоимость проекта.
Подведение итогов
Чтобы значительно повысить уровень безопасности веб-приложения, важно развернуть сеть виртуальных машин для каждого уровня этого стека. Если говорить о бюджете, который требуется для такого улучшение, то, конечно, это не дешевый вариант; обслуживание и настройка системы могут стоить недешево. Однако, несмотря на дороговизну стратегии, повышение уровня безопасности будет весомым и полезным для любого случая. Кроме того, виртуализация сервера делает процессы восстановления, резервного копирования и миграции на другое оборудование намного быстрее и проще.
Благодаря бинарному характеру виртуальных машин в файловой системе хоста, их гораздо проще перенести на другие машины, когда это необходимо. Кроме того, немного более высокая цена становится обоснованной, когда вы восстанавливаете все машины за считанные минуты. Когда вы окажетесь в подобной ситуации, вы поймете, какие значительные преимущества дает изоляция сетевых сервисов на ВМ. Кроме того, при таком подходе гораздо проще контролировать различные виртуальные машины в сети.