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

128 lines
4.0 KiB
Markdown

# 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.