Кажется, что запустить сервер базы данных на той же машине, что и веб-сервер, было бы просто, но не рискуем ли мы при этом безопасностью?
Среда будет представлять собой Windows server, Postgresql (последняя версия, возможно, 9.0) и Apache 2.
Ответ 1
Если ваш веб-сервер будет взломан, злоумышленник все равно получит полномочия для доступа к тем же базам данных, независимо от того, на каком сервере они работают. В конце концов, сервер базы данных должен быть настроен так, чтобы разрешить легитимный запрос с веб-сервера (предполагая разумные меры безопасности, такие как mysqld, не принимает логин root без пароля с localhost).
Учитывая это, вы, возможно, захотите запустить отдельный сервер базы данных. Причина этого связана с производительностью, масштабируемостью и т. д.
Ответ 2
Я не согласен с теми, кто утверждает, что это не является проблемой безопасности, и вот почему:
Ваша служба, находящаяся на первом слое системы, должна иметь как можно меньшую поверхность атаки. Это основная причина для использования обратных прокси-серверов и брандмауэров, а также для того, чтобы держать ненужные службы и программы подальше от серверов, которым они не нужны для работы. Именно поэтому веб-серверы являются наиболее распространенной целью для усиления безопасности.
Ваш веб-сервер не должен иметь полного доступа к системе баз данных, поэтому компрометация веб-сервера не приведет к компрометации и сервера базы данных. Во-первых, учетная запись, которую веб-сервер использует для доступа к базе данных, не должна иметь локальных административных прав на блок SQL, ее права должны быть ограничены только разрешениями базы данных. Во-вторых, в рамках этих разрешений SQL он должен работать по принципу наименьших привилегий. Например, ваш веб-блок не должен иметь возможности создавать новые базы данных внутри экземпляра. В идеале ваш веб-блок не должен иметь возможности сбрасывать таблицы или удалять строки из таблиц без крайней необходимости, поэтому в случае компрометации правильно настроенной двухуровневой системы влияние злоумышленника, использующего учетные данные SQL, ограничено.
Ответ 3
Это действительно зависит от модели безопасности вашего Web-сервера и сервера БД (то есть от программного обеспечения), а также от степени брандмауэринга/контроля доступа/IDP, которые вы бы применяли на этих двух серверах, если бы они находились на разных серверах.
При прочих равных условиях, вероятно, лучше разделить эти два сервера. Практически, однако, по крайней мере, в среде LAMP, пока вы используете privsep Apache (если вы не уверены, не волнуйтесь, это так) и не используете root login для MySQL в вашем webapp, а также у вас нет tcp/3306 для внешнего мира, вы не получите большого выигрыша в безопасности, если перенесете один или другой сервер на другой «кусок кремния». Однако вы получаете преимущества в производительности и отлаживаемости.
Ваш вопрос задан в стиле, который требует абсолютного ответа, но без дополнительной информации (как минимум, о каких ОС и вкусах web/DB-серверов идет речь) трудно дать информативный ответ.
Ответ 4
Я не вижу особого дополнительного риска для безопасности, если разместить базу данных и веб-серверы на одном оборудовании. Если веб-сервер будет взломан, данные все равно будут доступны. Безопасность не является типичной причиной для разделения уровней.
В любом случае если вы хотите убедиться, что сервер базы данных прослушивает нестандартные порты, отвечает на запросы только от веб-сервера, а брандмауэр разрешает http/s запросы только веб-серверу и никаких других портов или адресов, то позаботитесь о безопасности.
Тем не менее их разделение является хорошей практикой… каждым сервером легче управлять и настраивать, также вам будет легче справляться с отказами, проблемами, перестройкой, проблемами производительности и т. д. в дальнейшем. Поэтому вы можете рассмотреть вариант двух виртуальных серверов на одном оборудовании, которые можно разделить, когда этого потребует производительность или мощность.
Ответ 5
Я бы не стал, но это я.
Это зависит от того, что находится в вашей системе (т. е. брандмауэры, балансировщики нагрузки и т. д.) и насколько они грамотно настроены, каковы фактические данные (т. е. публично доступные данные с одним концом, национальные секреты с другим), есть ли какое-либо влияние на производительность при их объединении, конфигурация сети между ними (т. е. межуровневые брандмауэры) и качество защиты ОС/приложений, которые будут применяться.
Если вы не ожидаете, что эта система будет испытывать слишком большую нагрузку, можно рассмотреть вариант виртуализации системы в двух отдельных виртуальных машинах, по одной на каждую функцию — возможно, с третьей виртуальной машиной с программным брандмауэром между ними. Это будет означать, что, даже если кто-то взломает ваш веб-сервер, ему придется взломать сервер базы данных и, если он включен, промежуточную ВМ брандмауэра. Конечно, это снизит общую производительность системы, но будет, по крайней мере, в некоторой степени более безопасным, а также поможет, если ваша нагрузка когда-нибудь возрастет и потребует двухсерверной конструкции, поскольку вы сможете просто перенести одну ВМ на вторую машину. Бесплатный продукт ESXi от VMWare может сделать все это довольно легко, и уже есть бесплатные виртуальные машины брандмауэра, готовые к внедрению, если вы захотите их использовать.
Security