É arriscado ter um servidor de banco de dados e um servidor web na mesma máquina?

8

Parece que a vida seria simples de executar o servidor de banco de dados na mesma máquina que o servidor web, mas estamos assumindo um grande risco de segurança ao fazer isso?

O ambiente será o servidor Windows 2008, Postgresql (versão mais recente, possivelmente 9.0 quando for lançado) e Apache 2.

CLJ
fonte
Depende. Você pode fornecer mais detalhes sobre o cenário específico que está considerando?
22310 Kelvin Kelley

Respostas:

7

Não necessariamente.

Supondo que o servidor da Web seja comprometido, o invasor ainda ganhará a credencial para acessar os mesmos bancos de dados, independentemente do servidor em que ele for executado. Afinal, o servidor de banco de dados ainda precisará ser configurado para permitir solicitações legítimas do servidor da web.

(Supondo que medidas de segurança sensatas, como no mysqld, não aceitem login raiz sem senha do localhost.)

Dito isto, você ainda pode querer executar um servidor de banco de dados separado. O motivo disso estar relacionado ao desempenho, escalabilidade etc.

andol
fonte
3
Concordo que um problema maior seria o impacto no desempenho que você obtém executando na mesma máquina.
21410 ChrisF
5

Não concordo com os pôsteres afirmando que isso não é uma preocupação de segurança, e eis o motivo:

  • Seu serviço frontal deve ter a menor superfície de ataque possível . Esse é o principal motivo para o uso de proxies e firewalls reversos e para manter serviços e programas desnecessários afastados dos servidores que não exigem que eles operem. É por isso que os servidores web são os alvos mais comuns para passes de proteção de segurança.
  • Seu servidor da web não deve ter direitos de deus no seu sistema de banco de dados. Portanto, comprometer o servidor da Web também não compromete o servidor de banco de dados. Para iniciantes, a conta que o servidor da Web usa para acessar o banco de dados não deve ter direitos administrativos locais para a caixa SQL, seus direitos devem estar confinados exclusivamente às permissões do banco de dados. Segundo, dentro dessas permissões SQL, ele deve estar operando sob o princípio do menor privilégio . Sua caixa da web não deve ser capaz de instanciar novos bancos de dados dentro da instância, por exemplo. Idealmente, sua caixa da Web não poderá descartar tabelas ou excluir linhas de quaisquer tabelas que não são absolutamente necessárias. Portanto, no caso de um comprometimento em uma configuração de duas camadas configurada corretamente, o impacto de um invasor usando as credenciais SQL é de escopo limitado.
Chris Thorpe
fonte
1
Não acho que alguém esteja dizendo que uma solução de duas caixas não é mais segura. No entanto, a questão era se esse risco era, para citar a pergunta, "grande". A resposta obviamente dependerá das circunstâncias - eu não iria rodar um site bancário voltado para a Internet em uma única máquina, por exemplo. Mas um servidor Web bloqueado adequadamente, uma vez comprometido, não deve ter mais ou menos acesso ao servidor de banco de dados do que antes de ser comprometido, e esse princípio é independente de a solução estar em duas máquinas ou uma. Se isso não for verdade, é hora de re-arquitetar o sistema.
BMDan
Não estou seguindo sua lógica. Se você comprometer um servidor Web e ganhar raiz nessa máquina, terá tudo o que está nessa máquina. Se isso incluir todo o seu banco de dados com todos os seus dados, tudo estará comprometido. Mas se você tiver dois servidores separados, comprometer totalmente o servidor da Web, em qualquer grau, obterá apenas acesso no nível de dados aos dados acessíveis ao próprio servidor da Web.
Chris Thorpe
3

Realmente dependeria do modelo de segurança de seus servidores Web e DB (ou seja, o software), bem como do grau de firewall / controle de acesso / IDP que você aplicaria nos dois se estivessem em servidores separados.

Sendo tudo o mais igual, provavelmente é melhor separar os dois. Praticamente, no entanto, pelo menos em um ambiente LAMP, desde que você esteja usando o privsep Apache (se não tiver certeza, não se preocupe, esteja) e não esteja usando o login raiz no MySQL no seu aplicativo da Web, e você não tem o tcp / 3306 exposto ao mundo exterior, não está ganhando muita segurança movendo um ou outro para uma peça diferente de silício. Você ganha benefícios de desempenho e capacidade de depuração, no entanto.

Sua pergunta está no estilo que parece exigir uma resposta absoluta, mas sem mais informações (no mínimo, de que tipo de sistema operacional e servidor web / DB estamos falando), é difícil até dar uma pergunta informativa.

BMDan
fonte
1
+1 Segurança básica e práticas recomendadas são suficientes para a maioria dos dados.
Chris S
Nós estaremos executando: Windows Server 2008 e Postgresql 8.4 (ou 9.0 quando for lançado), Apache 2
CLJ
0

Não vejo muito risco adicional de segurança ao colocar o banco de dados e os servidores da web no mesmo hardware. Se o servidor da Web for violado, os dados estarão acessíveis de qualquer maneira. A segurança não é o motivo típico para segregar camadas.

Nos dois casos, você deseja garantir que o servidor de banco de dados esteja escutando em portas não padrão, responderá apenas a solicitações do servidor da web e que o firewall permita apenas solicitações http / s para o servidor da web e nenhuma outra porta ou endereço .

No entanto, separá-los é uma boa prática. Cada servidor é mais fácil de gerenciar e configurar, e você pode lidar com falhas, problemas, reconstruções, problemas de desempenho, etc., mais facilmente avançando. Portanto, você pode considerar dois servidores virtuais no mesmo hardware, que podem ser separados quando o desempenho ou a capacidade exigir.

tomjedrz
fonte
0

Eu não - mas esse sou eu.

Depende do que está à sua frente (por exemplo, firewalls, balanceadores de carga, etc.) e quão "restritos" são, quais são os dados reais (ou seja, agora impactam dados disponíveis publicamente em uma extremidade, segredos nacionais na outra) , se há algum impacto no desempenho ao combiná-los, a força da rede entre eles (por exemplo, firewalls entre camadas) e a qualidade do fortalecimento do OS / aplicativo que será aplicado.

Se você não espera que este sistema tenha que lidar com muita carga, uma coisa que você poderia considerar seria virtualizar o sistema em duas VMs separadas; uma por função - possivelmente com uma terceira VM de firewall somente de software entre elas. Isso significa que, mesmo que alguém quebre o servidor da Web, ele precisará quebrar o servidor do banco de dados e, se incluído, uma VM de firewall intermediária. É claro que isso reduziria o desempenho geral do sistema, mas seria pelo menos até certo ponto mais seguro e também poderia ajudar se sua carga aumentasse para exigir um design de dois servidores, pois você poderia simplesmente mover uma VM para a segunda máquina. O produto ESXi gratuito do VMWare pode fazer isso com bastante facilidade e já existem VMs de firewall gratuitas pré-empacotadas prontas para implementação, se você quiser.

Chopper3
fonte