È rischioso avere un server database e un server web sullo stesso computer?


8

Sembra che la vita sarebbe semplice eseguire il server di database sulla stessa macchina del server Web, ma stiamo correndo un grosso rischio di sicurezza facendo questo?

L'ambiente sarà il server Windows 2008, Postgresql (ultima versione, possibilmente 9.0 quando esce) e Apache 2.


Dipende. Puoi fornire maggiori dettagli sullo scenario specifico che stai considerando?
K. Brian Kelley,

Risposte:


7

Non necessariamente.

Supponendo che il tuo server Web venga compromesso, l'attaccante otterrà comunque le credenziali per accedere agli stessi database, indipendentemente dal server su cui viene eseguito. Dopotutto, il server database dovrà comunque essere configurato per consentire una richiesta legittima dal server web.

(Supponendo che misure di sicurezza sensate come mysqld non accettino l'accesso root senza password da localhost.)

Detto questo, potresti comunque voler eseguire un server database separato. Il motivo di ciò è legato a prestazioni, scalabilità, ecc.


3
Concordo sul fatto che un problema maggiore sarebbe il colpo di prestazioni che si esegue entrambi sulla stessa macchina.
ChrisF,

5

Non sono d'accordo con i poster che affermano che questo non è un problema di sicurezza, ed ecco perché:

  • Il tuo servizio frontale dovrebbe avere la più piccola superficie di attacco possibile . Questo è il motivo principale per l'utilizzo di proxy inversi e firewall e per mantenere servizi e programmi non necessari lontano dai server che non richiedono loro di funzionare. Questo è il motivo per cui i server Web sono gli obiettivi più comuni per i passaggi di protezione avanzata.
  • Il tuo server web non dovrebbe avere diritti divini sul tuo sistema di database. Pertanto, la compromissione del server Web non compromette anche il server database. Per cominciare, l'account utilizzato dal server Web per accedere al database non dovrebbe avere diritti amministrativi locali per la casella SQL, i suoi diritti dovrebbero essere limitati esclusivamente alle autorizzazioni del database. In secondo luogo, nell'ambito di tali autorizzazioni SQL dovrebbe funzionare secondo il principio del privilegio minimo . Ad esempio, la tua casella web non dovrebbe essere in grado di creare istanze di nuovi database all'interno dell'istanza. Idealmente, la tua casella web non sarà in grado di eliminare le tabelle o eliminare le righe da qualsiasi tabella che non è assolutamente necessario. Pertanto, in caso di compromissione in una configurazione a 2 livelli correttamente configurata, l'impatto di un utente malintenzionato che utilizza le credenziali SQL è limitato nell'ambito.

1
Non credo che qualcuno stia dicendo che una soluzione a due scatole non sia più sicura. Tuttavia, la domanda era se quel rischio fosse, per citare la domanda, "grande". La risposta dipenderà ovviamente dalle circostanze: ad esempio, non gestirei un sito bancario con connessione Internet su un unico computer. Ma un server Web correttamente bloccato, una volta compromesso, non dovrebbe avere più o meno accesso al suo server di database rispetto a prima di essere compromesso, e tale principio è indipendente dal fatto che la soluzione sia su due macchine o una. Se ciò non è vero, è tempo di riprogettare il sistema.
BMDan,

Non sto seguendo la tua logica. Se comprometti un server web e ottieni il root su quella macchina, hai tutto ciò che è su quella macchina. Se questo include l'intero database con tutti i suoi dati, allora tutto è compromesso. Ma se si dispone di 2 server separati, quindi la completa compromissione del server Web, in qualsiasi modo, otterrebbe solo l'accesso a livello di dati ai dati accessibili al server Web stesso.
Chris Thorpe,

3

Dipenderebbe davvero dal modello di sicurezza dei tuoi server Web e DB (ovvero il software), nonché dal grado di firewall / controllo degli accessi / IDP che faresti applicare ai due se fossero su server separati.

A parità di tutto il resto, è probabilmente il caso di separare i due. Praticamente, tuttavia, almeno in un ambiente LAMP, purché utilizzi Apache privsep (se non sei sicuro, non preoccuparti, lo sei) e non stai utilizzando il login di root su MySQL nella tua webapp, e non hai tcp / 3306 esposto al mondo esterno, non stai davvero guadagnando molta sicurezza spostando l'uno o l'altro su un altro pezzo di silicio. Tuttavia, ottieni vantaggi in termini di prestazioni e capacità di debug.

La tua domanda è nello stile che sembra richiedere una risposta assoluta, ma senza ulteriori informazioni (come minimo, di che tipo di sistema operativo e di server web / DB stiamo parlando), è difficile persino fornirne una informativa.


1
+1 La sicurezza di base e le migliori pratiche sono sufficienti per la maggior parte dei dati.
Chris S,

Saremo in esecuzione: Windows Server 2008 e Postgresql 8.4 (o 9.0 quando uscirà), Apache 2
CLJ

0

Non vedo molti rischi aggiuntivi per la sicurezza mettendo il database e i server web sullo stesso hardware. In caso di violazione del server Web, i dati sono comunque accessibili. La sicurezza non è la ragione tipica per separare i livelli.

In entrambi i casi, si desidera assicurarsi che il server di database sia in ascolto su porte non standard, risponderà solo alle richieste dal server Web e che il firewall consenta solo le richieste http / s al server Web e nessun'altra porta o indirizzo .

Tuttavia, separarli è una buona pratica .. ogni server è più facile da gestire e configurare e puoi far fronte a guasti, problemi, ricostruzioni, problemi di prestazioni, ecc. Più facilmente. Pertanto, è possibile considerare due server virtuali sullo stesso hardware, che possono quindi essere separati quando le prestazioni o la capacità lo richiedono.


0

Non lo farei, ma sono io.

Dipende da cosa c'è davanti alla tua scatola (ad es. Firewall, bilanciamento del carico, ecc.) E da quanto sono "stretti", quali sono i dati effettivi (ad es. Ora hanno un impatto sui dati disponibili pubblicamente da un lato, i segreti nazionali dall'altro) , indipendentemente dal fatto che ci sia un impatto sulle prestazioni nel combinarli, la forza della rete tra di loro entrambi (vale a dire i firewall inter-tier) e la qualità del sistema operativo / protezione hardware che verrà applicata.

Se non ti aspetti che questo sistema debba affrontare un carico eccessivo, una cosa che potresti considerare sarebbe quella di virtualizzare il sistema in due macchine virtuali separate; uno per funzione - possibilmente con una terza VM firewall solo software tra di loro anche. Ciò significherebbe che anche se qualcuno avesse violato il tuo server web avrebbe dovuto craccare il server database e, se incluso, una VM firewall intermedia. Naturalmente ciò ridurrebbe le prestazioni complessive del sistema, ma sarebbe almeno in qualche modo più sicuro e potrebbe anche aiutare se il tuo carico diventasse un progetto a due server in quanto potevi semplicemente spostare una VM sulla seconda macchina. Il prodotto ESXi gratuito di VMWare potrebbe farlo abbastanza facilmente e ci sono già VM VM pre-confezionate pronte per l'implementazione, se lo desideri.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.