Vai al contenuto

Installazione

Nota

Come promemoria, il passaggio a root sulle macchine Debian deve essere effettuato con il comando seguente:

1
su -

Le istruzioni riportate in questa pagina devono essere seguite per l'installazione di tutti i nodi del cluster PostgreSQL.

Configurazione del sistema

Connessione alla macchina

Per impostazione predefinita, sulle appliance virtuali esistono due account: un account utente e un account superutente.

  • Account utente
    • Login: systancia
    • Password: systnci
  • Account superutente
    • Login: root
    • Password: systnci

Connettersi alla macchina in modalità console.

Nota

Il layout di tastiera predefinito è QWERTY.

Modifica del layout di tastiera

È possibile cambiare il layout di tastiera con la riga di comando seguente:

1
dpkg-reconfigure keyboard-configuration

Compare un menu che permette di scegliere un altro layout di tastiera.

Utilizzare poi la riga di comando seguente per applicare e salvare le impostazioni:

1
setupcon -k --save

Le impostazioni diventano effettive immediatamente dopo l'esecuzione di questo comando.

Configurazione della rete

L'appliance virtuale può non ricevere alcuna configurazione di rete all'avvio, per i motivi seguenti:

  • Il nome dell'interfaccia di rete non è ens192: l'appliance è configurata in DHCP unicamente sull'interfaccia ens192
  • Non è disponibile alcun server DHCP

Per verificare il nome dell'interfaccia di rete, il suo stato e gli indirizzi IP assegnati, eseguire il comando seguente come root:

1
ip -br a | grep -ve "^lo"
Esempio

Dopo l'esecuzione del comando viene visualizzata la risposta seguente:

1
ens192      UP      10.100.0.51/24

Il nome dell'interfaccia di rete nell'esempio è ens192, l'interfaccia è attiva e ha l'indirizzo IP 10.100.0.51/24.

Se il nome è diverso da ens192 o se il comando non restituisce alcuna configurazione di rete, sarà necessario configurare la rete manualmente con i comandi seguenti:

1
2
ip address add IP_ADDRESS/SUBNET dev DEV_NAME
ip route add default via GATEWAY

Sostituire:

  • IP_ADDRESS con l'indirizzo IP della macchina
  • SUBNET con la sottorete
  • DEV_NAME nome dell'interfaccia di rete recuperata in precedenza
  • GATEWAY con il gateway di rete
Esempio

Per configurare il nodo PostgreSQL con le informazioni seguenti:

  • Indirizzo IP: 10.100.0.51
  • Sottorete: /24 o 255.255.255.0
  • Nome dell'interfaccia di rete: eth0
  • Gateway di rete: 10.100.0.254

I comandi sono i seguenti:

1
2
ip address add 10.100.0.51/24 dev eth0
ip route add default via 10.100.0.254

Nota

Questa configurazione di rete è temporanea, pertanto qualsiasi riavvio del server annullerà le impostazioni manuali effettuate con i comandi ip address e ip route.
La configurazione permanente sarà eseguita dall'utility di configurazione del cluster PostgreSQL.

Tuttavia, grazie a questa configurazione di rete, è ora possibile accedere al nodo PostgreSQL tramite SSH.

Modifica del fuso orario

Per impostazione predefinita, l'appliance virtuale è configurata sul fuso orario Europe/Paris.

Per cambiare questo fuso orario, utilizzare prima il comando seguente per recuperare la sintassi dei fusi orari disponibili:

1
timedatectl list-timezones

Utilizzare poi la riga di comando seguente:

1
timedatectl set-timezone your_time_zone
Esempio

Per impostare il fuso orario su Londra deve essere eseguito il comando seguente:

1
timedatectl set-timezone Europe/London

Verificare il fuso orario del server con la riga di comando seguente:

1
timedatectl

Configurazione di un server di riferimento orario NTP

Pericolo

Si raccomanda vivamente di configurare un server di riferimento orario per mantenere aggiornato l'orologio di sistema: qualsiasi differenza di orario tra i nodi PostgreSQL può causare instabilità o addirittura interrompere il funzionamento del cluster.

I passaggi necessari sono descritti nella pagina di configurazione NTP (la configurazione è equivalente a quella dei server Mediation Controller di CyberElements Bastion).

Creazione di una PKI per generare i certificati dei nodi PostgreSQL

Informazioni

Questa sezione è facoltativa se si dispone già di una PKI con la quale è stato possibile generare i certificati indicati nei prerequisiti.
Questa sezione presenta i vari passaggi per la creazione di una PKI e dei certificati necessari per il cluster PostgreSQL. Si noti che non verrà indicato come rinnovarli, poiché il rinnovo di un certificato comporta la sua ricreazione.

Saltare questo passaggio

Attenzione!

La procedura descritta è stata convalidata su una macchina Debian 12 con il pacchetto openssl. Tuttavia, qualsiasi macchina dotata di una versione recente di OpenSSL (la versione convalidata è 3.0.17) sarà in grado di completare la procedura. Tranne su Windows o MacOS, dove i comandi di sistema dovranno essere adattati.

Definizione delle variabili e delle personalizzazioni

Questa sezione fornisce vari comandi e file di configurazione che utilizzano variabili modificabili.
La tabella seguente riepiloga tutti i valori e permette di definirli per poterli modificare direttamente nei comandi visualizzati in questa pagina.

Valore Variabile Definizione
PSQL_IP Indirizzo IP virtuale del cluster PostgreSQL.
PSQL_NAME Nome breve (non l'FQDN) associato all'indirizzo IP virtuale del cluster PostgreSQL.
PSQL_1_IP Indirizzo IP del nodo n°1 del cluster PostgreSQL.
PSQL_1_NAME Nome breve (non l'FQDN) del nodo n°1 del cluster PostgreSQL.
PSQL_2_IP Indirizzo IP del nodo n°2 del cluster PostgreSQL.
PSQL_2_NAME Nome breve (non l'FQDN) del nodo n°2 del cluster PostgreSQL.
PSQL_3_IP Indirizzo IP del nodo n°3 del cluster PostgreSQL.
PSQL_3_NAME Nome breve (non l'FQDN) del nodo n°3 del cluster PostgreSQL.
CA_ROOT_NAME Nome assegnato all'autorità di certificazione (CA) radice della PKI.

Preparazione

Le azioni seguenti saranno eseguite in una nuova directory, al fine di riunire tutti i nuovi file in una sola directory. È possibile utilizzare qualsiasi directory, ma il suo accesso deve essere limitato il più possibile. Connettersi al nodo PostgreSQL n°1 come root ed eseguire i comandi seguenti:

1
2
3
mkdir /root/psql-certificates/
chmod 600 /root/psql-certificates/
cd /root/psql-certificates/

Creazione dell'autorità di certificazione radice

Eseguire il comando seguente per creare una nuova CA radice. Verrà richiesta una password per proteggere la CA:

1
openssl req -x509 -newkey rsa:4096 -days 3650 -sha512 -keyout CA_ROOT_NAME.key -out CA_ROOT_NAME.crt -subj "/CN=CA_ROOT_NAME" -extensions v3_ca -addext "subjectKeyIdentifier=hash" -addext "authorityKeyIdentifier=keyid:always,issuer:always" -addext "basicConstraints=critical,CA:true" -addext "keyUsage=critical,digitalSignature,cRLSign,keyCertSign"

Sostituire CA_ROOT_NAME con il nome della CA radice se non è stato personalizzato qui.

Creazione dei certificati

I comandi necessari per generare i certificati dei nodi PostgreSQL sono i seguenti:

1
2
3
openssl genrsa -out PSQL_1_NAME.key 4096
openssl req -new -key PSQL_1_NAME.key -out PSQL_1_NAME.csr -subj "/CN=PSQL_1_NAME"
openssl x509 -req -in PSQL_1_NAME.csr -CA CA_ROOT_NAME.crt -CAkey CA_ROOT_NAME.key -CAcreateserial -out PSQL_1_NAME.crt -days 1825 -sha512 -extfile <(printf "subjectKeyIdentifier=hash\nauthorityKeyIdentifier=keyid,issuer\nbasicConstraints=critical,CA:FALSE\nkeyUsage=critical,digitalSignature\nextendedKeyUsage=serverAuth,clientAuth\nsubjectAltName=DNS:PSQL_NAME,DNS:PSQL_1_NAME,IP:PSQL_IP,IP:PSQL_1_IP")

Sostituire CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_1_IP e PSQL_1_NAME se non sono stati personalizzati qui.

1
2
3
openssl genrsa -out PSQL_2_NAME.key 4096
openssl req -new -key PSQL_2_NAME.key -out PSQL_2_NAME.csr -subj "/CN=PSQL_2_NAME"
openssl x509 -req -in PSQL_2_NAME.csr -CA CA_ROOT_NAME.crt -CAkey CA_ROOT_NAME.key -CAcreateserial -out PSQL_2_NAME.crt -days 1825 -sha512 -extfile <(printf "subjectKeyIdentifier=hash\nauthorityKeyIdentifier=keyid,issuer\nbasicConstraints=critical,CA:FALSE\nkeyUsage=critical,digitalSignature\nextendedKeyUsage=serverAuth,clientAuth\nsubjectAltName=DNS:PSQL_NAME,DNS:PSQL_2_NAME,IP:PSQL_IP,IP:PSQL_2_IP")

Sostituire CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_2_IP e PSQL_2_NAME se non sono stati personalizzati qui.

1
2
3
openssl genrsa -out PSQL_3_NAME.key 4096
openssl req -new -key PSQL_3_NAME.key -out PSQL_3_NAME.csr -subj "/CN=PSQL_3_NAME"
openssl x509 -req -in PSQL_3_NAME.csr -CA CA_ROOT_NAME.crt -CAkey CA_ROOT_NAME.key -CAcreateserial -out PSQL_3_NAME.crt -days 1825 -sha512 -extfile <(printf "subjectKeyIdentifier=hash\nauthorityKeyIdentifier=keyid,issuer\nbasicConstraints=critical,CA:FALSE\nkeyUsage=critical,digitalSignature\nextendedKeyUsage=serverAuth,clientAuth\nsubjectAltName=DNS:PSQL_NAME,DNS:PSQL_3_NAME,IP:PSQL_IP,IP:PSQL_3_IP")

Sostituire CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_3_IP e PSQL_3_NAME se non sono stati personalizzati qui.

Il primo comando crea una nuova chiave, il secondo genera un file di richiesta di firma del certificato CSR e il terzo crea il certificato stesso.

Resta solo da convertire il certificato in P12, operazione che richiederà di definire una password:

1
openssl pkcs12 -chain -CAfile CA_ROOT_NAME.crt -export -inkey PSQL_1_NAME.key -in PSQL_1_NAME.crt -out PSQL_1_NAME.p12
1
openssl pkcs12 -chain -CAfile CA_ROOT_NAME.crt -export -inkey PSQL_2_NAME.key -in PSQL_2_NAME.crt -out PSQL_2_NAME.p12
1
openssl pkcs12 -chain -CAfile CA_ROOT_NAME.crt -export -inkey PSQL_3_NAME.key -in PSQL_3_NAME.crt -out PSQL_3_NAME.p12

I file necessari per l'installazione del cluster PostgreSQL si trovano qui (sostituire le variabili CA_ROOT_NAME, PSQL_1_NAME, PSQL_2_NAME e PSQL_3_NAME con i valori scelti in precedenza):

  • /root/psql-certificates/CA_ROOT_NAME.crt: certificato della CA radice
  • /root/psql-certificates/PSQL_1_NAME.p12: certificato del nodo PostgreSQL n°1
  • /root/psql-certificates/PSQL_2_NAME.p12: certificato del nodo PostgreSQL n°2
  • /root/psql-certificates/PSQL_3_NAME.p12: certificato del nodo PostgreSQL n°3

Installazione di un cluster PostgreSQL

Informazioni

I passaggi seguenti devono essere eseguiti su tutti e tre i nodi PostgreSQL.

Preparazione della configurazione del cluster PostgreSQL

È necessario stabilire una connessione SFTP o SCP per inviare all'appliance:

  • Il certificato dell'autorità di certificazione che ha firmato i certificati dei nodi PostgreSQL
  • Il certificato del nodo PostgreSQL in formato P12

Si noti che le connessioni SFTP o SCP non possono essere avviate con l'account root. Inoltre, i file possono essere semplicemente collocati in /home/systancia/.

È necessario spostare questi file in una nuova directory:

1
2
3
mkdir /etc/ssl/certs/cleanroom/
mv /home/systancia/PSQL_?_NAME.p12 /etc/ssl/certs/cleanroom/
mv /home/systancia/ROOT_CA_NAME.crt /etc/ssl/certs/cleanroom/

Sostituire:

  • PSQL_?_NAME con il nome del certificato destinato al nodo PostgreSQL in corso di installazione
  • ROOT_CA_NAME con il nome del certificato dell'autorità di certificazione radice
1
2
3
mkdir /etc/ssl/certs/cleanroom/
cp /root/psql-certificates/PSQL_1_NAME.p12 /etc/ssl/certs/cleanroom/
cp /root/psql-certificates/CA_ROOT_NAME.crt /etc/ssl/certs/cleanroom/

I comandi precedenti devono essere stati personalizzati secondo le impostazioni di personalizzazione.

1
2
3
mkdir /etc/ssl/certs/cleanroom/
mv /home/systancia/PSQL_2_NAME.p12 /etc/ssl/certs/cleanroom/
mv /home/systancia/CA_ROOT_NAME.crt /etc/ssl/certs/cleanroom/

I comandi precedenti devono essere stati personalizzati secondo le impostazioni di personalizzazione.

1
2
3
mkdir /etc/ssl/certs/cleanroom/
mv /home/systancia/PSQL_3_NAME.p12 /etc/ssl/certs/cleanroom/
mv /home/systancia/CA_ROOT_NAME.crt /etc/ssl/certs/cleanroom/

I comandi precedenti devono essere stati personalizzati secondo le impostazioni di personalizzazione.

Configurazione del nodo PostgreSQL

Per avviare l'inizializzazione della configurazione del nodo devono essere eseguiti i comandi seguenti:

1
2
cd /etc/ssl/certs/cleanroom/
ConfigureSystanciaVault.py

Il secondo comando avvia una utility che richiederà le informazioni seguenti:

  1. Le nuove password degli utenti locali root e systancia
  2. Il nome del nodo PostgreSQL (non l'FQDN)
  3. L'indirizzo IP del nodo PostgreSQL, il nome della sua interfaccia di rete, il gateway di rete predefinito da utilizzare, nonché i server DNS e il suffisso DNS
  4. La versione di PostgreSQL; si raccomanda di utilizzare la versione 15
  5. La porta di accesso al cluster PostgreSQL; si raccomanda di utilizzare la porta 5432
  6. La password dell'account PostgreSQL utilizzato per la replica e per pg_rewind
  7. Il nome e l'indirizzo IP di un secondo nodo PostgreSQL
  8. Il nome e l'indirizzo IP dell'ultimo nodo PostgreSQL
  9. L'indirizzo IP virtuale del cluster PostgreSQL
  10. Gli indirizzi IP (separati da virgole) degli Edge Gateway di CyberElements Bastion o di qualsiasi altra macchina che debba connettersi al cluster
  11. Il nome e la password dell'account utente PostgreSQL
  12. Gli indirizzi IP o le reti (separate da virgole) autorizzate a connettersi tramite SSH ai nodi PostgreSQL
  13. Le informazioni relative al certificato del nodo PostgreSQL (certificato del nodo in formato P12 + certificato della CA radice)

Dopo aver immesso queste informazioni, verrà presentato un riepilogo di tutti i dati inseriti prima della convalida.
Dopo aver confermato le informazioni fornite, comparirà un messaggio relativo alle modifiche del file /etc/ssh/sshd_config. Selezionare l'opzione predefinita, keep the local version currently installed.

Per applicare la configurazione è necessario un riavvio:

1
reboot
Suggerimento per accelerare l'installazione dei nodi PostgreSQL n°2 e n°3

Dopo aver installato il nodo PostgreSQL n°1, è possibile recuperare le impostazioni di configurazione utilizzate per la sua installazione dal file /etc/cleanroom-vault.ini.

Esempio del file /etc/cleanroom-vault.ini

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
[local]
name = PSQL-1
ip = 172.16.10.51

[cluster]
server1 = PSQL-2,172.16.10.52
server2 = PSQL-3,172.16.10.53

[ssl]
ca = MY-ROOT-CA.crt
client_cert = /etc/cleanroomvault.crt
client_key = /etc/cleanroomvault.key
peer_cert = /etc/cleanroomvault.crt
peer_key = /etc/cleanroomvault.key

[postgresql]
port = 5432
cluster = cleanroomvault5
version = 15

[patroni]
api_port = 8008
replication_password = R3pl1cationP@SSw0rd
rewind_password = Rew1ndP@SSw0rd

[vip]
interface = ens192
ip = 172.16.10.50

[cleanroom]
gw_ips = 172.16.10.10, 172.16.10.11
db_user = DbUser
db_password = DbP@SSw0rd

[networking]
interface = ens192
ip = 172.16.10.51/24
gateway = 172.16.10.254
dns = 172.16.10.100
dnssuffix = domain.local

[ssh]
allow = 10.0.20.0/24

È sufficiente modificare le righe evidenziate con i valori del nodo PostgreSQL in corso di installazione, a partire dal file recuperato dal nodo PostgreSQL n°1.

Pericolo

Se si riutilizza il file di esempio, sarà necessario modificare tutti i valori evidenziati seguenti in funzione del proprio ambiente:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
[local]
name = PSQL-1
ip = 172.16.10.51

[cluster]
server1 = PSQL-2,172.16.10.52
server2 = PSQL-3,172.16.10.53

[ssl]
ca = MY-ROOT-CA.crt
client_cert = /etc/cleanroomvault.crt
client_key = /etc/cleanroomvault.key
peer_cert = /etc/cleanroomvault.crt
peer_key = /etc/cleanroomvault.key

[postgresql]
port = 5432
cluster = cleanroomvault5
version = 15

[patroni]
api_port = 8008
replication_password = R3pl1cationP@SSw0rd
rewind_password = Rew1ndP@SSw0rd

[vip]
interface = ens192
ip = 172.16.10.50

[cleanroom]
gw_ips = 172.16.10.10, 172.16.10.11
db_user = DbUser
db_password = DbP@SSw0rd

[networking]
interface = ens192
ip = 172.16.10.51/24
gateway = 172.16.10.254
dns = 172.16.10.100
dnssuffix = domain.local

[ssh]
allow = 10.0.20.0/24

Configurazioni aggiuntive per patronictl

Per poter utilizzare i comandi di gestione del cluster PostgreSQL con patronictl, restano alcuni comandi da eseguire come root sul nodo PostgreSQL:

1
2
3
4
sed -i "s/2380/2380, 8008/g" /etc/nftables.conf
systemctl reload nftables
cp /etc/patroni/ca.crt /usr/local/share/ca-certificates/PSQL-CA.crt
update-ca-certificates

Configurazioni aggiuntive per etcd

Per abilitare la compattazione e la deframmentazione automatiche del database etcd, eseguire i comandi seguenti come root sul nodo PostgreSQL:

1
2
3
4
5
6
7
apt update
apt install etcd-client
echo -e 'ETCD_AUTO_COMPACTION_MODE="periodic"\nETCD_AUTO_COMPACTION_RETENTION="1"' >> /etc/default/etcd
systemctl restart etcd
echo -e '#!/bin/bash\n\nsource /etc/default/etcd\netcdctl --endpoints=${ETCD_ADVERTISE_CLIENT_URLS}  --cert=${ETCD_CERT_FILE} --key=${ETCD_KEY_FILE} "$@"' > /usr/bin/clr_etcdctl
chmod a+x /usr/bin/clr_etcdctl
echo '0 3 * * * root clr_etcdctl defrag' > /etc/cron.d/systancia-db

Creazione del database default necessario per l'installazione di CyberElements Bastion

Al momento dell'installazione di CyberElements Bastion è necessario creare prima un database denominato default.
A tale scopo, compilare la tabella seguente per personalizzare il comando che dovrà essere eseguito da uno qualsiasi dei nodi del cluster PostgreSQL:

Valore Variabile Definizione
PSQL_VIP Indirizzo IP virtuale del cluster PostgreSQL.
DB_USER Il nome utente del database indicato durante la configurazione del nodo PostgreSQL

Comando da eseguire da uno qualsiasi dei nodi del cluster PostgreSQL:

1
createdb -h PSQL_VIP -U DB_USER default