Est-il risqué d'avoir un serveur de base de données et un serveur Web sur la même machine?

8

Il semble que la vie serait simple d'exécuter le serveur de base de données sur la même machine que le serveur Web, mais prenons-nous un gros risque de sécurité en faisant cela?

L'environnement sera le serveur Windows 2008, Postgresql (dernière version, éventuellement 9.0 à sa sortie) et Apache 2.

CLJ
la source
Ça dépend. Pouvez-vous donner plus de détails sur le scénario spécifique que vous envisagez?
K. Brian Kelley

Réponses:

7

Pas nécessairement.

En supposant que votre serveur Web soit compromis, l'attaquant obtiendra toujours les informations d'identification pour accéder aux mêmes bases de données, quel que soit le serveur sur lequel il s'exécute. Après tout, le serveur de base de données devra toujours être configuré pour autoriser une demande légitime du serveur Web.

(En supposant que des mesures de sécurité raisonnables, telles que mysqld, n'acceptent pas la connexion root sans mot de passe de localhost.)

Cela étant dit, vous souhaiterez peut-être toujours exécuter un serveur de base de données distinct. La raison en est liée aux performances, à l'évolutivité, etc.

andol
la source
3
Je conviens qu'un problème plus important serait le niveau de performance que vous obtenez en exécutant les deux sur la même machine.
ChrisF
5

Je ne suis pas d'accord avec les affiches indiquant que ce n'est pas un problème de sécurité, et voici pourquoi:

  • Votre service orienté vers l'avant doit avoir la plus petite surface d'attaque possible . C'est la principale raison d'utiliser des proxys inversés et des pare-feu, et de garder les services et programmes inutiles à l'écart des serveurs qui ne nécessitent pas leur fonctionnement. C'est pourquoi les serveurs Web sont les cibles les plus courantes des passes de renforcement de la sécurité.
  • Votre serveur Web ne doit pas avoir de droits divins sur votre système de base de données. Par conséquent, compromettre le serveur Web ne compromet pas non plus le serveur de base de données. Pour commencer, le compte que le serveur Web utilise pour accéder à la base de données ne doit pas avoir de droits administratifs locaux sur la boîte SQL, ses droits doivent être limités uniquement aux autorisations de la base de données. Deuxièmement, dans le cadre de ces autorisations SQL, il devrait fonctionner selon le principe du moindre privilège . Votre boîte Web ne devrait pas être en mesure d'instancier de nouvelles bases de données au sein de l'instance, par exemple. Idéalement, votre boîte Web n'aura pas la possibilité de supprimer des tableaux ou de supprimer des lignes de tous les tableaux dont elle n'a pas absolument besoin. Ainsi, en cas de compromis dans une configuration à 2 niveaux correctement configurée, l'impact d'un attaquant utilisant les informations d'identification SQL est de portée limitée.
Chris Thorpe
la source
1
Je ne pense pas que quiconque dise qu'une solution à deux cases n'est pas plus sûre. Cependant, la question était de savoir si ce risque était, pour citer la question, "grand". La réponse dépendra évidemment des circonstances - je ne dirigerais pas un site bancaire accessible sur Internet sur une seule machine, par exemple. Mais un serveur Web correctement verrouillé, une fois compromis, ne devrait pas avoir plus ou moins d'accès à son serveur de base de données qu'auparavant, et ce principe est indépendant du fait que la solution soit sur deux machines ou une. Si ce n'est pas vrai, il est temps de ré-architecturer le système.
BMDan
Je ne suis pas dans ta logique. Si vous compromettez un serveur Web et que vous obtenez racine sur cette machine, vous avez tout ce qui se trouve sur cette machine. Si cela inclut l'intégralité de votre base de données avec toutes ses données, alors tout est compromis. Mais si vous avez 2 serveurs distincts, compromettre complètement le serveur Web, à quelque degré que ce soit, ne vous donnerait qu'un accès de niveau données aux données qui étaient accessibles au serveur Web lui-même.
Chris Thorpe du
3

Cela dépendrait vraiment du modèle de sécurité de vos serveurs Web et DB (c'est-à-dire du logiciel), ainsi que du degré de pare-feu / contrôle d'accès / IDP que vous imposeriez aux deux s'ils étaient sur des serveurs distincts.

Toutes choses étant égales par ailleurs, il est probablement préférable de séparer les deux. En pratique, cependant, au moins dans un environnement LAMP, tant que vous utilisez privsep Apache (si vous n'êtes pas sûr, ne vous inquiétez pas, vous l'êtes) et n'utilisez pas la connexion root à MySQL dans votre webapp, et vous n'avez pas tcp / 3306 exposé au monde extérieur, vous ne gagnez pas vraiment beaucoup de sécurité en déplaçant l'un ou l'autre sur un morceau de silicium différent. Vous bénéficiez cependant de performances et d'avantages de débogage.

Votre question est dans le style qui semble nécessiter une réponse absolue, mais sans plus d'informations (au minimum, de quelles saveurs de système d'exploitation et de serveur Web / DB dont nous parlons), il est même difficile de donner une réponse informative.

BMDan
la source
1
+1 La sécurité de base et les meilleures pratiques sont suffisantes pour la plupart des données.
Chris S
Nous allons exécuter: Windows Server 2008 et Postgresql 8.4 (ou 9.0 quand il sortira), Apache 2
CLJ
0

Je ne vois pas beaucoup de risques supplémentaires pour la sécurité de mettre la base de données et les serveurs Web sur le même matériel. Si le serveur Web est violé, les données sont accessibles de toute façon. La sécurité n'est pas la raison typique de la ségrégation des niveaux.

Dans les deux cas, vous voulez vous assurer que le serveur de base de données écoute sur les ports non standard, ne répondra qu'aux demandes du serveur Web et que le pare-feu autorise uniquement les requêtes http / s au serveur Web et aucun autre port ou adresse .

Néanmoins, les séparer est une bonne pratique. Chaque serveur est plus facile à gérer et à configurer, et vous pouvez gérer plus facilement les pannes, problèmes, reconstructions, problèmes de performances, etc. Ainsi, vous pouvez envisager deux serveurs virtuels sur le même matériel, qui peuvent ensuite être séparés lorsque les performances ou la capacité l'exigent.

tomjedrz
la source
0

Je ne le ferais pas - mais c'est moi.

Cela dépend de ce qui se trouve devant votre boîte (c.-à-d. Pare-feu, équilibreurs de charge, etc.) et à quel point ils sont «étanches», quelles sont les données réelles (c.-à-d. Impactent maintenant les données accessibles au public à une extrémité, les secrets nationaux à l'autre) , qu'il y ait un impact sur les performances de leur combinaison, la force du réseau entre eux (c.-à-d. les pare-feu inter-niveaux) et la qualité du renforcement du système d'exploitation / des applications qui sera appliqué.

Si vous ne vous attendez pas à ce que ce système doive faire face à une charge trop importante, vous pouvez envisager de virtualiser le système en deux machines virtuelles distinctes; une par fonction - éventuellement avec une troisième machine virtuelle pare-feu uniquement logicielle entre elles. Cela signifierait que même si quelqu'un piratait votre serveur Web, il devrait alors casser le serveur de base de données et, s'il était inclus, une machine virtuelle de pare-feu intermédiaire. Bien sûr, cela réduirait les performances globales du système, mais serait au moins dans une certaine mesure plus sécurisé et pourrait également aider si votre charge devenait de plus en plus exigeant une conception à deux serveurs, car vous pouviez simplement déplacer une machine virtuelle sur la deuxième machine. Le produit ESXi gratuit de VMWare pourrait tout faire assez facilement et il existe déjà des machines virtuelles pare-feu pré-emballées prêtes à être mises en œuvre si vous le souhaitez.

Chopper3
la source