128 lines
4.0 KiB
Markdown
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.
|