Impostazioni di configurazione essenziali per la messa in sicurezza del tuo database PostgreSQL

Questa guida illustra le impostazioni di configurazione essenziali per rafforzare la sicurezza di PostgreSQL. Scopri come applicare l'autenticazione moderna utilizzando `pg_hba.conf` (SCRAM-SHA-256), implementare la crittografia SSL/TLS obbligatoria e minimizzare la superficie di attacco limitando gli ascoltatori di rete. Essenziale per la stabilità in produzione e la conformità.

35 visualizzazioni

Impostazioni di configurazione essenziali per la protezione del tuo database PostgreSQL

La protezione di un database PostgreSQL è fondamentale per salvaguardare i dati sensibili e garantire la conformità. Essendo un database relazionale avanzato e open-source, PostgreSQL offre robusti meccanismi di configurazione per controllare l'accesso, crittografare la comunicazione e minimizzare potenziali vulnerabilità. Questa guida approfondisce i file di configurazione e i parametri critici necessari per stabilire una postura di sicurezza rafforzata per gli ambienti di produzione.

Un'efficace sicurezza di PostgreSQL si basa su due pilastri principali: controllare chi può connettersi e come si connette. Esploreremo le impostazioni vitali in postgresql.conf e il cruciale file di autenticazione del client, pg_hba.conf, oltre a implementare la crittografia obbligatoria tramite SSL/TLS.

1. Rafforzamento dell'autenticazione del client con pg_hba.conf

Il file Host-Based Authentication (pg_hba.conf) detta quali host possono connettersi, con quali utenti PostgreSQL possono connettersi, a quali database possono accedere e, soprattutto, il metodo di autenticazione richiesto per quella connessione.

Comprensione della struttura di pg_hba.conf

Ogni riga in pg_hba.conf segue un formato specifico:

TIPO DATABASE UTENTE INDIRIZZO METODO [OPZIONI]

  • TIPO: Tipo di connessione (ad esempio, local, host, hostnossl, hostssl).
  • DATABASE: Nome/i del database di destinazione.
  • UTENTE: Ruolo/i del database di destinazione.
  • INDIRIZZO: Intervallo di indirizzi IP del client.
  • METODO: Meccanismo di autenticazione (ad esempio, scram-sha-256, md5, reject, trust).

Migliori pratiche per i metodi di autenticazione

Non utilizzare mai il metodo trust in produzione, poiché consente a chiunque corrisponda ai criteri di connessione di connettersi senza password. I moderni metodi di autenticazione consigliati sono:

Consigliato: scram-sha-256

SCRAM (Salted Challenge Response Authentication Mechanism) offre miglioramenti significativi rispetto ai vecchi metodi di password come md5 utilizzando hashing più robusto e prevenendo attacchi di replay. Questa dovrebbe essere la tua scelta predefinita per le connessioni remote.

# Forza SCRAM per tutte le connessioni remote sulla porta 5432
host    all     all     0.0.0.0/0       scram-sha-256

Connessioni locali

Per le connessioni provenienti dal server stesso (ad esempio, applicazioni in esecuzione sulla stessa macchina), utilizzare socket locali. L'impostazione più sicura è spesso peer (per socket di dominio Unix) o scram-sha-256 se i socket sono disabilitati o limitati.

# Usa l'autenticazione peer per le connessioni locali tramite socket Unix
local   all     all             peer

Rifiuto esplicito delle connessioni

Utilizzare il metodo reject per bloccare esplicitamente le connessioni da reti pericolose o non attendibili.

# Blocca tutte le connessioni da un intervallo IP noto come insicuro
host    all     all     192.168.1.0/24  reject

Suggerimento Azionabile: Dopo aver modificato pg_hba.conf, devi obbligatoriamente ricaricare la configurazione affinché le modifiche abbiano effetto (ad esempio, pg_ctl reload o inviando un segnale SIGHUP al processo postmaster).

2. Implementazione della crittografia SSL/TLS

Per impedire che dati sensibili (incluse le password) vengano intercettati sulla rete, è obbligatorio imporre la crittografia SSL/TLS per tutte le connessioni remote.

Configurazione in postgresql.conf

Assicurati che questi parametri siano impostati correttamente nel tuo file di configurazione principale:

  • ssl = on: Abilita il supporto SSL globalmente.
  • ssl_cert_file: Percorso del file del certificato del server (ad esempio, server.crt).
  • ssl_key_file: Percorso del file della chiave privata del server (ad esempio, server.key).

Applicazione di SSL in pg_hba.conf

Per forzare i client a utilizzare SSL, cambia il tipo di connessione in pg_hba.conf da host a hostssl:

# Permetti solo connessioni tramite SSL/TLS
hostssl all     all     0.0.0.0/0       scram-sha-256

Se disponi di client legacy che non supportano SSL, puoi consentire esplicitamente connessioni non SSL ma limitarle solo a operazioni non sensibili, sebbene il rifiuto totale sia preferibile.

3. Minimizzazione della superficie di attacco

La sicurezza implica la riduzione dell'esposizione del server di database a minacce esterne. Questo viene gestito principalmente attraverso la configurazione di rete e la disabilitazione di funzionalità non necessarie.

Limitazione dell'indirizzo di ascolto di rete

Per impostazione predefinita, PostgreSQL potrebbe ascoltare su tutte le interfacce di rete (listen_addresses = '*'). Per una maggiore sicurezza, configuralo esplicitamente per ascoltare solo sulle interfacce specifiche che richiedono accesso esterno, o su localhost se si connettono solo applicazioni locali.

In postgresql.conf:

# Ascolta solo su localhost (127.0.0.1) se possibile
listen_addresses = 'localhost'

# OPPURE, ascolta solo su un'interfaccia di rete privata specifica
# listen_addresses = '192.168.1.10'

Avviso di sicurezza: Se listen_addresses è impostato su *, verranno utilizzate tutte le interfacce. Assicurati che pg_hba.conf controlli rigorosamente quali intervalli IP possono connettersi.

Disabilitazione di estensioni e funzionalità non necessarie

Ogni estensione abilitata aggiunge potenziale complessità e vettori di attacco. Esegui regolarmente il controllo delle estensioni installate e rimuovi quelle che non vengono utilizzate attivamente per il tuo carico di lavoro di produzione. Ciò riduce al minimo la superficie di attacco complessiva.

Sicurezza delle password e ruoli

Assicurati che tutti i ruoli amministrativi (come l'utente predefinito postgres) abbiano password complesse e robuste impostate tramite ALTER USER:

ALTER USER postgres WITH PASSWORD 'LaTuaPasswordComplessaERobusta123!';

Utilizza il principio del minimo privilegio: gli utenti delle applicazioni dovrebbero avere solo i permessi SELECT, INSERT, UPDATE e DELETE sulle tabelle specifiche di cui hanno bisogno, piuttosto che lo stato di superutente.

4. Configurazione di audit e logging

Sebbene non sia strettamente un meccanismo di controllo degli accessi, un logging robusto è cruciale per rilevare e investigare incidenti di sicurezza. Configura i parametri di logging in postgresql.conf per acquisire eventi pertinenti.

Impostazioni chiave per l'audit di sicurezza:

  • log_statement = 'ddl' o 'all': Registra tutti i comandi Data Definition Language (DDL) (come CREATE TABLE, ALTER USER). Imposta su 'all' temporaneamente durante le revisioni di sicurezza, ma sii consapevole dell'impatto sulle prestazioni.
  • log_connections = on: Registra ogni tentativo di connessione riuscito.
  • log_disconnections = on: Registra quando i client si disconnettono.
  • log_duration = on: Registra il tempo di esecuzione di tutte le istruzioni, che a volte può rivelare schemi di attività insoliti.

Combinando regole di accesso rigorose in pg_hba.conf, crittografia applicata tramite SSL, un indirizzo di ascolto limitato e un logging completo, stabilisci una solida base per la protezione della tua implementazione PostgreSQL.

Riepilogo dei passaggi di sicurezza essenziali

  1. Aggiorna pg_hba.conf: Usa scram-sha-256 o peer per i metodi di autenticazione.
  2. Applica la crittografia: Imposta ssl = on in postgresql.conf e usa voci hostssl in pg_hba.conf.
  3. Limita l'ascolto: Configura listen_addresses solo sulle interfacce necessarie, evitando * predefinito se possibile.
  4. Applica il minimo privilegio: Limita i ruoli del database solo ai permessi assolutamente necessari per la loro funzione.
  5. Ricarica la configurazione: Ricarica o riavvia sempre PostgreSQL dopo aver modificato i file di sicurezza per applicare le modifiche.