Come Si Dovrebbe Proteggere Il Database?

0
196
Shutterstock/hywards

Il server di database contiene spesso i tuoi dati più sensibili, come informazioni riservate dell’utente. È importante implementare le migliori pratiche di sicurezza per ridurre al minimo il rischio di un utente malintenzionato di ottenere l’accesso al vostro database.

Questa guida sarà per MySQL in particolare, in quanto è il database più comune, ma la maggior parte di questi concetti si applicano a qualsiasi tipo di database, ti basta richiedere una diversa configurazione per ottenere gli stessi effetti.

Assicurarsi di Eseguire mysql_secure_installation

MySQL ha un built-in strumento in grado di gestire alcune funzioni di base delle attività di sicurezza. Dopo l’installazione di MySQL, eseguire il seguente comando nel terminale:

mysql_secure_installation

Questo vi guiderà attraverso alcune attività—impostazione di una nuova password, la rimozione di utenti anonimi e i database di test, e la disattivazione remota login di root. Successivamente, vi verrà ricaricare MySQL config per voi, così si dovrebbe vedere immediatamente le modifiche.

Bloccare SSH

Questo non tecnicamente non hanno nulla a che fare con il database stesso; tuttavia, il database è sicuro solo se il tuo server è in esecuzione, in modo che ti consigliamo di prendere le misure necessarie per bloccare SSH e prevenire la maggior parte dei comuni vettori di attacco.

Potete leggere la nostra guida completa su SSH sicurezza per saperne di più, ma l’essenza di esso è a pochi passi:

  • Disattivare la password di accesso, utilizzare le chiavi SSH solo.
  • Tasso limite di tentativi di login falliti con denyhosts per evitare che la forza bruta.
  • Whitelist accesso a indirizzi IP affidabili.
  • Disabilitare il login come root tramite SSH, in questo modo, gli attaccanti hanno bisogno di sapere il tuo nome utente.
  • Impostare l’Autenticazione Multi-Factor per SSH, se siete davvero paranoico.

Eseguire un Database Autonomo in una Subnet Privata

Piuttosto che l’esecuzione di un database locale sullo stesso server nginx è in esecuzione, è meglio per la sicurezza di eseguire il database in una sottorete privata, che è accessibile solo da altri server nel cloud privato. Molti fornitori di servizi cloud, tra cui AWS, offrire queste caratteristiche.

Il programma di installazione di simile a questo:

Virtual Private Cloud (VPC), è semplicemente il contenitore di tutti i tuoi AWS risorse correre. Le cose in questo cloud, parla con loro indirizzi IP privati, proprio come i dispositivi in casa interagire.

Server in the public subnet hanno indirizzi IP pubblici, e sarà direttamente accessibile da chiunque. I server della rete privata non hanno indirizzi IP pubblici—solo uno privato. Si può ancora accedere a internet mediante Traduzione degli Indirizzi di Rete, lo stesso metodo che offre al vostro computer accesso dietro un router di casa.

Questo significa che ogni server ha lanciato la subnet privata sarà completamente inaccessibile dall’esterno attaccanti. L’unico modo che il tuo database può essere letta e se il web server è compromesso, e anche allora non avrebbe comunque bisogno di una escalation di privilegi.

Sulla parte superiore dei vantaggi in termini di sicurezza, questa configurazione è anche molto più facili da scalare. Per esempio, si potrebbe avere quattro server web in esecuzione WordPress che tutti la connessione a un singolo autorevole database server. In questo modo, tutti e quattro i server web sono in sincronia, e si può facilmente scalare su e giù per soddisfare la domanda, senza preoccuparsi di database. Questo può causare alcuni problemi di prestazioni a causa del sovraccarico di rete, ma con la giusta multistrato di memorizzazione nella cache, il problema è minimo, rispetto ai benefici architettoniche.

Per rendere MySQL accettare solo connessioni da privato connessioni, è necessario utilizzare una maschera di rete nella vostra dichiarazione di CONCESSIONE. Questo non funziona con la notazione CIDR—solo il pieno di rete.

GRANT ALL ON database.* PER “utente” @’10.0.1.0/255.255.255.0′ identified BY ‘password’

Se avete intenzione di eseguire solo un server, si dovrebbe almeno associare il tuo database localhost in modo che non sia accessibile da internet comunque.

Associare a Localhost, se Possibile (o Almeno una Porta Diversa)

Se non hai accesso al tuo server di database da qualcosa di diverso da altri processi in esecuzione sulla macchina, è possibile bloccarlo in modo che non sia accessibile attraverso la rete. Naturalmente, questo funziona solo se si dispone di un server che esegue tutto, e che non è la configurazione migliore, in primo luogo.

Se non è possibile associare a localhost, è una buona idea per cambiare la porta di default per qualcos’altro.

In ogni modo, è possibile farlo abbastanza facilmente da associazione MySQL a localhost, il che significa che solo in ascolto sull’indirizzo di loopback, e non aprire le porte. Aprire /etc/mysql/my.conf nel vostro editor di testo preferito e aggiungere la seguente riga nella sezione [mysqld] sezione:

bind-address = 127.0.0.1

È anche possibile cambiare la porta di default da questa stessa sezione:

Port=5000

Riavviare MySQL, e si dovrebbe vedere i cambiamenti.

Guarda La Tua Storia Shell

La maggior parte delle cose si fa in Linux vengono registrati. Se un utente malintenzionato riesce a ottenere l’accesso a questi file di log, che potrebbero crescere i loro privilegi da trovare le password memorizzate.

Questo può avvenire in due modi principali per MySQL, entrambi i quali sono facilmente evitabili. Il primo è quando si accede in MySQL shell—non si desidera specificare la password come argomento sulla linea di comando. Lasciare sempre vuoto, e lasciare che MySQL chiedere per essa.

mysql -u root -p

In caso contrario, è visibile tramite la storia di comando.

MySQL ha anche una sua storia file, memorizzati in ~/.mysql_history. Questo, ovviamente, non registro la password che usi per il login, ma se è stato creato un nuovo utente di MySQL da linea di comando, che la dichiarazione sarà connesso password e tutti. Avrai voglia di cancellare questo file come precauzione nel caso fosse necessario modificare gli account utente.

# cat /dev/null > ~/.mysql_history

Se Siete su AWS, Considerare l’Utilizzo di RDS

AWS Database Relazionale di Servizio (RDS)è la gestione completa di database nel cloud. Se non si vuole avere a preoccuparsi per la sicurezza del database, e vogliono solo una soluzione distribuibile, RDS (e tutti AWS altri database gestiti servizi) prenderà il via il mal di testa.

RDS utilizza AWS propria Identity and Access Management (IAM) di sistema. IAM gestisce le autorizzazioni per tutto quello che fai su AWS. Ogni azione nella Console di Gestione web, comandi CLI, e le richieste API devono tutti passare attraverso IAM. Ogni azione verrà bloccato se l’utente o entità, per l’esecuzione di non disporre di un’esplicita autorizzazione per accedere a tale risorsa. In cima a quello, RDS è privato per impostazione predefinita, in modo da non devono preoccuparsi di attacchi da internet.

Avrai ancora finire l’utilizzo di standard di MySQL username e la password di autenticazione per la connessione al database stesso, anche se—IAM semplicemente protegge tutto ciò che riguarda il database, ad esempio la configurazione. Tuttavia, è possibile utilizzare AWS Segreti Manager, che permette di mantenere costantemente ruotare le chiavi di protezione senza ridistribuzioni del codice, e ha costruito in integrazione per RDS per l’avvio.

Se si desidera, è anche possibile attivare IAM Database di Autenticazione, che vi permetterà di bypassare l’autenticazione con password tutto, e di utilizzare solo IAM. Tuttavia, aggiunge un po ‘ di sovraccarico, e, come tale, è tasso limitata di 200 nuove connessioni al secondo per MySQL.