# PrivX Core HA Setup - 2 Nodi (Rocky Linux 9) Questa guida descrive l'installazione di due server **PrivX Core** in configurazione Active-Active, connessi al DB centralizzato. **Hostname:** `privx-core-01`, `privx-core-02` **Ruolo:** Gestione autenticazione, API, storage configurazioni. ## 1. Prerequisiti su entrambi i nodi ### 1.1 Configurazione OS (Rocky Linux 9) Assicurarsi che l'orario sia sincronizzato (Cruciale per i token TOTP/JWT): ```bash sudo dnf install -y chrony sudo systemctl enable --now chronyd ``` Disabilitare SELinux (Opzionale ma consigliato per evitare problemi iniziali nel lab, riabilitare poi): ```bash sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config sudo setenforce 0 ``` ### 1.2 Firewall (UFW/Firewalld) Aprire le porte necessarie per la comunicazione tra nodi Core e verso il DB: * TCP 80/443 (HTTP/S per Load Balancer) * TCP 5432 (PostgreSQL - Outbound) * TCP 8888 (PrivX internal API - Inbound da altri nodi PrivX) ```bash sudo firewall-cmd --permanent --add-port=80/tcp sudo firewall-cmd --permanent --add-port=443/tcp sudo firewall-cmd --permanent --add-port=8888/tcp sudo firewall-cmd --reload ``` ## 2. Installazione PrivX (Nodo 01 - Master Iniziale) ### 2.1 Aggiunta Repository PrivX Scarica e installa la repo ufficiale SSH.com (richiede licenza o trial): ```bash sudo dnf config-manager --add-repo https://product-repository.ssh.com/rhel8/privx/privx.repo # Nota: La repo RHEL8 funziona spesso anche su RHEL9, altrimenti cercare specifica RHEL9 se disponibile. sudo dnf install -y privx ``` ### 2.2 Configurazione Post-Install (Script interattivo) Lancia lo script di setup sul primo nodo. Questo popolerà il DB. ```bash sudo /opt/privx/scripts/postinstall.sh ``` Durante il setup, ti verranno chiesti i parametri del DB. Inserisci quelli creati nella guida `setup-postgresql.md`: * **Database Host:** `privx-db` (o IP del DB) * **Database User:** `privx` * **Database Password:** `password_super_segreta...` * **Database Name:** `privx` * **SSL Mode:** `verify-full` (o `require` se hai certificati self-signed senza CA affidabile nel sistema). Lo script genererà anche i certificati interni per Nginx e i microservizi. ## 3. Configurazione HA (Shared Config) Per far funzionare il cluster, entrambi i nodi devono condividere la **stessa chiave di cifratura** e puntare allo stesso DB. ### 3.1 Backup Chiavi e Config dal Nodo 01 Copia i file critici dal Nodo 01 al Nodo 02 (via SCP sicuro): ```bash # Sul Nodo 01 sudo tar czvf privx-ha-pack.tar.gz \ /opt/privx/keyvault \ /opt/privx/etc/shared-config.toml \ /opt/privx/etc/privx-ca.crt \ /opt/privx/etc/privx-ca.key ``` Trasferisci `privx-ha-pack.tar.gz` sul Nodo 02. ## 4. Installazione PrivX (Nodo 02 - Replica) ### 4.1 Installazione RPM Sul secondo nodo, installa solo i pacchetti senza lanciare `postinstall.sh` subito. ```bash sudo dnf config-manager --add-repo https://product-repository.ssh.com/rhel8/privx/privx.repo sudo dnf install -y privx ``` ### 4.2 Ripristino Configurazione HA Prima di avviare, sovrascrivi le config con quelle del Nodo 01: ```bash # Sul Nodo 02 sudo systemctl stop privx || true sudo tar xzvf privx-ha-pack.tar.gz -C / sudo chown -R privx:privx /opt/privx ``` ### 4.3 Registrazione Nodo Ora avvia PrivX sul secondo nodo. Se la configurazione DB in `shared-config.toml` è corretta, il nodo si collegherà al DB esistente e scaricherà le policy. ```bash sudo systemctl enable --now privx sudo /opt/privx/scripts/init_node.sh # Se disponibile, per registrare il nodo nel cluster DB ``` ## 5. Verifica Cluster Dal Nodo 01, controlla lo stato dei componenti: ```bash privx-status # Dovresti vedere entrambi i nodi (hostname) listati nei log o nella dashboard "Settings > Deployment". ``` ## 6. Configurazione Load Balancer (Nginx/HAProxy) Davanti ai due nodi Core devi mettere un LB. Esempio config Nginx (upstream): ```nginx upstream privx_core { ip_hash; # Sticky session obbligatoria! server privx-core-01:443; server privx-core-02:443; } server { listen 443 ssl; server_name privx-lb.tuodominio.local; location / { proxy_pass https://privx_core; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ```