# 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: ```bash 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: ```bash 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). ```bash # 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`: ```ini # 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). ```bash # 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: ```bash 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: ```bash sudo -u postgres psql ``` Esegui le query: ```sql -- 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: ```bash 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.