PostgreSQL è un noto sistema di gestione di database relazionali che vanta un ambiente sicuro per sviluppatori e utenti. Ma poiché il lavoro a distanza continua a far parte della nuova normalità di ogni azienda, i professionisti IT devono affrontare una nuova serie di sfide quando si tratta di gestire la sicurezza e l'accessibilità dei propri server.
L'utilizzo di un bastion server per accedere a un database PostgreSQL aggiunge un ulteriore livello di sicurezza. Ma poiché i bastion server dovrebbero fungere da firewall, è necessario utilizzare un tunnel Secure Shell (SSH) per ridurre il livello di esposizione della rete privata.
Molti strumenti di gestione del database PostgreSQL possono automatizzare questo processo di connessione, ma l'interazione con la shell richiede la creazione manuale di un tunnel SSH. Comprendere il processo e le precauzioni può sicuramente aiutare la tua azienda a mantenere database sicuri.
Vantaggi della creazione e dell'utilizzo di un tunnel SSH Secure Shell
Il tunneling SSH viene utilizzato nelle comunicazioni di rete da oltre trent'anni ed è altrettanto rilevante per le odierne esigenze informatiche.
Gli sviluppatori si rivolgono costantemente ai protocolli SSH Secure Shell per gestire l'accesso al database su tutti i tipi di server, incluso PostgreSQL. L'accesso remoto sicuro è fondamentale oggi, soprattutto quando il 50% dei dispositivi sul posto di lavoro è mobile (i dispositivi mobili sono tra i più vulnerabili agli attacchi informatici). Ciò rende ancora più importante che le organizzazioni possano gestire in remoto i dispositivi e l'accesso degli utenti alle loro reti.
Le aziende che gestiscono grandi quantità di dati devono fornire ai dipendenti un accesso rapido ai principali database e adottare un approccio proattivo alla sicurezza dei database. L'uso dei protocolli SSH è il numero uno nel fornire un accesso sicuro agli utenti da server remoti. Inoltre, semplifica l'autenticazione dei programmi automatizzati. Pertanto, le aziende possono svolgere le loro attività quotidiane in modo più efficiente.
Poiché gli standard di sicurezza stanno finalmente raggiungendo i dispositivi mobili e i server remoti, possiamo aspettarci un miglioramento anche dei protocolli di crittografia e autenticazione. Flessibilità e interoperabilità sono il futuro della sicurezza IoT. Tuttavia, i protocolli SSH continueranno a essere una parte standard per il prossimo futuro.
Come funziona SSH?
I protocolli SSH ti consentono di controllare in remoto l'accesso ai tuoi server su Internet in un ambiente sicuro. Non solo la connessione iniziale è altamente protetta, ma lo è anche l'intera sessione di comunicazione tra le due parti. Gli utenti possono accedere a un server remoto utilizzando un tunnel SSH Secure Shell aperto o altri client SSH Secure Shell.
Il server cerca una connessione a porta aperta. Una volta trovato uno, il server deve autenticare la connessione. Determina se è stato stabilito un ambiente sicuro per la comunicazione e il trasferimento di file. Se la connessione viene avviata dal client, il client deve autenticare il server oltre a fornire le sue credenziali.
Quando entrambe le parti vengono autenticate e viene stabilita la connessione, il protocollo di crittografia SSH garantisce la privacy continua di tutte le trasmissioni di dati tra il server e il client.
Esistono tre tipi di crittografia utilizzati dai tunnel SSH per proteggere le connessioni:
- Crittografia simmetrica
- Crittografia asimmetrica
- hash.
Crittografia simmetrica viene utilizzato per la durata della connessione per mantenere la comunicazione sicura. Sia il client che il server condividono la stessa chiave segreta per crittografare e decrittografare i dati. Questo algoritmo è sicuro perché una chiave reale non viene mai realmente scambiata. Piuttosto, entrambe le parti condividono informazioni pubbliche da cui possono derivare indipendentemente la chiave.
Crittografia asimmetrica , al contrario, richiede sia una chiave pubblica che una privata. Viene utilizzato all'inizio del processo di tunneling per autenticare i server. Il server utilizzerà una chiave pubblica per crittografare quei dati e il client deve autenticarli con una chiave privata. Poiché una particolare chiave privata è l'unica cosa in grado di decrittare i messaggi crittografati con la chiave pubblica, ciò aiuta ad autenticare le parti che cercano la connessione.
Hashing crittografico crea una firma univoca per il set di dati. Ciò è utile in una connessione SSH perché consente al server di sapere se un MAC è accettabile. Un hash corrispondente può essere creato solo dal pezzo di dati identico a quello che ha creato l'originale. Pertanto, l'hashing può essere utilizzato per controllare l'input per assicurarsi che sia quello corretto.
Autenticazione SSH
Dopo aver stabilito la crittografia, ha luogo un processo di autenticazione. La forma più semplice di autenticazione è l'utilizzo di una password. Sebbene questo sia un modo semplice per i client, lo è anche per gli script automatici dannosi. Anche una password crittografata ha una complessità limitata. Lo rende insicuro. L'uso di chiavi asimmetriche è una misura comune invece di utilizzare le password.
Una volta stabilita una chiave pubblica, il client deve fornire la chiave privata che accompagna la chiave pubblica. Senza questa combinazione, l'autenticazione non riesce. Questo aiuta a garantire che i dati crittografati non possano essere decifrati da un intruso.
L'intero processo di autenticazione viene negoziato durante la configurazione e solo le parti con chiavi complementari possono comunicare. Questo processo rende anche veloce il processo di accesso. Quindi, è ottimale per le procedure automatizzate.
Il processo di autenticazione varierà in base ai seguenti fattori:
- il tipo di database protetto
- la relazione e la posizione del server
- le autorizzazioni dell'utente all'interno del server.
Il vantaggio dell'utilizzo di un protocollo SSH è che l'intero processo è crittografato e altamente protetto.
Imposta il tunnel SSH
Se vuoi interagire con un database usando la shell, devi sapere come creare un tunnel SSH. Sebbene l'utilizzo di un'applicazione di gestione SSH automatizzata possa essere conveniente, molti amministratori di database preferiscono configurare da zero gli strumenti di gestione del database perché l'interazione con la shell è il modo migliore per eseguire il debug, l'audit e avere il massimo controllo.
L'utilizzo di un tunnel SSH è un modo molto sicuro per aprire una sessione senza timore di perdere dati o di essere violato (a patto di chiudere le sessioni e monitorare i server).
Ecco come creare un tunnel SSH:
Verifica il Bastion Server
Per creare un tunnel SSH Secure Shell, devi conoscere i nomi host del bastion server e del database PostgreSQL, nonché il tuo nome utente sul bastion server. Esegui il comando:
$ ssh <username>@<bastion_server>
Quindi inserisci la tua password quando viene visualizzata la finestra appropriata.
Apri il tunnel SSH
Apri il tunnel usando questo comando:
$ ssh -L localhost:port_number:<sql_server>:port_number<username>@<bastion_server>
Lascia la finestra aperta per mantenere la connessione. I numeri a due porte sono rispettivamente per il computer e il server remoto.
Verifica la tua connessione
Per assicurarti che il tuo tunnel sia aperto e connesso al server PostgreSQL, usa il seguente comando:
$ psql --port=X --host=localhost -c "SELECT * FROM pg_catalog.pg_tables"
Verifica se le tabelle vengono restituite. Se lo sono, allora la tua connessione è riuscita e sicura.
Un paio di passaggi facoltativi possono aumentare l'efficienza del tuo accesso dall'host bastion al server SQL. Tieni presente, tuttavia, che automatizzare l'accesso in ogni momento non è una strategia sicura. È consigliabile accedere sempre ogni volta che si desidera aprire un tunnel SSH per mantenere le sessioni completamente private.
Crea profilo utente
Per evitare la necessità di inserire password ogni volta, puoi creare un profilo sul bastion server. Per fare ciò, devi aggiungere la tua chiave SSH al server usando il seguente comando:
$ ssh-copy-id <username>@<bastion_server>
Quindi, la tua chiave verrà utilizzata automaticamente ogni volta che desideri accedere. Tuttavia, ha aspetti sia positivi che negativi. È più conveniente, ma devi assicurarti di avere altri protocolli di sicurezza in atto per proteggere la macchina da malware o furti. Se qualcun altro riesce ad accedere alla tua macchina, potrebbe essere in grado di accedere automaticamente ai tuoi server perché la tua chiave è stata salvata.
Aggiorna il tuo file di configurazione SSH
Potrebbe essere sofisticato ricordare i nomi esatti e i numeri di porta dei server a cui desideri connetterti. Ecco perché fa parte del protocollo tunnel SSH Secure Shell.
Stai tenendo traccia dei nomi host e ti autentica con il tuo nome utente. È una parte di ciò che rende sicura la connessione SSH in primo luogo. Ma c'è un modo per configurare la procedura per rendere l'accesso più rapido e semplice senza automatizzare completamente il processo. Puoi aggiungere una voce al tuo file di configurazione SSH:
Host bastione-produzione
- Nome host
- Utente
- LocalForward localhost:numero_porta
:numero_porta
Quindi, esegui il comando:
$ ssh bastion-production
Ora puoi connetterti in un solo passaggio.
Suggerimenti per la privacy SSH
È fondamentale proteggere i database. I dati sono la valuta più preziosa al mondo e, con l'aumento del ransomware e di altri crimini informatici, la mancata protezione dei dati dei clienti è un errore inaccettabile.
Il punto centrale dell'utilizzo del bastion server in primo luogo è proteggere il database. Tuttavia, alcuni passi falsi lascerebbero i tuoi server aperti a chiunque possa accedervi.
Ecco alcuni suggerimenti per rimanere al sicuro durante l'utilizzo dei tunnel SSH per la connessione ai server PostgreSQL:
Autenticare correttamente i lavoratori remoti
Se la tua organizzazione utilizza SSH per connettersi in remoto, tutti devono conoscere le basi dell'igiene digitale. Utilizzare l'autenticazione basata su chiave protetta da una password complessa. Anche la verifica in due passaggi per ogni accesso è un buon punto di partenza, oltre a garantire che le chiavi SSH pubbliche siano autentiche.
Limita gli accessi SSH solo a coloro che ne hanno bisogno e imposta i privilegi che riflettono le attività degli utenti.
Disabilita Port Forwarding
Solo circa la metà degli sviluppatori applica procedure di prevenzione del port forwarding. Il port forwarding può lasciarti aperto a comunicazioni crittografate con utenti e server non approvati. Pertanto, gli hacker possono entrare direttamente nel tuo database. Filtra tutte le tue connessioni attraverso il bastion server e considera l'utilizzo del port knocking prima di consentire una connessione.
Assicurati di eseguire il software più recente e che le tue connessioni SSH rispettino gli standard di conformità più recenti.
Verifica frequentemente
Utilizzare uno strumento di monitoraggio continuo oltre ai regolari audit manuali. Limita le tue connessioni solo a quelle necessarie e assicurati di controllare eventuali modifiche alle impostazioni di configurazione che non sono state approvate in anticipo.
Tenendo d'occhio chi sta effettuando l'accesso e in che tipo di attività è impegnato, puoi limitare la superficie di attacco e facilitare l'individuazione delle vulnerabilità sin dall'inizio.
Conclusione
L'uso di tunnel SSH crittografati è un modo sicuro per accedere ai database PostgreSQL da server remoti. Il processo mantiene la crittografia per la durata delle sessioni connesse. Sebbene i programmi SSH automatizzati siano utili per attività ricorrenti e altri processi del sistema amministrativo, l'apertura manuale di un tunnel SSH può essere vantaggiosa. In tal caso, puoi facilmente identificare tutto il traffico e le comunicazioni invece di utilizzare una versione automatizzata o un client.
Se utilizzi PostgreSQL o qualsiasi sistema di gestione di database SQL, devi sapere come utilizzare il tunneling SSH. Può essere fondamentale per il monitoraggio e la gestione dei processi di sistema e dei trasferimenti di dati.
I protocolli SSH garantiscono una connessione altamente sicura e seguire ulteriori precauzioni aiuterà a mantenere l'integrità delle connessioni del server.