Protezione del server MySQL dalla connessione remota

10

Ho bisogno di aprire la porta per il mio server MySQL all'esterno e da quello che ho letto, la configurazione predefinita non è sicura né crittografata.

Per questo ho alcune soluzioni in mente con la loro ragione, ma mi piacerebbe sapere, da un punto di vista della sicurezza migliore, se mi manca qualcosa.

In primo luogo, l'idea iniziale era di configurare un tuner SSH, ma temo che la connessione possa essere persa di tanto in tanto (anche se ho impostato con il sistema "autossh" per riconnettersi automaticamente quando la connessione si interrompe). La mia preoccupazione principale è che ho paura di perdere qualche richiesta (tra il momento in cui il tuning ssh si interrompe e il tempo autossh riprende una nuova connessione).

Quindi ho pensato di aprire MySQL all'esterno. Sono consapevole che questa non è l'opzione migliore senza lavorare sulla messa in sicurezza, ma se aggiungo questi passaggi, sarebbe meglio?

  1. Cambia la porta per l'esterno. Questo non impedirà a nessuno di trovare la porta corretta, ma bloccherà almeno i bot che prendono di mira direttamente 3306
  2. Imposta Mysql SSL. Questa operazione interromperà la trasmissione dei dati in chiaro tra il client e il server ed eviterà gli attacchi MitM.
  3. Consenti solo da determinati IP. Ciò garantirà che solo gli IP desiderati siano in grado di connettersi. Questo sarebbe gestito da IPtables
  4. root sarà disponibile solo da localhost . E tutti gli altri utenti avranno accesso limitato (al loro database)

Con questa configurazione in mente, pensi che MySQL sarebbe ancora vulnerabile?

La mia unica idea è se qualcuno acceda al mio server web e conosca il login / password, ma credo che una volta che qualcuno ha il login / password, la sicurezza diventa inutile (perché è già stata violata per ottenere le credenziali)

    
posta Cyril N. 18.02.2016 - 12:33
fonte

2 risposte

8

I problemi specifici dipendono in una certa misura dalle precise ragioni per cui stai aprendo il server in questo modo. Tuttavia, non sono sicuro di quale sia la differenza tra una connessione MySQL diretta che si interrompe (cosa che potrebbe accadere comunque) e una connessione SSL con collegamento a tunnel che scenda, in termini di livelli di preoccupazione.

  1. Cambiare la porta è essenzialmente la sicurezza dall'oscurità. Potrebbe ridurre il numero di attacchi visti leggermente, ma non ho mai visto livelli particolarmente elevati di traffico contro le porte di un database se confrontato con ciò che si vede comunemente contro, diciamo, le porte SSH. Non c'è nulla di male nel farlo, purché non siano le uniche precauzioni di sicurezza adottate. Non aspettarti che impedisca a nessuno di indirizzare il tuo server in modo specifico.
  2. Le connessioni SSL per MySQL sono sensate. Assicurati che i tuoi clienti siano a conoscenza del certificato specifico che si aspetta, altrimenti sarebbe possibile che un attacco MitM avvenga tramite intercettazione e re-crittografia (l'hacker client-gt è crittografato con il cert d'attacco, l'hacker decrittografa e invia al server usando server cert, server risponde a un utente malintenzionato, che re-crittografa i dati per tornare al client)
  3. Le restrizioni IP sono buone. È possibile applicare la difesa in modo approfondito qui - IPTables per consentire le connessioni al server, quindi gli utenti specifici di MySQL possono essere autorizzati solo da specifici IP di origine. Presta attenzione agli utenti che provengono da intervalli IP dinamici o condivisi: ciò si applica principalmente agli utenti che richiedono l'accesso da dispositivi mobili in alcuni Paesi, ma possono anche derivare da NAT aziendali.
  4. Anche questo è buono. Assicurati che la root abbia ancora una password sicura e non si basi sull'accesso da localhost come unica precauzione di sicurezza - in particolare, consentire l'accesso indiscriminatamente a host specifici, anche se è localhost, è una cattiva idea, poiché indebolisce il livello di sicurezza a quello dell'utente con privilegi più bassi con accesso a quell'host.

Tuttavia:

  • I tuoi clienti memorizzano le password di accesso in una forma non criptata? (ad esempio, stanno utilizzando il software per accedere al sistema che non limita l'accesso alle password se fanno clic su "ricorda la mia password"?) Questo potrebbe essere risolto dalla politica (dicendo "non fare clic su ricordare la mia password") o dalla tecnologia (imporre un client specifico che non ha questa funzione o implementa in modo sicuro la funzione)
  • I dati memorizzati sono abbastanza sensibili da garantire la crittografia a riposo?
  • Stai memorizzando i registri per il sistema e monitorandoli regolarmente?
  • Il server Web ha accesso a tutti i dati che non richiede specificamente? (ad esempio se non ha bisogno di essere in grado di leggere la tabella degli utenti MySQL, è stato impedito di farlo?)

Essenzialmente, senza conoscere i dettagli specifici della tua configurazione, qualsiasi risposta può offrire solo suggerimenti su ciò che normalmente sarebbe considerato "abbastanza sicuro". Per una banca o per le cartelle cliniche, suggerirei che la configurazione non è abbastanza sicura e che dovresti entrare in uno specialista per aiutarlo a proteggerlo completamente. Per un sito web di brochure, senza dati sulle transazioni e senza dati sui clienti, probabilmente è corretto. Per qualsiasi cosa tra loro, varia.

    
risposta data 18.02.2016 - 13:02
fonte
3

Una cosa che posso pensare: l'impostazione di SSL non può imporre tutte le connessioni come SSL. Assicurati di verificarlo.

A prescindere dalla preoccupazione di cui sopra, penso che sarebbe vulnerabile solo se ci fosse un bug in Mysql stesso. Se vuoi mitigarlo, usa una VPN (che non è dissimile dal tunneling SSH, poiché è un ulteriore punto di potenziale fallimento) e dì a Mysql di collegarsi solo all'interfaccia di rete vitruale della VPN (ad esempio tun0).

    
risposta data 18.02.2016 - 12:59
fonte

Leggi altre domande sui tag