Initial commit: PrivX HA Architecture & Setup Guides
This commit is contained in:
127
database/setup-postgresql.md
Normal file
127
database/setup-postgresql.md
Normal file
@@ -0,0 +1,127 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user