É arriscado ter um servidor de banco de dados e um servidor da 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 secuirty fazendo isso?

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

    
por CLJ 21.07.2010 / 20:01

5 respostas

7

Não necessariamente.

Supondo que seu servidor da Web seja comprometido, o invasor ainda obterá a credencial para acessar os mesmos bancos de dados, independentemente do servidor em que eles forem executados. Afinal, o servidor de banco de dados ainda precisará ser configurado para permitir a solicitação legítima do servidor da Web.

(Assumindo medidas de segurança sensatas como no mysqld não aceitando login root sem senha do host local).

Dito isso, talvez você ainda queira executar um servidor de banco de dados separado. A razão para isso está relacionada ao desempenho, escalabilidade, etc.

    
por 21.07.2010 / 20:14
5

Não concordo com os cartazes afirmando que isso não é uma preocupação de segurança, e aqui está o motivo:

  • Seu serviço de frente deve ter a menor superfície de ataque possível . Esse é o principal motivo para usar proxies reversos e firewalls e para manter serviços e programas desnecessários longe de servidores que não precisam deles para operar. É por isso que os servidores da web são os alvos mais comuns dos passos de proteção de segurança.
  • Seu servidor da web não deve ter direitos para o 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 ser confinados puramente a permissões de 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 na instância, por exemplo. Idealmente, sua caixa da web não terá a capacidade de descartar tabelas ou excluir linhas de qualquer tabela que não seja absolutamente necessário. Portanto, no caso de um comprometimento em uma configuração de 2 camadas corretamente configurada, o impacto de um invasor usando as credenciais SQL é limitado no escopo.
por 22.07.2010 / 14:35
3

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

Tudo o mais sendo igual, é provavelmente o caso em que é melhor separar os dois. Praticamente, no entanto, pelo menos em um ambiente LAMP, contanto que você esteja usando o privsep Apache (se não tiver certeza, não se preocupe, você está) e não está usando o login root para o MySQL em seu webapp, e você não tem o tcp / 3306 exposto ao mundo exterior, você não está realmente ganhando segurança muito ao mover um ou outro para outro pedaço de silício. Você ganha benefícios de desempenho e depuração, no entanto.

Sua pergunta está no estilo que parece exigir uma resposta absoluta, mas sem mais informações (no mínimo, sobre quais SO e servidores web / DB estamos falando), é difícil até dar uma resposta informativa. / p>     

por 21.07.2010 / 20:07
0

Não vejo muito risco de segurança adicional colocando 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.

Em ambos os casos, você deseja garantir que o servidor de banco de dados esteja atendendo em portas não padrão, responda apenas a solicitações do servidor da Web e que o firewall permita apenas solicitações http / s para o servidor da Web e nenhum outro portas ou endereços.

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

    
por 21.07.2010 / 22:13
0

Eu não faria isso - mas sou eu.

Depende do que está na frente de sua caixa (por exemplo, firewalls, balanceadores de carga etc.) e de quão "apertados" eles são, quais são os dados reais (ou seja, dados públicos atualmente disponíveis em um fim, segredos nacionais em o outro), se há algum impacto no desempenho em combiná-los, a força da rede entre ambos (isto é, firewalls entre camadas) e a qualidade do endurecimento do sistema operacional / aplicativo que será aplicado.

Se você não espera que esse sistema tenha que lidar com muita carga, uma coisa que você poderia considerar seria virtualizar o sistema em duas VMs separadas; um por função - possivelmente com uma terceira VM de firewall somente de software entre eles. Isso significaria que, mesmo que alguém invadisse seu servidor da Web, ele teria que invadir o servidor de banco de dados e, se incluído, uma VM de firewall intermediário. É 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 crescesse exigindo um design de dois servidores, já que você poderia simplesmente mover uma VM para a segunda máquina. O produto ESXi gratuito da VMWare pode fazer tudo isso com bastante facilidade e já existem VMs de firewall livres pré-prontas para implementação, se você quiser.

    
por 22.07.2010 / 14:28