Vai al contenuto

Installazione

Nota

Come promemoria, il passaggio a root su macchine Debian deve essere fatto con il seguente comando:

1
su -

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

Impostazioni del sistema

Connezione alla macchina

Per impostazione predefinita, ci sono due account su apparecchi virtuali: un account utente e un account superutente.

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

Collegati alla macchina in modalità console.

Nota

Il layout di tastiera predefinito è QWERTY.

Cambiamento del layout della tastiera

Puoi modificare il layout della tastiera con la seguente riga di comando:

1
dpkg-reconfigure keyboard-configuration

Un menu appare per consentire di scegliere un altro layout della tastiera.

Quindi usa la seguente riga di comando per applicare e salvare le impostazioni:

1
setupcon -k --save

Le impostazioni entreranno in vigore immediatamente dopo l'esecuzione di questo comando.

Configurazione della rete

Il dispositivo virtuale può non ricevere una configurazione di rete all'avvio per i seguenti motivi:

  • Il nome dell'interfaccia di rete non è ens192: l'apparecchio è configurato con DHCP solo per l'interfaccia ens192
  • Non è disponibile un server DHCP

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

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

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

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 il comando non restituisce alcuna impostazione di rete, è necessario impostare manualmente una configurazione di rete utilizzando i seguenti comandi:

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

Sostituire:

  • IP_ADDRESS per l'indirizzo IP della macchina
  • SUBNET della sottorete
  • DEV_NAME nome dell'interfaccia di rete precedentemente recuperata
  • GATEWAY dal gateway di rete
Example

Per configurare il nodo PostgreSQL con le seguenti informazioni:

  • 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

Note

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

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

Modifica del fuso orario

Configurazione di un server NTP

Danger

Si consiglia vivamente di configurare un server orario per mantenere aggiornato l'orologio di sistema: qualsiasi differenza di orario tra i nodi PostgreSQL può causare instabilità o persino far sì che il cluster smetta di funzionare.

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

Creazione di un PKI per generare certificati di nodo PostgreSQL

Info

Questa sezione è facoltativa se si dispone già di un PKI da cui si è potuto generare il certificati indicati nei prerequisiti.
In questa sezione verranno presentati i vari passaggi per la creazione di un PKI e i certificati necessari per il cluster PostgreSQL. Si noti che non verrà indicato come rinnovarli, poiché il rinnovo di un certificato comporta la sua ricreazione.

Salta questo passaggio

Warning

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

Definizione delle variabili e personalizzazioni

Questa sezione fornisce vari comandi e file di configurazione che utilizzano variabili modificabili.
La tabella seguente riassume tutti i valori e consente di definirli in modo da 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 il FQDN) associato all'indirizzo IP virtuale del cluster PostgreSQL.
PSQL_1_IP Indirizzo IP del nodo #1 del cluster PostgreSQL.
PSQL_1_NAME Nome breve (non il FQDN) del nodo #1 del cluster PostgreSQL.
PSQL_2_IP Indirizzo IP del nodo #2 del cluster PostgreSQL.
PSQL_2_NAME Nome breve (non il FQDN) del nodo #2 del cluster PostgreSQL.
PSQL_3_IP Indirizzo IP del nodo #3 del cluster PostgreSQL.
PSQL_3_NAME Nome breve (non il FQDN) del nodo #3 del cluster PostgreSQL.
CA_ROOT_NAME Nome assegnato all'autorità di certificazione (CA) di base del PKI.

Pianificazione e preparazione

Le seguenti azioni verranno eseguite in una nuova directory per raccogliere tutti i nuovi file in una singola directory. Qualsiasi directory può essere utilizzata, ma il suo accesso deve essere limitato il più possibile. * Accedi al nodo PostgreSQL n°1* come root e esegui i seguenti comandi:

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

Creazione dell'autorità di certificazione di radice

Per creare una nuova CA radice, eseguire il seguente comando. Vi verrà richiesto un codice di accesso 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 si è personalizzato qui .

Creazione di certificati

I comandi necessari per generare certificati per i 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 lo ha fatto L'ho personalizzato 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 lo ha fatto L'ho personalizzato 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 lo ha fatto L'ho personalizzato qui..

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

Il certificato deve ancora essere convertito in P12, che richiederà di impostare 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 installare il cluster PostgreSQL possono essere trovati qui (sostituire le variabili CA_ROOT_NAME, PSQL_1_NAME, PSQL_2_NAME e PSQL_3_NAME con gli elementi selezionati in precedenza):

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

Installazione di un cluster PostgreSQL

Info

Le seguenti istruzioni devono essere eseguite sui 3 nodi PostgreSQL.

Preparazione per la configurazione del cluster PostgreSQL

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

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

Si noti che la connessione SFTP o SCP non può essere inizializzata con l'account root. Inoltre, i file possono essere semplicemente inseriti 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 dal nome del certificato destinato al nodo PostgreSQL che viene installato
  • ROOT_CA_NAME con il nome dell'autorità di certificazione radicale
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 di cui sopra devono essere stati personalizzati in base alle 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 di cui sopra devono essere stati personalizzati in base alle 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 di cui sopra devono essere stati personalizzati in base alle impostazioni di personalizzazione .

Configurazione del nodo PostgreSQL

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

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

Il secondo comando lancerà un'utilità che richiederà le seguenti informazioni:

  1. Nuove password per gli utenti locali root e systancia
  2. Nome del nodo PostgreSQL (non il FQDN)
  3. L'indirizzo IP del nodo PostgreSQL, il nome della sua interfaccia di rete, il gateway di rete di default da utilizzare, nonché i server DNS e il suffisso DNS
  4. La versione di PostgreSQL; si consiglia di utilizzare la versione 15
  5. La porta di accesso al cluster PostgreSQL; si consiglia di utilizzare la porta 5432
  6. Casella per l'account PostgreSQL utilizzato per la replica e per pg_rewind
  7. Nome e indirizzo IP di un secondo nodo PostgreSQL
  8. Nome e indirizzo IP dell'ultimo nodo PostgreSQL
  9. Indirizzo IP virtuale del cluster PostgreSQL
  10. Gli indirizzi IP (separati da virgole) degli elementi cyber Cleanroom Edge Gateway o di qualsiasi altra macchina che deve connettersi al cluster.
  11. Nome e password dell'account utente PostgreSQL
  12. Gli indirizzi IP o le reti (separate da virgole) autorizzati a connettersi via SSH ai nodi PostgreSQL
  13. Informazioni sul certificato per il nodo PostgreSQL (certificato del nodo in formato P12 + certificato CA di root)

Dopo aver inserito queste informazioni, prima della convalida verrà fornito un riepilogo di tutte le voci.
Dopo aver convalidato le informazioni fornite, apparirà un messaggio relativo all'applicazione delle modifiche apportate al /etc/ssh/sshd_config Per favore rispondi con la scelta predefinita keep the local version currently installed.

Per applicare la configurazione, è necessario un riavvio:

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

Dopo aver installato il nodo PostgreSQL n°1, è possibile recuperare i parametri utilizzati per configurarlo da questo nodo utilizzando il 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

Semplicemente modificare le righe evidenziate con i valori del nodo PostgreSQL che viene installato, in base al file che si è recuperato dal nodo PostgreSQL n°1.

Danger

Se si riutilizza il file di esempio, è necessario modificare tutti i seguenti valori evidenziati in base all'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, ci sono ancora 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