Files
privx-home-lab/database/setup-postgresql.md

4.0 KiB

Setup PostgreSQL per PrivX HA (Rocky Linux 9)

Questa guida descrive l'installazione e la configurazione di un server PostgreSQL dedicato per un cluster PrivX in High Availability.

Target OS: Rocky Linux 9 PostgreSQL Version: 15 (Versione stabile raccomandata per PrivX v42) Ruolo: Database Backend (Configurazioni, Sessioni, Audit Log)

1. Installazione PostgreSQL 15

Disabilita il modulo standard (spesso versione vecchia) e installa la repo ufficiale PGDG:

sudo dnf -qy module disable postgresql
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/15/redhat/rhel-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo dnf install -y postgresql15-server postgresql15-contrib

Inizializza il database:

sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
sudo systemctl enable --now postgresql-15

2. Configurazione SSL (Obbligatorio per PrivX)

PrivX rifiuta connessioni non criptate al DB core. Generiamo certificati self-signed per il lab (in produzione useresti una CA interna).

# Diventa utente postgres
sudo su - postgres
cd /var/lib/pgsql/15/data

# Genera chiave privata (senza passphr) e certificato valido 10 anni
openssl req -new -text -passout pass:abcd -subj /CN=privx-db -out server.req -keyout privkey.pem
openssl rsa -in privkey.pem -passin pass:abcd -out server.key
openssl req -x509 -in server.req -text -key server.key -out server.crt -days 3650

# Imposta permessi restrittivi (Postgres si rifiuta di partire se la chiave è leggibile da altri)
chmod 600 server.key
ls -l server.key

3. Configurazione postgresql.conf

Modifica /var/lib/pgsql/15/data/postgresql.conf:

# Ascolta su tutte le interfacce (o specifica l'IP del server DB)
listen_addresses = '*'

# Abilita SSL
ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'

# Ottimizzazioni per PrivX (Audit Log pesanti)
max_connections = 500          # PrivX apre molte connessioni (microservizi)
shared_buffers = 2GB           # ~25% della RAM totale (assumendo 8GB RAM per la VM DB)
work_mem = 16MB                # Aumenta per query complesse sugli audit
maintenance_work_mem = 512MB
effective_cache_size = 6GB     # ~75% della RAM totale
logging_collector = on
log_directory = 'log'

4. Configurazione pg_hba.conf

Modifica /var/lib/pgsql/15/data/pg_hba.conf per consentire l'accesso ai nodi PrivX solo via SSL e con password cifrate (SCRAM-SHA-256).

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# Accesso locale
local   all             all                                     peer

# Accesso remoto dai Nodi PrivX (Core e Web Proxy)
# Sostituisci la subnet con quella del tuo lab (es. 192.168.1.0/24)
hostssl all             all             192.168.1.0/24          scram-sha-256

Riavvia il servizio:

exit # torna utente root
sudo systemctl restart postgresql-15

5. Creazione Database e Utente PrivX

PrivX richiede un DB vuoto e un utente con privilegi. Le estensioni verranno create dall'installer di PrivX, ma è buona norma pre-abilitarle o assicurarsi che l'utente abbia i diritti per farlo.

Accedi alla shell psql:

sudo -u postgres psql

Esegui le query:

-- Crea utente dedicato
CREATE USER privx WITH PASSWORD 'password_super_segreta_da_cambiare';

-- Crea database
CREATE DATABASE privx OWNER privx;

-- Concedi privilegi (necessario per creare estensioni come pgcrypto)
GRANT ALL PRIVILEGES ON DATABASE privx TO privx;

-- (Opzionale ma consigliato) Pre-abilita le estensioni richieste
\c privx
CREATE EXTENSION IF NOT EXISTS pgcrypto;
CREATE EXTENSION IF NOT EXISTS citext;
CREATE EXTENSION IF NOT EXISTS pg_trigram; -- Cruciale per la ricerca veloce negli audit log!

-- Esci
\q

6. Verifica Connessione (Hardening Check)

Da un altro nodo (o dalla stessa macchina se hai il client), prova a connetterti forzando SSL:

psql "host=privx-db user=privx dbname=privx sslmode=require"

Se ricevi il prompt della password e entri, il DB è pronto per l'installer di PrivX.